summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Makefile36
-rw-r--r--asm/macros/event.inc20
-rw-r--r--berry_fix/Makefile166
-rw-r--r--berry_fix/asm/berry_fix_header.inc35
-rw-r--r--berry_fix/asm/loader.s119
-rw-r--r--berry_fix/charmap.txt1067
-rw-r--r--berry_fix/data/data.s4
-rw-r--r--berry_fix/ld_script.sed14
-rw-r--r--berry_fix/ld_script.txt31
-rw-r--r--berry_fix/payload/Makefile172
-rw-r--r--berry_fix/payload/asm/crt0.s82
-rw-r--r--berry_fix/payload/asm/libagbsyscall.s46
-rw-r--r--berry_fix/payload/asm/macros/function.inc29
-rw-r--r--berry_fix/payload/charmap.txt1067
-rw-r--r--berry_fix/payload/common_syms/agb_flash.txt10
-rw-r--r--berry_fix/payload/common_syms/main.txt9
-rw-r--r--berry_fix/payload/common_syms/rtc.txt2
-rw-r--r--berry_fix/payload/constants/gba_constants.inc490
-rw-r--r--berry_fix/payload/graphics/debug_digits.pngbin0 -> 166 bytes
-rw-r--r--berry_fix/payload/graphics/msg_box.pngbin0 -> 2631 bytes
-rw-r--r--berry_fix/payload/graphics/msg_box.tilemapbin0 -> 8192 bytes
-rw-r--r--berry_fix/payload/include/constants/game_stat.h56
-rw-r--r--berry_fix/payload/include/constants/vars.h196
-rw-r--r--berry_fix/payload/include/flash.h55
-rw-r--r--berry_fix/payload/include/gba/defines.h87
-rw-r--r--berry_fix/payload/include/gba/flash_internal.h85
-rw-r--r--berry_fix/payload/include/gba/gba.h12
-rw-r--r--berry_fix/payload/include/gba/io_reg.h770
-rw-r--r--berry_fix/payload/include/gba/isagbprint.h50
-rw-r--r--berry_fix/payload/include/gba/m4a_internal.h467
-rw-r--r--berry_fix/payload/include/gba/macro.h247
-rw-r--r--berry_fix/payload/include/gba/multiboot.h55
-rw-r--r--berry_fix/payload/include/gba/syscall.h57
-rw-r--r--berry_fix/payload/include/gba/types.h146
-rw-r--r--berry_fix/payload/include/global.berry.h62
-rw-r--r--berry_fix/payload/include/global.fieldmap.h317
-rw-r--r--berry_fix/payload/include/global.h875
-rw-r--r--berry_fix/payload/include/main.h45
-rw-r--r--berry_fix/payload/include/pokemon.h154
-rw-r--r--berry_fix/payload/include/rtc.h15
-rw-r--r--berry_fix/payload/include/siirtc.h54
-rw-r--r--berry_fix/payload/ld_script.sed14
-rw-r--r--berry_fix/payload/ld_script.txt107
-rw-r--r--berry_fix/payload/rom.sha11
-rw-r--r--berry_fix/payload/src/agb_flash.c296
-rw-r--r--berry_fix/payload/src/agb_flash_1m.c86
-rw-r--r--berry_fix/payload/src/agb_flash_le.c31
-rw-r--r--berry_fix/payload/src/agb_flash_mx.c193
-rw-r--r--berry_fix/payload/src/flash.c752
-rw-r--r--berry_fix/payload/src/main.c289
-rw-r--r--berry_fix/payload/src/rtc.c346
-rw-r--r--berry_fix/payload/src/siirtc.c432
-rw-r--r--berry_fix/payload/sym_bss.txt5
-rw-r--r--berry_fix/payload/sym_common.txt29
-rw-r--r--berry_fix/payload/sym_ewram.txt3
-rw-r--r--berry_fix/rom.sha11
-rwxr-xr-xbuild_tools.sh18
-rw-r--r--charmap.txt9
-rw-r--r--common_syms/field_specials.txt2
-rw-r--r--constants/berry_constants.inc6
-rw-r--r--constants/constants.inc2
-rw-r--r--constants/pokemon_data_constants.inc35
-rw-r--r--data/berry_fix.mbbin15348 -> 0 bytes
-rw-r--r--data/ereader_helpers.s53
-rwxr-xr-xdata/ereader_screen.s7
-rw-r--r--data/event_scripts.s579
-rw-r--r--data/maps/BattleFrontier_BattleArenaBattleRoom/scripts.inc24
-rw-r--r--data/maps/BattleFrontier_BattleArenaLobby/scripts.inc18
-rw-r--r--data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.inc250
-rw-r--r--data/maps/BattleFrontier_BattleDomeLobby/scripts.inc18
-rw-r--r--data/maps/BattleFrontier_BattleDomePreBattleRoom/scripts.inc18
-rw-r--r--data/maps/BattleFrontier_BattleFactoryLobby/scripts.inc18
-rw-r--r--data/maps/BattleFrontier_BattleFactoryPreBattleRoom/scripts.inc28
-rw-r--r--data/maps/BattleFrontier_BattlePalaceBattleRoom/scripts.inc24
-rw-r--r--data/maps/BattleFrontier_BattlePalaceLobby/scripts.inc18
-rw-r--r--data/maps/BattleFrontier_BattlePikeCorridor/scripts.inc2
-rw-r--r--data/maps/BattleFrontier_BattlePikeLobby/scripts.inc14
-rw-r--r--data/maps/BattleFrontier_BattlePikeRandomRoom2/scripts.inc2
-rw-r--r--data/maps/BattleFrontier_BattlePikeRandomRoom3/scripts.inc2
-rw-r--r--data/maps/BattleFrontier_BattlePikeThreePathRoom/scripts.inc4
-rw-r--r--data/maps/BattleFrontier_BattlePointExchangeServiceCorner/scripts.inc118
-rw-r--r--data/maps/BattleFrontier_BattlePyramidLobby/scripts.inc24
-rw-r--r--data/maps/BattleFrontier_BattlePyramidTop/scripts.inc2
-rw-r--r--data/maps/BattleFrontier_BattleTowerBattleRoom/scripts.inc24
-rw-r--r--data/maps/BattleFrontier_BattleTowerBattleRoom2/scripts.inc36
-rw-r--r--data/maps/BattleFrontier_BattleTowerCorridor2/scripts.inc4
-rw-r--r--data/maps/BattleFrontier_BattleTowerElevator/scripts.inc6
-rw-r--r--data/maps/BattleFrontier_BattleTowerLobby/scripts.inc58
-rw-r--r--data/maps/BattleFrontier_BattleTowerMultiBattleRoom/scripts.inc10
-rw-r--r--data/maps/BattleFrontier_Lounge1/scripts.inc4
-rw-r--r--data/maps/BattleFrontier_Lounge2/scripts.inc22
-rw-r--r--data/maps/BattleFrontier_Lounge3/scripts.inc50
-rw-r--r--data/maps/BattleFrontier_Lounge5/map.json2
-rw-r--r--data/maps/BattleFrontier_Lounge5/scripts.inc72
-rw-r--r--data/maps/BattleFrontier_Lounge7/scripts.inc46
-rw-r--r--data/maps/BattleFrontier_OutsideWest/scripts.inc4
-rw-r--r--data/maps/BattleFrontier_ReceptionGate/scripts.inc14
-rw-r--r--data/maps/BattleFrontier_ScottsHouse/scripts.inc6
-rw-r--r--data/maps/BirthIsland_Harbor/scripts.inc6
-rw-r--r--data/maps/CaveOfOrigin_B1F/scripts.inc2
-rw-r--r--data/maps/DewfordTown/scripts.inc8
-rw-r--r--data/maps/EverGrandeCity_ChampionsRoom/scripts.inc2
-rw-r--r--data/maps/EverGrandeCity_DrakesRoom/scripts.inc2
-rw-r--r--data/maps/EverGrandeCity_GlaciasRoom/scripts.inc2
-rw-r--r--data/maps/EverGrandeCity_Hall1/scripts.inc2
-rw-r--r--data/maps/EverGrandeCity_Hall2/scripts.inc2
-rw-r--r--data/maps/EverGrandeCity_Hall3/scripts.inc2
-rw-r--r--data/maps/EverGrandeCity_Hall4/scripts.inc2
-rw-r--r--data/maps/EverGrandeCity_Hall5/scripts.inc2
-rw-r--r--data/maps/EverGrandeCity_HallOfFame/scripts.inc2
-rw-r--r--data/maps/EverGrandeCity_PhoebesRoom/scripts.inc2
-rw-r--r--data/maps/EverGrandeCity_PokemonLeague_1F/scripts.inc4
-rw-r--r--data/maps/EverGrandeCity_SidneysRoom/scripts.inc2
-rw-r--r--data/maps/FallarborTown_BattleTentBattleRoom/scripts.inc6
-rw-r--r--data/maps/FallarborTown_BattleTentLobby/scripts.inc10
-rw-r--r--data/maps/FarawayIsland_Entrance/scripts.inc8
-rw-r--r--data/maps/FarawayIsland_Interior/scripts.inc4
-rw-r--r--data/maps/FortreeCity_House2/scripts.inc6
-rw-r--r--data/maps/LilycoveCity/scripts.inc2
-rw-r--r--data/maps/LilycoveCity_ContestLobby/scripts.inc20
-rw-r--r--data/maps/LilycoveCity_DepartmentStoreElevator/scripts.inc54
-rw-r--r--data/maps/LilycoveCity_DepartmentStoreRooftop/scripts.inc27
-rw-r--r--data/maps/LilycoveCity_DepartmentStore_5F/scripts.inc2
-rw-r--r--data/maps/LilycoveCity_Harbor/map.json6
-rw-r--r--data/maps/LilycoveCity_Harbor/scripts.inc428
-rw-r--r--data/maps/LilycoveCity_LilycoveMuseum_1F/scripts.inc2
-rw-r--r--data/maps/LilycoveCity_LilycoveMuseum_2F/scripts.inc2
-rw-r--r--data/maps/LilycoveCity_PokemonCenter_1F/scripts.inc2
-rw-r--r--data/maps/LilycoveCity_PokemonTrainerFanClub/scripts.inc6
-rw-r--r--data/maps/LinkContestRoom1/scripts.inc222
-rw-r--r--data/maps/LittlerootTown/scripts.inc2
-rw-r--r--data/maps/LittlerootTown_BrendansHouse_1F/scripts.inc2
-rw-r--r--data/maps/LittlerootTown_BrendansHouse_2F/scripts.inc6
-rw-r--r--data/maps/LittlerootTown_MaysHouse_1F/scripts.inc2
-rw-r--r--data/maps/LittlerootTown_MaysHouse_2F/scripts.inc6
-rw-r--r--data/maps/LittlerootTown_ProfessorBirchsLab/scripts.inc26
-rw-r--r--data/maps/MauvilleCity_BikeShop/scripts.inc10
-rw-r--r--data/maps/MauvilleCity_GameCorner/scripts.inc62
-rw-r--r--data/maps/MossdeepCity_SpaceCenter_1F/scripts.inc2
-rw-r--r--data/maps/MossdeepCity_SpaceCenter_2F/scripts.inc16
-rw-r--r--data/maps/MossdeepCity_StevensHouse/scripts.inc2
-rw-r--r--data/maps/MtChimney/scripts.inc5
-rw-r--r--data/maps/NavelRock_Harbor/scripts.inc6
-rw-r--r--data/maps/PetalburgCity_Gym/scripts.inc4
-rw-r--r--data/maps/PetalburgCity_WallysHouse/scripts.inc4
-rw-r--r--data/maps/Route104/scripts.inc6
-rw-r--r--data/maps/Route104_MrBrineysHouse/scripts.inc4
-rw-r--r--data/maps/Route104_PrettyPetalFlowerShop/scripts.inc2
-rw-r--r--data/maps/Route109/scripts.inc6
-rw-r--r--data/maps/Route109_SeashoreHouse/scripts.inc5
-rw-r--r--data/maps/Route110_TrickHouseEnd/scripts.inc12
-rw-r--r--data/maps/Route110_TrickHouseEntrance/scripts.inc14
-rw-r--r--data/maps/Route110_TrickHousePuzzle5/scripts.inc30
-rw-r--r--data/maps/Route111/scripts.inc2
-rw-r--r--data/maps/Route113_GlassWorkshop/scripts.inc42
-rw-r--r--data/maps/Route114/scripts.inc2
-rw-r--r--data/maps/Route114_LanettesHouse/scripts.inc2
-rw-r--r--data/maps/Route117/map.json2
-rw-r--r--data/maps/Route117_PokemonDayCare/map.json2
-rw-r--r--data/maps/Route119_WeatherInstitute_2F/scripts.inc4
-rw-r--r--data/maps/Route120/scripts.inc10
-rw-r--r--data/maps/Route121_SafariZoneEntrance/scripts.inc5
-rw-r--r--data/maps/Route123_BerryMastersHouse/scripts.inc6
-rw-r--r--data/maps/Route124_DivingTreasureHuntersHouse/scripts.inc46
-rw-r--r--data/maps/RustboroCity/scripts.inc6
-rw-r--r--data/maps/RustboroCity_DevonCorp_2F/scripts.inc8
-rw-r--r--data/maps/RustboroCity_DevonCorp_3F/scripts.inc2
-rw-r--r--data/maps/RustboroCity_Flat1_2F/scripts.inc2
-rw-r--r--data/maps/RustboroCity_PokemonSchool/scripts.inc4
-rw-r--r--data/maps/RusturfTunnel/scripts.inc4
-rw-r--r--data/maps/SeafloorCavern_Entrance/scripts.inc2
-rw-r--r--data/maps/SkyPillar_Top/scripts.inc4
-rw-r--r--data/maps/SlateportCity/scripts.inc28
-rw-r--r--data/maps/SlateportCity_BattleTentCorridor/scripts.inc12
-rw-r--r--data/maps/SlateportCity_BattleTentLobby/scripts.inc10
-rw-r--r--data/maps/SlateportCity_Harbor/scripts.inc16
-rw-r--r--data/maps/SlateportCity_House1/scripts.inc2
-rw-r--r--data/maps/SlateportCity_OceanicMuseum_1F/scripts.inc5
-rw-r--r--data/maps/SootopolisCity/scripts.inc18
-rw-r--r--data/maps/SootopolisCity_Gym_1F/scripts.inc4
-rw-r--r--data/maps/SootopolisCity_House6/scripts.inc4
-rw-r--r--data/maps/SootopolisCity_MysteryEventsHouse_1F/scripts.inc2
-rw-r--r--data/maps/SouthernIsland_Exterior/scripts.inc8
-rw-r--r--data/maps/SouthernIsland_Interior/scripts.inc14
-rw-r--r--data/maps/TrainerHill_Elevator/scripts.inc6
-rw-r--r--data/maps/TrainerHill_Entrance/scripts.inc8
-rw-r--r--data/maps/UnknownLinkContestRoom_25_29/map.json2
-rw-r--r--data/maps/UnknownLinkContestRoom_25_30/map.json2
-rw-r--r--data/maps/UnknownLinkContestRoom_25_31/map.json2
-rw-r--r--data/maps/UnknownLinkContestRoom_25_32/map.json2
-rw-r--r--data/maps/UnknownLinkContestRoom_25_33/map.json2
-rw-r--r--data/maps/UnknownLinkContestRoom_25_34/map.json2
-rw-r--r--data/maps/VerdanturfTown_BattleTentBattleRoom/scripts.inc6
-rw-r--r--data/maps/VerdanturfTown_BattleTentLobby/scripts.inc12
-rw-r--r--data/maps/VictoryRoad_1F/scripts.inc2
-rw-r--r--data/multiboot_berry_glitch_fix.s2
-rw-r--r--data/mystery_event_msg.s5
-rw-r--r--data/script_cmd_table.inc2
-rw-r--r--data/scripts/apprentice.inc152
-rw-r--r--data/scripts/cable_club.inc86
-rw-r--r--data/scripts/contest_hall.inc160
-rw-r--r--data/scripts/day_care.inc303
-rw-r--r--data/scripts/mystery_event_club.inc8
-rw-r--r--data/scripts/players_house.inc2
-rw-r--r--data/scripts/pokeblocks.inc4
-rw-r--r--data/scripts/trainer_battle.inc4
-rw-r--r--data/specials.inc166
-rw-r--r--data/text/event_ticket_1.inc (renamed from data/text/eon_ticket.inc)23
-rw-r--r--data/text/event_ticket_2.inc71
-rw-r--r--data/text/match_call.inc338
-rw-r--r--data/unknown_jp_62609C.binbin1912 -> 0 bytes
-rw-r--r--include/battle.h9
-rw-r--r--include/battle_controllers.h10
-rw-r--r--include/battle_tower.h4
-rw-r--r--include/berry.h33
-rw-r--r--include/constants/battle_frontier.h32
-rw-r--r--include/constants/berry.h28
-rw-r--r--include/constants/contest.h19
-rw-r--r--include/constants/daycare.h27
-rw-r--r--include/constants/field_specials.h52
-rw-r--r--include/constants/flags.h4
-rw-r--r--include/constants/global.h15
-rw-r--r--include/constants/item.h20
-rw-r--r--include/constants/lilycove_lady.h26
-rwxr-xr-xinclude/constants/map_groups.h122
-rw-r--r--include/constants/pokemon.h322
-rw-r--r--include/constants/script_menu.h168
-rw-r--r--include/constants/vars.h8
-rw-r--r--include/contest.h21
-rw-r--r--include/credits.h2
-rw-r--r--include/data.h4
-rw-r--r--include/daycare.h8
-rw-r--r--include/egg_hatch.h4
-rwxr-xr-xinclude/ereader_helpers.h49
-rw-r--r--include/field_specials.h22
-rw-r--r--include/gba/types.h4
-rw-r--r--include/global.fieldmap.h13
-rw-r--r--include/global.h79
-rw-r--r--include/global.tv.h5
-rw-r--r--include/graphics.h171
-rw-r--r--include/item.h21
-rw-r--r--include/item_menu.h4
-rw-r--r--include/lilycove_lady.h18
-rw-r--r--include/mon_markings.h6
-rw-r--r--include/party_menu.h35
-rw-r--r--include/pokedex.h3
-rw-r--r--include/pokemon.h189
-rw-r--r--include/pokenav.h32
-rw-r--r--include/script_menu.h24
-rw-r--r--include/script_movement.h6
-rw-r--r--include/slot_machine.h1
-rw-r--r--include/strings.h447
-rw-r--r--include/task.h3
-rw-r--r--include/text.h15
-rw-r--r--include/trainer_hill.h46
-rw-r--r--ld_script.txt54
-rw-r--r--ld_script_modern.txt9
-rw-r--r--src/apprentice.c12
-rw-r--r--src/battle_ai_script_commands.c20
-rw-r--r--src/battle_ai_switch_items.c2
-rw-r--r--src/battle_anim.c2
-rw-r--r--src/battle_anim_effects_1.c20
-rwxr-xr-xsrc/battle_anim_effects_2.c8
-rwxr-xr-xsrc/battle_anim_effects_3.c8
-rw-r--r--src/battle_controller_player.c2
-rw-r--r--src/battle_controllers.c22
-rw-r--r--src/battle_factory.c4
-rw-r--r--src/battle_gfx_sfx_util.c2
-rw-r--r--src/battle_interface.c2
-rw-r--r--src/battle_main.c22
-rw-r--r--src/battle_pike.c2
-rw-r--r--src/battle_pyramid.c2
-rw-r--r--src/battle_script_commands.c150
-rw-r--r--src/battle_setup.c163
-rw-r--r--src/battle_tower.c10
-rw-r--r--src/battle_transition.c5
-rw-r--r--src/battle_util.c22
-rw-r--r--src/berry.c1
-rw-r--r--src/berry_blender.c1
-rw-r--r--src/berry_tag_screen.c5
-rw-r--r--src/bg.c69
-rw-r--r--src/clock.c2
-rw-r--r--src/contest.c8
-rw-r--r--src/contest_painting.c2
-rw-r--r--src/credits.c475
-rw-r--r--src/crt0.s (renamed from asm/crt0.s)0
-rw-r--r--src/data/battle_frontier/battle_frontier_exchange_corner.h99
-rw-r--r--src/data/battle_frontier/trainer_hill.h9750
-rw-r--r--src/data/decoration/icon.h245
-rwxr-xr-xsrc/data/field_event_obj/event_object_graphics_info_pointers.h478
-rw-r--r--src/data/graphics/decorations.h168
-rw-r--r--src/data/lilycove_lady.h470
-rw-r--r--src/data/pokemon/tutor_learnsets.h11456
-rw-r--r--src/data/script_menu.h1006
-rwxr-xr-xsrc/data/wild_encounters.json26
-rwxr-xr-xsrc/data/wild_encounters.json.txt11
-rw-r--r--src/daycare.c282
-rw-r--r--src/decoration.c4
-rw-r--r--src/diploma.c2
-rw-r--r--src/easy_chat.c30
-rw-r--r--src/egg_hatch.c40
-rw-r--r--src/electric.c4
-rwxr-xr-xsrc/ereader_helpers.c416
-rwxr-xr-xsrc/ereader_screen.c6
-rw-r--r--src/event_obj_lock.c4
-rw-r--r--src/field_specials.c1669
-rw-r--r--src/fight.c4
-rw-r--r--src/fire.c6
-rw-r--r--src/flying.c2
-rw-r--r--src/frontier_util.c8
-rw-r--r--src/ghost.c2
-rw-r--r--src/hall_of_fame.c2
-rw-r--r--src/hof_pc.c2
-rw-r--r--src/ice.c6
-rw-r--r--src/international_string_util.c4
-rwxr-xr-xsrc/item_menu.c24
-rw-r--r--src/libagbsyscall.s (renamed from asm/libagbsyscall.s)0
-rw-r--r--src/libgcnmultiboot.s (renamed from asm/libgcnmultiboot.s)0
-rw-r--r--src/lilycove_lady.c947
-rw-r--r--src/m4a_1.s (renamed from asm/m4a_1.s)0
-rw-r--r--src/match_call.c2
-rw-r--r--src/mauville_old_man.c2
-rw-r--r--src/mon_markings.c8
-rw-r--r--src/mossdeep_gym.c2
-rw-r--r--src/move_relearner.c2
-rw-r--r--src/naming_screen.c8
-rw-r--r--src/new_game.c4
-rw-r--r--src/option_menu.c53
-rw-r--r--src/overworld.c6
-rwxr-xr-xsrc/party_menu.c2
-rw-r--r--src/pokeblock.c2
-rw-r--r--src/pokedex.c54
-rw-r--r--src/pokemon.c68
-rw-r--r--src/pokemon_storage_system.c13
-rw-r--r--src/pokemon_summary_screen.c44
-rw-r--r--src/pokenav_match_call_data.c116
-rwxr-xr-xsrc/pokenav_unk_3.c14
-rw-r--r--src/record_mixing.c4
-rw-r--r--src/recorded_battle.c14
-rw-r--r--src/region_map.c11
-rw-r--r--src/roamer.c2
-rw-r--r--src/rock.c2
-rw-r--r--src/scrcmd.c33
-rw-r--r--src/script_menu.c1284
-rw-r--r--src/script_movement.c174
-rwxr-xr-xsrc/script_pokemon_util_80F87D8.c16
-rw-r--r--src/secret_base.c6
-rw-r--r--src/string_util.c28
-rw-r--r--src/strings.c301
-rw-r--r--src/trade.c14
-rw-r--r--src/trader.c2
-rw-r--r--src/trainer_hill.c96
-rw-r--r--src/tv.c56
-rw-r--r--src/wild_encounter.c60
-rw-r--r--sym_bss.txt2
-rw-r--r--tools/gbafix/gbafix.c2
-rw-r--r--tools/gbagfx/Makefile9
-rw-r--r--tools/gbagfx/huff.c398
-rw-r--r--tools/gbagfx/huff.h38
-rw-r--r--tools/gbagfx/lz.c4
-rw-r--r--tools/gbagfx/lz.h2
-rw-r--r--tools/gbagfx/main.c74
-rwxr-xr-xtools/jsonproc/jsonproc.cpp34
-rw-r--r--tools/preproc/asm_file.cpp6
-rw-r--r--tools/ramscrgen/elf.cpp101
-rw-r--r--tools/ramscrgen/elf.h2
-rw-r--r--tools/ramscrgen/main.cpp24
-rw-r--r--tools/scaninc/scaninc.cpp19
-rw-r--r--tools/scaninc/source_file.cpp5
-rw-r--r--tools/scaninc/source_file.h1
370 files changed, 29846 insertions, 17963 deletions
diff --git a/Makefile b/Makefile
index 5a8af32a9..85d3f6a51 100644
--- a/Makefile
+++ b/Makefile
@@ -1,4 +1,5 @@
TOOLCHAIN := $(DEVKITARM)
+COMPARE ?= 0
ifeq ($(CC),)
HOSTCC := gcc
@@ -108,7 +109,7 @@ MAKEFLAGS += --no-print-directory
# Secondary expansion is required for dependency variables in object rules.
.SECONDEXPANSION:
-.PHONY: all rom clean compare tidy tools mostlyclean clean-tools $(TOOLDIRS)
+.PHONY: all rom clean compare tidy tools mostlyclean clean-tools $(TOOLDIRS) berry_fix
infoshell = $(foreach line, $(shell $1 | sed "s/ /__SPACE__/g"), $(info $(subst __SPACE__, ,$(line))))
@@ -120,9 +121,13 @@ else
NODEP := 1
endif
-C_SRCS := $(wildcard $(C_SUBDIR)/*.c $(C_SUBDIR)/*/*.c $(C_SUBDIR)/*/*/*.c)
+C_SRCS_IN := $(wildcard $(C_SUBDIR)/*.c $(C_SUBDIR)/*/*.c $(C_SUBDIR)/*/*/*.c)
+C_SRCS := $(foreach src,$(C_SRCS_IN),$(if $(findstring .inc.c,$(src)),,$(src)))
C_OBJS := $(patsubst $(C_SUBDIR)/%.c,$(C_BUILDDIR)/%.o,$(C_SRCS))
+C_ASM_SRCS += $(wildcard $(C_SUBDIR)/*.s $(C_SUBDIR)/*/*.s $(C_SUBDIR)/*/*/*.s)
+C_ASM_OBJS := $(patsubst $(C_SUBDIR)/%.s,$(C_BUILDDIR)/%.o,$(C_ASM_SRCS))
+
ASM_SRCS := $(wildcard $(ASM_SUBDIR)/*.s)
ASM_OBJS := $(patsubst $(ASM_SUBDIR)/%.s,$(ASM_BUILDDIR)/%.o,$(ASM_SRCS))
@@ -135,7 +140,7 @@ SONG_OBJS := $(patsubst $(SONG_SUBDIR)/%.s,$(SONG_BUILDDIR)/%.o,$(SONG_SRCS))
MID_SRCS := $(wildcard $(MID_SUBDIR)/*.mid)
MID_OBJS := $(patsubst $(MID_SUBDIR)/%.mid,$(MID_BUILDDIR)/%.o,$(MID_SRCS))
-OBJS := $(C_OBJS) $(ASM_OBJS) $(DATA_ASM_OBJS) $(SONG_OBJS) $(MID_OBJS)
+OBJS := $(C_OBJS) $(C_ASM_OBJS) $(ASM_OBJS) $(DATA_ASM_OBJS) $(SONG_OBJS) $(MID_OBJS)
OBJS_REL := $(patsubst $(OBJ_DIR)/%,%,$(OBJS))
SUBDIRS := $(sort $(dir $(OBJS)))
@@ -151,11 +156,13 @@ tools: $(TOOLDIRS)
$(TOOLDIRS):
@$(MAKE) -C $@ CC=$(HOSTCC) CXX=$(HOSTCXX)
-rom: $(ROM)
+rom: berry_fix $(ROM)
+ifeq ($(COMPARE),1)
+ @$(SHA1) rom.sha1
+endif
# For contributors to make sure a change didn't affect the contents of the ROM.
-compare: all
- @$(SHA1) rom.sha1
+compare: ; @$(MAKE) COMPARE=1
clean: mostlyclean clean-tools
@@ -170,6 +177,7 @@ mostlyclean: tidy
rm -f $(DATA_ASM_SUBDIR)/maps/connections.inc $(DATA_ASM_SUBDIR)/maps/events.inc $(DATA_ASM_SUBDIR)/maps/groups.inc $(DATA_ASM_SUBDIR)/maps/headers.inc
find $(DATA_ASM_SUBDIR)/maps \( -iname 'connections.inc' -o -iname 'events.inc' -o -iname 'header.inc' \) -exec rm {} +
rm -f $(AUTO_GEN_TARGETS)
+ @$(MAKE) clean -C berry_fix
tidy:
rm -f $(ROM) $(ELF) $(MAP)
@@ -222,7 +230,7 @@ endif
ifeq ($(NODEP),1)
$(C_BUILDDIR)/%.o: c_dep :=
else
-$(C_BUILDDIR)/%.o: c_dep = $(shell $(SCANINC) -I include $(C_SUBDIR)/$*.c)
+$(C_BUILDDIR)/%.o: c_dep = $(shell [[ -f $(C_SUBDIR)/$*.c ]] && $(SCANINC) -I include -I tools/agbcc/include $(C_SUBDIR)/$*.c)
endif
ifeq ($(DINFO),1)
@@ -236,6 +244,15 @@ $(C_BUILDDIR)/%.o : $(C_SUBDIR)/%.c $$(c_dep)
$(AS) $(ASFLAGS) -o $@ $(C_BUILDDIR)/$*.s
ifeq ($(NODEP),1)
+$(C_BUILDDIR)/%.o: c_asm_dep :=
+else
+$(C_BUILDDIR)/%.o: c_asm_dep = $(shell [[ -f $(C_SUBDIR)/$*.s ]] && $(SCANINC) -I "" $(C_SUBDIR)/$*.s)
+endif
+
+$(C_BUILDDIR)/%.o: $(C_SUBDIR)/%.s $$(c_asm_dep)
+ $(AS) $(ASFLAGS) -o $@ $<
+
+ifeq ($(NODEP),1)
$(ASM_BUILDDIR)/%.o: asm_dep :=
else
$(ASM_BUILDDIR)/%.o: asm_dep = $(shell $(SCANINC) -I "" $(ASM_SUBDIR)/$*.s)
@@ -285,3 +302,8 @@ $(ROM): $(ELF)
$(FIX) $@ -p --silent
modern: ; @$(MAKE) MODERN=1
+
+berry_fix/berry_fix.gba: berry_fix
+
+berry_fix:
+ @$(MAKE) -C berry_fix COMPARE=$(COMPARE)
diff --git a/asm/macros/event.inc b/asm/macros/event.inc
index e00bdb600..54078332c 100644
--- a/asm/macros/event.inc
+++ b/asm/macros/event.inc
@@ -765,7 +765,8 @@
.2byte \y
.endm
- .macro moveobjectoffscreen index:req
+ @ Copies a live event object's xy position to its template, so that if the sprite goes off screen, it'll still be there when it comes back on screen.
+ .macro copyobjectxytoperm index:req
.byte 0x64
.2byte \index
.endm
@@ -824,7 +825,7 @@
.byte \y
.endm
- @ Displays a multichoice box from which the user can choose a selection, and blocks script execution until a selection is made. Lists of options are predefined (gMultichoiceLists) and the one to be used is specified with list. If b is set to a non-zero value, then the user will not be allowed to back out of the multichoice with the B button.
+ @ Displays a multichoice box from which the user can choose a selection, and blocks script execution until a selection is made. Lists of options are predefined (sMultichoiceLists) and the one to be used is specified with list. If b is set to a non-zero value, then the user will not be allowed to back out of the multichoice with the B button.
.macro multichoice x:req, y:req, list:req, b:req
.byte 0x6f
.byte \x
@@ -833,7 +834,7 @@
.byte \b
.endm
- @ Displays a multichoice box from which the user can choose a selection, and blocks script execution until a selection is made. Lists of options are predefined (gMultichoiceLists) and the one to be used is specified with list. The default argument determines the initial position of the cursor when the box is first opened; it is zero-indexed, and if it is too large, it is treated as 0x00. If b is set to a non-zero value, then the user will not be allowed to back out of the multichoice with the B button.
+ @ Displays a multichoice box from which the user can choose a selection, and blocks script execution until a selection is made. Lists of options are predefined (sMultichoiceLists) and the one to be used is specified with list. The default argument determines the initial position of the cursor when the box is first opened; it is zero-indexed, and if it is too large, it is treated as 0x00. If b is set to a non-zero value, then the user will not be allowed to back out of the multichoice with the B button.
.macro multichoicedefault x:req, y:req, list:req, default:req, b:req
.byte 0x70
.byte \x
@@ -843,7 +844,7 @@
.byte \b
.endm
- @ Displays a multichoice box from which the user can choose a selection, and blocks script execution until a selection is made. Lists of options are predefined (gMultichoiceLists) and the one to be used is specified with list. The per_row argument determines how many list items will be shown on a single row of the box.
+ @ Displays a multichoice box from which the user can choose a selection, and blocks script execution until a selection is made. Lists of options are predefined (sMultichoiceLists) and the one to be used is specified with list. The per_row argument determines how many list items will be shown on a single row of the box.
.macro multichoicegrid x:req, y:req, list:req, per_row:req, B:req
.byte 0x71
.byte \x
@@ -901,15 +902,15 @@
.4byte \text
.endm
- @ Gives the player one of the specified (species) Pokemon at level level holding item. The unknown arguments should all be zeroes.
- .macro givemon species:req, level:req, item:req, unknown1:req, unknown2:req, unknown3:req
+ @ Gives the player one of the specified (species) Pokemon at level level holding item. The trailing 0s are unused parameters
+ .macro givemon species:req, level:req, item:req
.byte 0x79
.2byte \species
.byte \level
.2byte \item
- .4byte \unknown1
- .4byte \unknown2
- .byte \unknown3
+ .4byte 0x0
+ .4byte 0x0
+ .byte 0
.endm
.macro giveegg species:req
@@ -1089,6 +1090,7 @@
.byte 0x95
.byte \x
.byte \y
+ .byte 0 @ 1 = don't perform this command. Always 0 in vanilla. Why this is a thing is beyond me.
.endm
@ Gets the price reduction for the index given. In FireRed, this command is a nop.
diff --git a/berry_fix/Makefile b/berry_fix/Makefile
new file mode 100644
index 000000000..2bc225eba
--- /dev/null
+++ b/berry_fix/Makefile
@@ -0,0 +1,166 @@
+include $(DEVKITARM)/base_tools
+export CPP := $(PREFIX)cpp
+export LD := $(PREFIX)ld
+COMPARE ?= 0
+
+ifeq ($(OS),Windows_NT)
+EXE := .exe
+else
+EXE :=
+endif
+
+GAME_CODE := AGBJ
+MAKER_CODE := 01
+REVISION := 0
+
+SHELL := /bin/bash -o pipefail
+
+CPPFLAGS := -I ../tools/agbcc/include -I ../tools/agbcc -iquote include -nostdinc -undef
+
+ROM := berry_fix.gba
+OBJ_DIR := build
+CC1 := ../tools/agbcc/bin/agbcc$(EXE)
+override CFLAGS += -mthumb-interwork -Wimplicit -Wparentheses -Werror -O2 -fhex-asm
+
+
+ELF = $(ROM:.gba=.elf)
+MAP = $(ROM:.gba=.map)
+
+C_SUBDIR = src
+ASM_SUBDIR = asm
+DATA_ASM_SUBDIR = data
+
+C_BUILDDIR = $(OBJ_DIR)/$(C_SUBDIR)
+ASM_BUILDDIR = $(OBJ_DIR)/$(ASM_SUBDIR)
+DATA_ASM_BUILDDIR = $(OBJ_DIR)/$(DATA_ASM_SUBDIR)
+
+ASFLAGS := -mcpu=arm7tdmi
+
+LDFLAGS = -Map ../$(MAP)
+
+SHA1 := $(shell { command -v sha1sum || command -v shasum; } 2>/dev/null) -c
+GFX := ../tools/gbagfx/gbagfx$(EXE)
+AIF := ../tools/aif2pcm/aif2pcm$(EXE)
+MID := ../tools/mid2agb/mid2agb$(EXE)
+SCANINC := ../tools/scaninc/scaninc$(EXE)
+PREPROC := ../tools/preproc/preproc$(EXE)
+RAMSCRGEN := ../tools/ramscrgen/ramscrgen$(EXE)
+FIX := ../tools/gbafix/gbafix$(EXE)
+
+# Clear the default suffixes
+.SUFFIXES:
+# Don't delete intermediate files
+.SECONDARY:
+# Delete files that weren't built properly
+.DELETE_ON_ERROR:
+
+# Secondary expansion is required for dependency variables in object rules.
+.SECONDEXPANSION:
+
+.PHONY: all rom clean compare tidy payload
+
+C_SRCS := $(wildcard $(C_SUBDIR)/*.c $(C_SUBDIR)/*/*.c $(C_SUBDIR)/*/*/*.c)
+C_OBJS := $(patsubst $(C_SUBDIR)/%.c,$(C_BUILDDIR)/%.o,$(C_SRCS))
+
+ASM_SRCS := $(wildcard $(ASM_SUBDIR)/*.s)
+ASM_OBJS := $(patsubst $(ASM_SUBDIR)/%.s,$(ASM_BUILDDIR)/%.o,$(ASM_SRCS))
+
+DATA_ASM_SRCS := $(wildcard $(DATA_ASM_SUBDIR)/*.s)
+DATA_ASM_OBJS := $(patsubst $(DATA_ASM_SUBDIR)/%.s,$(DATA_ASM_BUILDDIR)/%.o,$(DATA_ASM_SRCS))
+
+SONG_SRCS := $(wildcard $(SONG_SUBDIR)/*.s)
+SONG_OBJS := $(patsubst $(SONG_SUBDIR)/%.s,$(SONG_BUILDDIR)/%.o,$(SONG_SRCS))
+
+MID_SRCS := $(wildcard $(MID_SUBDIR)/*.mid)
+MID_OBJS := $(patsubst $(MID_SUBDIR)/%.mid,$(MID_BUILDDIR)/%.o,$(MID_SRCS))
+
+OBJS := $(C_OBJS) $(ASM_OBJS) $(DATA_ASM_OBJS) $(SONG_OBJS) $(MID_OBJS)
+# OBJS_REL := $(patsubst $(OBJ_DIR)/%,%,$(OBJS))
+
+SUBDIRS := $(sort $(dir $(OBJS)))
+
+$(shell mkdir -p $(SUBDIRS))
+
+all: payload rom
+ @:
+
+rom: $(ROM)
+ifeq ($(COMPARE),1)
+ @$(SHA1) rom.sha1
+endif
+
+# For contributors to make sure a change didn't affect the contents of the ROM.
+compare: ; @$(MAKE) COMPARE=1
+
+clean: tidy
+ rm -f sound/direct_sound_samples/*.bin
+ rm -f $(SONG_OBJS) $(MID_OBJS) $(MID_SUBDIR)/*.s
+ find . \( -iname '*.1bpp' -o -iname '*.4bpp' -o -iname '*.8bpp' -o -iname '*.gbapal' -o -iname '*.lz' -o -iname '*.latfont' -o -iname '*.hwjpnfont' -o -iname '*.fwjpnfont' \) -exec rm {} +
+ make -C payload clean
+
+tidy:
+ rm -f $(ROM) $(ELF) $(MAP)
+ rm -r build/*
+ make -C payload tidy
+
+%.s: ;
+%.png: ;
+%.pal: ;
+%.aif: ;
+
+%.1bpp: %.png ; $(GFX) $< $@
+%.4bpp: %.png ; $(GFX) $< $@
+%.8bpp: %.png ; $(GFX) $< $@
+%.gbapal: %.pal ; $(GFX) $< $@
+%.gbapal: %.png ; $(GFX) $< $@
+%.lz: % ; $(GFX) $< $@
+%.rl: % ; $(GFX) $< $@
+
+
+ifeq ($(NODEP),1)
+$(C_BUILDDIR)/%.o: c_dep :=
+else
+$(C_BUILDDIR)/%.o: c_dep = $(shell $(SCANINC) -I include $(C_SUBDIR)/$*.c)
+endif
+
+$(C_BUILDDIR)/%.o : $(C_SUBDIR)/%.c $$(c_dep)
+ @$(CPP) $(CPPFLAGS) $< -o $(C_BUILDDIR)/$*.i
+ @$(PREPROC) $(C_BUILDDIR)/$*.i charmap.txt | $(CC1) $(CFLAGS) -o $(C_BUILDDIR)/$*.s
+ $(AS) $(ASFLAGS) -o $@ $(C_BUILDDIR)/$*.s
+
+ifeq ($(NODEP),1)
+$(ASM_BUILDDIR)/%.o: asm_dep :=
+else
+$(ASM_BUILDDIR)/%.o: asm_dep = $(shell $(SCANINC) $(ASM_SUBDIR)/$*.s)
+endif
+
+$(ASM_BUILDDIR)/%.o: $(ASM_SUBDIR)/%.s $$(asm_dep)
+ $(AS) $(ASFLAGS) -o $@ $<
+
+ifeq ($(NODEP),1)
+$(DATA_ASM_BUILDDIR)/%.o: data_dep :=
+else
+$(DATA_ASM_BUILDDIR)/%.o: data_dep = $(shell $(SCANINC) $(DATA_ASM_SUBDIR)/$*.s)
+endif
+
+payload:
+ @$(MAKE) -C payload COMPARE=$(COMPARE)
+
+payload/payload.gba: payload
+
+data/payload.gba.lz: payload/payload.gba
+ $(GFX) $< $@ -search 1
+
+$(DATA_ASM_BUILDDIR)/%.o: $(DATA_ASM_SUBDIR)/%.s $$(data_dep)
+ $(PREPROC) $< charmap.txt | $(CPP) -I include - | $(AS) $(ASFLAGS) -o $@
+
+$(SONG_BUILDDIR)/%.o: $(SONG_SUBDIR)/%.s
+ $(AS) $(ASFLAGS) -I sound -o $@ $<
+
+$(ELF): ld_script.txt $(OBJS)
+ cd $(OBJ_DIR) && $(LD) $(LDFLAGS) -T ../ld_script.txt -o ../$@
+
+$(ROM): $(ELF)
+ $(OBJCOPY) -O binary $< $@
+ $(FIX) $@ -c$(GAME_CODE) -m$(MAKER_CODE) -r$(REVISION) --silent
+
diff --git a/berry_fix/asm/berry_fix_header.inc b/berry_fix/asm/berry_fix_header.inc
new file mode 100644
index 000000000..5167d2ff0
--- /dev/null
+++ b/berry_fix/asm/berry_fix_header.inc
@@ -0,0 +1,35 @@
+ .global BerryFixMBHeaderNintendoLogo
+BerryFixMBHeaderNintendoLogo:
+ .space 156
+
+BerryFixMBHeaderGameTitle:
+ .space 12
+
+ .global BerryFixMBHeaderGameCode
+BerryFixMBHeaderGameCode:
+ .space 4
+
+BerryFixMBHeaderMakerCode:
+ .space 2
+
+BerryFixMBHeaderMagic:
+ .byte 0
+
+BerryFixMBHeaderMainUnitCode:
+ .byte 0
+
+BerryFixMBHeaderDeviceType:
+ .byte 0
+
+BerryFixMBHeaderReserved1:
+ .space 7
+
+ .global BerryFixMBHeaderSoftwareVersion
+BerryFixMBHeaderSoftwareVersion:
+ .byte 0
+
+BerryFixMBHeaderChecksum:
+ .byte 0
+
+BerryFixMBHeaderReserved2:
+ .space 2
diff --git a/berry_fix/asm/loader.s b/berry_fix/asm/loader.s
new file mode 100644
index 000000000..39e0b768a
--- /dev/null
+++ b/berry_fix/asm/loader.s
@@ -0,0 +1,119 @@
+ .include "../asm/macros/asm.inc"
+ .include "../asm/macros/function.inc"
+ .include "../constants/gba_constants.inc"
+
+ .set SIO_ERROR, 0x0040
+ .set SIO_MULTI_BUSY, 0x0080
+
+ .set EWRAM_ORIG, 0x02000000
+ .set gCode, 0x02010000
+ .set PROG_ORIG, 0x00008000
+
+ .syntax unified
+
+ .text
+
+ arm_func_start _start
+_start: @ 0
+ b _entry
+ arm_func_end _start
+
+ .include "asm/berry_fix_header.inc"
+
+@ C0
+ .word 0
+
+ .global _GPIOPortData
+_GPIOPortData: @ C4
+ .2byte 0
+
+ .global _GPIOPortDirection
+_GPIOPortDirection: @ C6
+ .2byte 0
+
+ .global _GPIOPortReadEnable
+_GPIOPortReadEnable: @ C8
+ .2byte 0
+
+@ CA
+ .2byte 0
+
+@ CC
+ .space 0x34
+
+ arm_func_start _entry
+_entry: @ 100
+ b _send
+ arm_func_end _entry
+
+ .space 0x1C
+
+ arm_func_start _recv
+_recv:
+ @ Waits until link cable is no longer busy.
+ @ Returns nz if an error has occurred
+ @ Otherwise, returns the received short in r1.
+ @ Preserves r0
+_120:
+ ldrh r1, [r0, 0x8] @ SIOCNT
+ tst r1, SIO_MULTI_BUSY
+ beq _120
+_12c:
+ ldrh r1, [r0, 0x8] @ SIOCNT
+ tst r1, SIO_MULTI_BUSY
+ bne _12c
+ ldrh r1, [r0, 0x8] @ SIOCNT
+ tst r1, SIO_ERROR
+ bxne lr
+ ldrh r1, [r0] @ SIOMULTI0
+ bx lr
+ arm_func_end _recv
+
+ arm_func_start _send
+_send: @ 14c
+ ldr r0, =REG_SIOMULTI0
+_150:
+ bl _recv
+ bne _150
+ mov r2, 0
+ strh r2, [r0, 0xa] @ SIOMLT_SEND
+ cmp r1, 0
+ bne _150
+ mov r2, 0x8000
+_16c:
+ mov r1, 0
+_170:
+ strh r1, [r0, 0xa] @ SIOMLT_SEND
+ bl _recv
+ bne _150
+ cmp r1, r2
+ bne _16c
+ lsr r2, 5
+ cmp r1, 0
+ bne _170
+ ldr r3, =BerryFixMBHeaderGameCode
+ ldrh r2, [r3]
+ strh r2, [r0, 0xa] @ SIOMLT_SEND
+ bl _recv
+_1a0:
+ bne _1a0
+ cmp r1, r2
+ bne _1a0
+ ldrh r2, [r3, 0x2]
+ strh r2, [r0, 0xa] @ SIOMLT_SEND
+ bl _recv
+ bne _1a0
+ cmp r1, r2
+ bne _1a0
+ mov r1, 0
+ strh r1, [r0, 0xa] @ SIOMLT_SEND
+ ldr r0, =_data_2f0
+ ldr r1, =gCode
+ swi 0x11 << 16
+ ldr lr, =gCode
+ bx lr
+ .pool
+ arm_func_end _send
+ @ 1f0
+
+ .align 2, 0 @ don't pad with nop
diff --git a/berry_fix/charmap.txt b/berry_fix/charmap.txt
new file mode 100644
index 000000000..a736b40f2
--- /dev/null
+++ b/berry_fix/charmap.txt
@@ -0,0 +1,1067 @@
+' ' = 00
+'À' = 01
+'Á' = 02
+'Â' = 03
+'Ç' = 04
+'È' = 05
+'É' = 06
+'Ê' = 07
+'Ë' = 08
+'Ì' = 09
+'Î' = 0B
+'Ï' = 0C
+'Ò' = 0D
+'Ó' = 0E
+'Ô' = 0F
+'Œ' = 10
+'Ù' = 11
+'Ú' = 12
+'Û' = 13
+'Ñ' = 14
+'ß' = 15
+'à' = 16
+'á' = 17
+'ç' = 19
+'è' = 1A
+'é' = 1B
+'ê' = 1C
+'ë' = 1D
+'ì' = 1E
+'î' = 20
+'ï' = 21
+'ò' = 22
+'ó' = 23
+'ô' = 24
+'œ' = 25
+'ù' = 26
+'ú' = 27
+'û' = 28
+'ñ' = 29
+'º' = 2A
+'ª' = 2B
+SUPER_ER = 2C
+'&' = 2D
+'+' = 2E
+LV = 34
+'=' = 35
+';' = 36
+'¿' = 51
+'¡' = 52
+PK = 53
+PKMN = 53 54
+POKEBLOCK = 55 56 57 58 59
+'Í' = 5A
+'%' = 5B
+'(' = 5C
+')' = 5D
+'â' = 68
+'í' = 6F
+UNK_SPACER = 77
+UP_ARROW = 79
+DOWN_ARROW = 7A
+LEFT_ARROW = 7B
+RIGHT_ARROW = 7C
+'0' = A1
+'1' = A2
+'2' = A3
+'3' = A4
+'4' = A5
+'5' = A6
+'6' = A7
+'7' = A8
+'8' = A9
+'9' = AA
+'!' = AB
+'?' = AC
+'.' = AD
+'-' = AE
+'·' = AF
+'…' = B0
+'“' = B1
+'”' = B2
+'‘' = B3
+'’' = B4
+'♂' = B5
+'♀' = B6
+'¥' = B7
+',' = B8
+'×' = B9
+'/' = BA
+'A' = BB
+'B' = BC
+'C' = BD
+'D' = BE
+'E' = BF
+'F' = C0
+'G' = C1
+'H' = C2
+'I' = C3
+'J' = C4
+'K' = C5
+'L' = C6
+'M' = C7
+'N' = C8
+'O' = C9
+'P' = CA
+'Q' = CB
+'R' = CC
+'S' = CD
+'T' = CE
+'U' = CF
+'V' = D0
+'W' = D1
+'X' = D2
+'Y' = D3
+'Z' = D4
+'a' = D5
+'b' = D6
+'c' = D7
+'d' = D8
+'e' = D9
+'f' = DA
+'g' = DB
+'h' = DC
+'i' = DD
+'j' = DE
+'k' = DF
+'l' = E0
+'m' = E1
+'n' = E2
+'o' = E3
+'p' = E4
+'q' = E5
+'r' = E6
+'s' = E7
+'t' = E8
+'u' = E9
+'v' = EA
+'w' = EB
+'x' = EC
+'y' = ED
+'z' = EE
+'▶' = EF
+':' = F0
+'Ä' = F1
+'Ö' = F2
+'Ü' = F3
+'ä' = F4
+'ö' = F5
+'ü' = F6
+TALL_PLUS = FC 0C FB
+'$' = FF
+
+@ Hiragana
+'あ' = 01
+'い' = 02
+'う' = 03
+'え' = 04
+'お' = 05
+'か' = 06
+'き' = 07
+'く' = 08
+'け' = 09
+'こ' = 0A
+'さ' = 0B
+'し' = 0C
+'す' = 0D
+'せ' = 0E
+'そ' = 0F
+'た' = 10
+'ち' = 11
+'つ' = 12
+'て' = 13
+'と' = 14
+'な' = 15
+'に' = 16
+'ぬ' = 17
+'ね' = 18
+'の' = 19
+'は' = 1A
+'ひ' = 1B
+'ふ' = 1C
+'へ' = 1D
+'ほ' = 1E
+'ま' = 1F
+'み' = 20
+'む' = 21
+'め' = 22
+'も' = 23
+'や' = 24
+'ゆ' = 25
+'よ' = 26
+'ら' = 27
+'り' = 28
+'る' = 29
+'れ' = 2A
+'ろ' = 2B
+'わ' = 2C
+'を' = 2D
+'ん' = 2E
+'ぁ' = 2F
+'ぃ' = 30
+'ぅ' = 31
+'ぇ' = 32
+'ぉ' = 33
+'ゃ' = 34
+'ゅ' = 35
+'ょ' = 36
+'が' = 37
+'ぎ' = 38
+'ぐ' = 39
+'げ' = 3A
+'ご' = 3B
+'ざ' = 3C
+'じ' = 3D
+'ず' = 3E
+'ぜ' = 3F
+'ぞ' = 40
+'だ' = 41
+'ぢ' = 42
+'づ' = 43
+'で' = 44
+'ど' = 45
+'ば' = 46
+'び' = 47
+'ぶ' = 48
+'べ' = 49
+'ぼ' = 4A
+'ぱ' = 4B
+'ぴ' = 4C
+'ぷ' = 4D
+'ぺ' = 4E
+'ぽ' = 4F
+'っ' = 50
+
+@ Katakana
+'ア' = 51
+'イ' = 52
+'ウ' = 53
+'エ' = 54
+'オ' = 55
+'カ' = 56
+'キ' = 57
+'ク' = 58
+'ケ' = 59
+'コ' = 5A
+'サ' = 5B
+'シ' = 5C
+'ス' = 5D
+'セ' = 5E
+'ソ' = 5F
+'タ' = 60
+'チ' = 61
+'ツ' = 62
+'テ' = 63
+'ト' = 64
+'ナ' = 65
+'ニ' = 66
+'ヌ' = 67
+'ネ' = 68
+'ノ' = 69
+'ハ' = 6A
+'ヒ' = 6B
+'フ' = 6C
+'ヘ' = 6D
+'ホ' = 6E
+'マ' = 6F
+'ミ' = 70
+'ム' = 71
+'メ' = 72
+'モ' = 73
+'ヤ' = 74
+'ユ' = 75
+'ヨ' = 76
+'ラ' = 77
+'リ' = 78
+'ル' = 79
+'レ' = 7A
+'ロ' = 7B
+'ワ' = 7C
+'ヲ' = 7D
+'ン' = 7E
+'ァ' = 7F
+'ィ' = 80
+'ゥ' = 81
+'ェ' = 82
+'ォ' = 83
+'ャ' = 84
+'ュ' = 85
+'ョ' = 86
+'ガ' = 87
+'ギ' = 88
+'グ' = 89
+'ゲ' = 8A
+'ゴ' = 8B
+'ザ' = 8C
+'ジ' = 8D
+'ズ' = 8E
+'ゼ' = 8F
+'ゾ' = 90
+'ダ' = 91
+'ヂ' = 92
+'ヅ' = 93
+'デ' = 94
+'ド' = 95
+'バ' = 96
+'ビ' = 97
+'ブ' = 98
+'ベ' = 99
+'ボ' = 9A
+'パ' = 9B
+'ピ' = 9C
+'プ' = 9D
+'ペ' = 9E
+'ポ' = 9F
+'ッ' = A0
+
+@ Japanese punctuation
+' ' = 00
+'!' = AB
+'?' = AC
+'。' = AD
+'ー' = AE
+'⋯' = B0
+
+STRING = FD
+
+@ string placeholders
+PLAYER = FD 01
+STR_VAR_1 = FD 02
+STR_VAR_2 = FD 03
+STR_VAR_3 = FD 04
+KUN = FD 05
+RIVAL = FD 06
+@ version-dependent strings (originally made for Ruby/Sapphire differences)
+@ Emerald uses the Sapphire strings (except for VERSION).
+VERSION = FD 07 @ "EMERALD"
+AQUA = FD 08
+MAGMA = FD 09
+ARCHIE = FD 0A
+MAXIE = FD 0B
+KYOGRE = FD 0C
+GROUDON = FD 0D
+
+@ battle string placeholders
+
+B_BUFF1 = FD 00
+B_BUFF2 = FD 01
+B_COPY_VAR_1 = FD 02
+B_COPY_VAR_2 = FD 03
+B_COPY_VAR_3 = FD 04
+B_PLAYER_MON1_NAME = FD 05
+B_OPPONENT_MON1_NAME = FD 06
+B_PLAYER_MON2_NAME = FD 07
+B_OPPONENT_MON2_NAME = FD 08
+B_LINK_PLAYER_MON1_NAME = FD 09
+B_LINK_OPPONENT_MON1_NAME = FD 0A
+B_LINK_PLAYER_MON2_NAME = FD 0B
+B_LINK_OPPONENT_MON2_NAME = FD 0C
+B_ATK_NAME_WITH_PREFIX_MON1 = FD 0D
+B_ATK_PARTNER_NAME = FD 0E
+B_ATK_NAME_WITH_PREFIX = FD 0F
+B_DEF_NAME_WITH_PREFIX = FD 10
+B_EFF_NAME_WITH_PREFIX = FD 11 @ EFF = short for gEffectBattler
+B_ACTIVE_NAME_WITH_PREFIX = FD 12
+B_SCR_ACTIVE_NAME_WITH_PREFIX = FD 13
+B_CURRENT_MOVE = FD 14
+B_LAST_MOVE = FD 15
+B_LAST_ITEM = FD 16
+B_LAST_ABILITY = FD 17
+B_ATK_ABILITY = FD 18
+B_DEF_ABILITY = FD 19
+B_SCR_ACTIVE_ABILITY = FD 1A
+B_EFF_ABILITY = FD 1B
+B_TRAINER1_CLASS = FD 1C
+B_TRAINER1_NAME = FD 1D
+B_LINK_PLAYER_NAME = FD 1E
+B_LINK_PARTNER_NAME = FD 1F
+B_LINK_OPPONENT1_NAME = FD 20
+B_LINK_OPPONENT2_NAME = FD 21
+B_LINK_SCR_TRAINER_NAME = FD 22
+B_PLAYER_NAME = FD 23
+B_TRAINER1_LOSE_TEXT = FD 24
+B_TRAINER1_WIN_TEXT = FD 25
+B_26 = FD 26
+B_PC_CREATOR_NAME = FD 27
+B_ATK_PREFIX1 = FD 28
+B_DEF_PREFIX1 = FD 29
+B_ATK_PREFIX2 = FD 2A
+B_DEF_PREFIX2 = FD 2B
+B_ATK_PREFIX3 = FD 2C
+B_DEF_PREFIX3 = FD 2D
+B_TRAINER2_CLASS = FD 2E
+B_TRAINER2_NAME = FD 2F
+B_TRAINER2_LOSE_TEXT = FD 30
+B_TRAINER2_WIN_TEXT = FD 31
+B_PARTNER_CLASS = FD 32
+B_PARTNER_NAME = FD 33
+B_BUFF3 = FD 34
+
+@ indicates the end of a town/city name (before " TOWN" or " CITY")
+NAME_END = FC 00
+
+@ special 0xF7 character
+SPECIAL_F7 = F7
+
+@ more text functions
+
+COLOR = FC 01 @ use a color listed below right after
+HIGHLIGHT = FC 02 @ same as fc 01
+SHADOW = FC 03 @ same as fc 01
+COLOR_HIGHLIGHT_SHADOW = FC 04 @ takes 3 bytes
+PALETTE = FC 05 @ used in credits
+SIZE = FC 06 @ note that anything other than "SMALL" is invalid
+UNKNOWN_7 = FC 07
+PAUSE = FC 08 @ manually print the wait byte after this, havent mapped them
+PAUSE_UNTIL_PRESS = FC 09
+UNKNOWN_A = FC 0A
+PLAY_BGM = FC 0B
+ESCAPE = FC 0C
+SHIFT_TEXT = FC 0D
+UNKNOWN_E = FC 0E
+UNKNOWN_F = FC 0F
+PLAY_SE = FC 10
+CLEAR = FC 11
+SKIP = FC 12
+CLEAR_TO = FC 13
+UNKNOWN_14 = FC 14
+JPN = FC 15
+ENG = FC 16
+PAUSE_MUSIC = FC 17
+RESUME_MUSIC = FC 18
+
+@ colors
+
+TRANSPARENT = 00
+WHITE = 01
+DARK_GREY = 02
+LIGHT_GREY = 03
+RED = 04
+LIGHT_RED = 05
+GREEN = 06
+LIGHT_GREEN = 07
+BLUE = 08
+LIGHT_BLUE = 09
+@ these next colors can be set to anything arbitrary at runtime
+@ usually though they'll have the textbox border colors as described below
+DYNAMIC_COLOR1 = 0A @ white
+DYNAMIC_COLOR2 = 0B @ white with a tinge of green
+DYNAMIC_COLOR3 = 0C @ white 2
+DYNAMIC_COLOR4 = 0D @ aquamarine
+DYNAMIC_COLOR5 = 0E @ blue-green
+DYNAMIC_COLOR6 = 0F @ cerulean
+
+@ sound and music
+
+MUS_DUMMY = 00 00
+SE_KAIFUKU = 01 00
+SE_PC_LOGIN = 02 00
+SE_PC_OFF = 03 00
+SE_PC_ON = 04 00
+SE_SELECT = 05 00
+SE_WIN_OPEN = 06 00
+SE_WALL_HIT = 07 00
+SE_DOOR = 08 00
+SE_KAIDAN = 09 00
+SE_DANSA = 0A 00
+SE_JITENSYA = 0B 00
+SE_KOUKA_L = 0C 00
+SE_KOUKA_M = 0D 00
+SE_KOUKA_H = 0E 00
+SE_BOWA2 = 0F 00
+SE_POKE_DEAD = 10 00
+SE_NIGERU = 11 00
+SE_JIDO_DOA = 12 00
+SE_NAMINORI = 13 00
+SE_BAN = 14 00
+SE_PIN = 15 00
+SE_BOO = 16 00
+SE_BOWA = 17 00
+SE_JYUNI = 18 00
+SE_A = 19 00
+SE_I = 1A 00
+SE_U = 1B 00
+SE_E = 1C 00
+SE_O = 1D 00
+SE_N = 1E 00
+SE_SEIKAI = 1F 00
+SE_HAZURE = 20 00
+SE_EXP = 21 00
+SE_JITE_PYOKO = 22 00
+SE_MU_PACHI = 23 00
+SE_TK_KASYA = 24 00
+SE_FU_ZAKU = 25 00
+SE_FU_ZAKU2 = 26 00
+SE_FU_ZUZUZU = 27 00
+SE_RU_GASHIN = 28 00
+SE_RU_GASYAN = 29 00
+SE_RU_BARI = 2A 00
+SE_RU_HYUU = 2B 00
+SE_KI_GASYAN = 2C 00
+SE_TK_WARPIN = 2D 00
+SE_TK_WARPOUT = 2E 00
+SE_TU_SAA = 2F 00
+SE_HI_TURUN = 30 00
+SE_TRACK_MOVE = 31 00
+SE_TRACK_STOP = 32 00
+SE_TRACK_HAIKI = 33 00
+SE_TRACK_DOOR = 34 00
+SE_MOTER = 35 00
+SE_CARD = 36 00
+SE_SAVE = 37 00
+SE_KON = 38 00
+SE_KON2 = 39 00
+SE_KON3 = 3A 00
+SE_KON4 = 3B 00
+SE_SUIKOMU = 3C 00
+SE_NAGERU = 3D 00
+SE_TOY_C = 3E 00
+SE_TOY_D = 3F 00
+SE_TOY_E = 40 00
+SE_TOY_F = 41 00
+SE_TOY_G = 42 00
+SE_TOY_A = 43 00
+SE_TOY_B = 44 00
+SE_TOY_C1 = 45 00
+SE_MIZU = 46 00
+SE_HASHI = 47 00
+SE_DAUGI = 48 00
+SE_PINPON = 49 00
+SE_FUUSEN1 = 4A 00
+SE_FUUSEN2 = 4B 00
+SE_FUUSEN3 = 4C 00
+SE_TOY_KABE = 4D 00
+SE_TOY_DANGO = 4E 00
+SE_DOKU = 4F 00
+SE_ESUKA = 50 00
+SE_T_AME = 51 00
+SE_T_AME_E = 52 00
+SE_T_OOAME = 53 00
+SE_T_OOAME_E = 54 00
+SE_T_KOAME = 55 00
+SE_T_KOAME_E = 56 00
+SE_T_KAMI = 57 00
+SE_T_KAMI2 = 58 00
+SE_ELEBETA = 59 00
+SE_HINSI = 5A 00
+SE_EXPMAX = 5B 00
+SE_TAMAKORO = 5C 00
+SE_TAMAKORO_E = 5D 00
+SE_BASABASA = 5E 00
+SE_REGI = 5F 00
+SE_C_GAJI = 60 00
+SE_C_MAKU_U = 61 00
+SE_C_MAKU_D = 62 00
+SE_C_PASI = 63 00
+SE_C_SYU = 64 00
+SE_C_PIKON = 65 00
+SE_REAPOKE = 66 00
+SE_OP_BASYU = 67 00
+SE_BT_START = 68 00
+SE_DENDOU = 69 00
+SE_JIHANKI = 6A 00
+SE_TAMA = 6B 00
+SE_Z_SCROLL = 6C 00
+SE_Z_PAGE = 6D 00
+SE_PN_ON = 6E 00
+SE_PN_OFF = 6F 00
+SE_Z_SEARCH = 70 00
+SE_TAMAGO = 71 00
+SE_TB_START = 72 00
+SE_TB_KON = 73 00
+SE_TB_KARA = 74 00
+SE_BIDORO = 75 00
+SE_W085 = 76 00
+SE_W085B = 77 00
+SE_W231 = 78 00
+SE_W171 = 79 00
+SE_W233 = 7A 00
+SE_W233B = 7B 00
+SE_W145 = 7C 00
+SE_W145B = 7D 00
+SE_W145C = 7E 00
+SE_W240 = 7F 00
+SE_W015 = 80 00
+SE_W081 = 81 00
+SE_W081B = 82 00
+SE_W088 = 83 00
+SE_W016 = 84 00
+SE_W016B = 85 00
+SE_W003 = 86 00
+SE_W104 = 87 00
+SE_W013 = 88 00
+SE_W196 = 89 00
+SE_W086 = 8A 00
+SE_W004 = 8B 00
+SE_W025 = 8C 00
+SE_W025B = 8D 00
+SE_W152 = 8E 00
+SE_W026 = 8F 00
+SE_W172 = 90 00
+SE_W172B = 91 00
+SE_W053 = 92 00
+SE_W007 = 93 00
+SE_W092 = 94 00
+SE_W221 = 95 00
+SE_W221B = 96 00
+SE_W052 = 97 00
+SE_W036 = 98 00
+SE_W059 = 99 00
+SE_W059B = 9A 00
+SE_W010 = 9B 00
+SE_W011 = 9C 00
+SE_W017 = 9D 00
+SE_W019 = 9E 00
+SE_W028 = 9F 00
+SE_W013B = A0 00
+SE_W044 = A1 00
+SE_W029 = A2 00
+SE_W057 = A3 00
+SE_W056 = A4 00
+SE_W250 = A5 00
+SE_W030 = A6 00
+SE_W039 = A7 00
+SE_W054 = A8 00
+SE_W077 = A9 00
+SE_W020 = AA 00
+SE_W082 = AB 00
+SE_W047 = AC 00
+SE_W195 = AD 00
+SE_W006 = AE 00
+SE_W091 = AF 00
+SE_W146 = B0 00
+SE_W120 = B1 00
+SE_W153 = B2 00
+SE_W071B = B3 00
+SE_W071 = B4 00
+SE_W103 = B5 00
+SE_W062 = B6 00
+SE_W062B = B7 00
+SE_W048 = B8 00
+SE_W187 = B9 00
+SE_W118 = BA 00
+SE_W155 = BB 00
+SE_W122 = BC 00
+SE_W060 = BD 00
+SE_W185 = BE 00
+SE_W014 = BF 00
+SE_W043 = C0 00
+SE_W207 = C1 00
+SE_W207B = C2 00
+SE_W215 = C3 00
+SE_W109 = C4 00
+SE_W173 = C5 00
+SE_W280 = C6 00
+SE_W202 = C7 00
+SE_W060B = C8 00
+SE_W076 = C9 00
+SE_W080 = CA 00
+SE_W100 = CB 00
+SE_W107 = CC 00
+SE_W166 = CD 00
+SE_W129 = CE 00
+SE_W115 = CF 00
+SE_W112 = D0 00
+SE_W197 = D1 00
+SE_W199 = D2 00
+SE_W236 = D3 00
+SE_W204 = D4 00
+SE_W268 = D5 00
+SE_W070 = D6 00
+SE_W063 = D7 00
+SE_W127 = D8 00
+SE_W179 = D9 00
+SE_W151 = DA 00
+SE_W201 = DB 00
+SE_W161 = DC 00
+SE_W161B = DD 00
+SE_W227 = DE 00
+SE_W227B = DF 00
+SE_W226 = E0 00
+SE_W208 = E1 00
+SE_W213 = E2 00
+SE_W213B = E3 00
+SE_W234 = E4 00
+SE_W260 = E5 00
+SE_W328 = E6 00
+SE_W320 = E7 00
+SE_W255 = E8 00
+SE_W291 = E9 00
+SE_W089 = EA 00
+SE_W239 = EB 00
+SE_W230 = EC 00
+SE_W281 = ED 00
+SE_W327 = EE 00
+SE_W287 = EF 00
+SE_W257 = F0 00
+SE_W253 = F1 00
+SE_W258 = F2 00
+SE_W322 = F3 00
+SE_W298 = F4 00
+SE_W287B = F5 00
+SE_W114 = F6 00
+SE_W063B = F7 00
+SE_RG_W_DOOR = F8 00
+SE_RG_CARD1 = F9 00
+SE_RG_CARD2 = FA 00
+SE_RG_CARD3 = FB 00
+SE_RG_BAG1 = FC 00
+SE_RG_BAG2 = FD 00
+SE_RG_GETTING = FE 00
+SE_RG_SHOP = FF 00
+SE_RG_KITEKI = 00 01
+SE_RG_HELP_OP = 01 01
+SE_RG_HELP_CL = 02 01
+SE_RG_HELP_NG = 03 01
+SE_RG_DEOMOV = 04 01
+SE_RG_EXCELLENT = 05 01
+SE_RG_NAWAMISS = 06 01
+SE_TOREEYE = 07 01
+SE_TOREOFF = 08 01
+SE_HANTEI1 = 09 01
+SE_HANTEI2 = 0A 01
+SE_CURTAIN = 0B 01
+SE_CURTAIN1 = 0C 01
+SE_USSOKI = 0D 01
+MUS_TETSUJI = 5E 01
+MUS_FIELD13 = 5F 01
+MUS_KACHI22 = 60 01
+MUS_KACHI2 = 61 01
+MUS_KACHI3 = 62 01
+MUS_KACHI5 = 63 01
+MUS_PCC = 64 01
+MUS_NIBI = 65 01
+MUS_SUIKUN = 66 01
+MUS_DOORO1 = 67 01
+MUS_DOORO_X1 = 68 01
+MUS_DOORO_X3 = 69 01
+MUS_MACHI_S2 = 6A 01
+MUS_MACHI_S4 = 6B 01
+MUS_GIM = 6C 01
+MUS_NAMINORI = 6D 01
+MUS_DAN01 = 6E 01
+MUS_FANFA1 = 6F 01
+MUS_ME_ASA = 70 01
+MUS_ME_BACHI = 71 01
+MUS_FANFA4 = 72 01
+MUS_FANFA5 = 73 01
+MUS_ME_WAZA = 74 01
+MUS_BIJYUTU = 75 01
+MUS_DOORO_X4 = 76 01
+MUS_FUNE_KAN = 77 01
+MUS_ME_SHINKA = 78 01
+MUS_SHINKA = 79 01
+MUS_ME_WASURE = 7A 01
+MUS_SYOUJOEYE = 7B 01
+MUS_BOYEYE = 7C 01
+MUS_DAN02 = 7D 01
+MUS_MACHI_S3 = 7E 01
+MUS_ODAMAKI = 7F 01
+MUS_B_TOWER = 80 01
+MUS_SWIMEYE = 81 01
+MUS_DAN03 = 82 01
+MUS_ME_KINOMI = 83 01
+MUS_ME_TAMA = 84 01
+MUS_ME_B_BIG = 85 01
+MUS_ME_B_SMALL = 86 01
+MUS_ME_ZANNEN = 87 01
+MUS_BD_TIME = 88 01
+MUS_TEST1 = 89 01
+MUS_TEST2 = 8A 01
+MUS_TEST3 = 8B 01
+MUS_TEST4 = 8C 01
+MUS_TEST = 8D 01
+MUS_GOMACHI0 = 8E 01
+MUS_GOTOWN = 8F 01
+MUS_POKECEN = 90 01
+MUS_NEXTROAD = 91 01
+MUS_GRANROAD = 92 01
+MUS_CYCLING = 93 01
+MUS_FRIENDLY = 94 01
+MUS_MISHIRO = 95 01
+MUS_TOZAN = 96 01
+MUS_GIRLEYE = 97 01
+MUS_MINAMO = 98 01
+MUS_ASHROAD = 99 01
+MUS_EVENT0 = 9A 01
+MUS_DEEPDEEP = 9B 01
+MUS_KACHI1 = 9C 01
+MUS_TITLE3 = 9D 01
+MUS_DEMO1 = 9E 01
+MUS_GIRL_SUP = 9F 01
+MUS_HAGESHII = A0 01
+MUS_KAKKOII = A1 01
+MUS_KAZANBAI = A2 01
+MUS_AQA_0 = A3 01
+MUS_TSURETEK = A4 01
+MUS_BOY_SUP = A5 01
+MUS_RAINBOW = A6 01
+MUS_AYASII = A7 01
+MUS_KACHI4 = A8 01
+MUS_ROPEWAY = A9 01
+MUS_CASINO = AA 01
+MUS_HIGHTOWN = AB 01
+MUS_SAFARI = AC 01
+MUS_C_ROAD = AD 01
+MUS_AJITO = AE 01
+MUS_M_BOAT = AF 01
+MUS_M_DUNGON = B0 01
+MUS_FINECITY = B1 01
+MUS_MACHUPI = B2 01
+MUS_P_SCHOOL = B3 01
+MUS_DENDOU = B4 01
+MUS_TONEKUSA = B5 01
+MUS_MABOROSI = B6 01
+MUS_CON_FAN = B7 01
+MUS_CONTEST0 = B8 01
+MUS_MGM0 = B9 01
+MUS_T_BATTLE = BA 01
+MUS_OOAME = BB 01
+MUS_HIDERI = BC 01
+MUS_RUNECITY = BD 01
+MUS_CON_K = BE 01
+MUS_EIKOU_R = BF 01
+MUS_KARAKURI = C0 01
+MUS_HUTAGO = C1 01
+MUS_SITENNOU = C2 01
+MUS_YAMA_EYE = C3 01
+MUS_CONLOBBY = C4 01
+MUS_INTER_V = C5 01
+MUS_DAIGO = C6 01
+MUS_THANKFOR = C7 01
+MUS_END = C8 01
+MUS_B_FRONTIER = C9 01
+MUS_B_ARENA = CA 01
+MUS_ME_POINTGET = CB 01
+MUS_ME_TORE_EYE = CC 01
+MUS_PYRAMID = CD 01
+MUS_PYRAMID_TOP = CE 01
+MUS_B_PALACE = CF 01
+MUS_REKKUU_KOURIN = D0 01
+MUS_SATTOWER = D1 01
+MUS_ME_SYMBOLGET = D2 01
+MUS_B_DOME = D3 01
+MUS_B_TUBE = D4 01
+MUS_B_FACTORY = D5 01
+MUS_VS_REKKU = D6 01
+MUS_VS_FRONT = D7 01
+MUS_VS_MEW = D8 01
+MUS_B_DOME1 = D9 01
+MUS_BATTLE27 = DA 01
+MUS_BATTLE31 = DB 01
+MUS_BATTLE20 = DC 01
+MUS_BATTLE32 = DD 01
+MUS_BATTLE33 = DE 01
+MUS_BATTLE36 = DF 01
+MUS_BATTLE34 = E0 01
+MUS_BATTLE35 = E1 01
+MUS_BATTLE38 = E2 01
+MUS_BATTLE30 = E3 01
+MUS_RG_ANNAI = E4 01
+MUS_RG_SLOT = E5 01
+MUS_RG_AJITO = E6 01
+MUS_RG_GYM = E7 01
+MUS_RG_PURIN = E8 01
+MUS_RG_DEMO = E9 01
+MUS_RG_TITLE = EA 01
+MUS_RG_GUREN = EB 01
+MUS_RG_SHION = EC 01
+MUS_RG_KAIHUKU = ED 01
+MUS_RG_CYCLING = EE 01
+MUS_RG_ROCKET = EF 01
+MUS_RG_SHOUJO = F0 01
+MUS_RG_SHOUNEN = F1 01
+MUS_RG_DENDOU = F2 01
+MUS_RG_T_MORI = F3 01
+MUS_RG_OTSUKIMI = F4 01
+MUS_RG_POKEYASHI = F5 01
+MUS_RG_ENDING = F6 01
+MUS_RG_LOAD01 = F7 01
+MUS_RG_OPENING = F8 01
+MUS_RG_LOAD02 = F9 01
+MUS_RG_LOAD03 = FA 01
+MUS_RG_CHAMP_R = FB 01
+MUS_RG_VS_GYM = FC 01
+MUS_RG_VS_TORE = FD 01
+MUS_RG_VS_YASEI = FE 01
+MUS_RG_VS_LAST = FF 01
+MUS_RG_MASARA = 00 02
+MUS_RG_KENKYU = 01 02
+MUS_RG_OHKIDO = 02 02
+MUS_RG_POKECEN = 03 02
+MUS_RG_SANTOAN = 04 02
+MUS_RG_NAMINORI = 05 02
+MUS_RG_P_TOWER = 06 02
+MUS_RG_SHIRUHU = 07 02
+MUS_RG_HANADA = 08 02
+MUS_RG_TAMAMUSI = 09 02
+MUS_RG_WIN_TRE = 0A 02
+MUS_RG_WIN_YASEI = 0B 02
+MUS_RG_WIN_GYM = 0C 02
+MUS_RG_KUCHIBA = 0D 02
+MUS_RG_NIBI = 0E 02
+MUS_RG_RIVAL1 = 0F 02
+MUS_RG_RIVAL2 = 10 02
+MUS_RG_FAN2 = 11 02
+MUS_RG_FAN5 = 12 02
+MUS_RG_FAN6 = 13 02
+MUS_ME_RG_PHOTO = 14 02
+MUS_RG_TITLEROG = 15 02
+MUS_RG_GET_YASEI = 16 02
+MUS_RG_SOUSA = 17 02
+MUS_RG_SEKAIKAN = 18 02
+MUS_RG_SEIBETU = 19 02
+MUS_RG_JUMP = 1A 02
+MUS_RG_UNION = 1B 02
+MUS_RG_NETWORK = 1C 02
+MUS_RG_OKURIMONO = 1D 02
+MUS_RG_KINOMIKUI = 1E 02
+MUS_RG_NANADUNGEON = 1F 02
+MUS_RG_OSHIE_TV = 20 02
+MUS_RG_NANASHIMA = 21 02
+MUS_RG_NANAISEKI = 22 02
+MUS_RG_NANA123 = 23 02
+MUS_RG_NANA45 = 24 02
+MUS_RG_NANA67 = 25 02
+MUS_RG_POKEFUE = 26 02
+MUS_RG_VS_DEO = 27 02
+MUS_RG_VS_MYU2 = 28 02
+MUS_RG_VS_DEN = 29 02
+MUS_RG_EXEYE = 2A 02
+MUS_RG_DEOEYE = 2B 02
+MUS_RG_T_TOWER = 2C 02
+MUS_RG_SLOWMASARA = 2D 02
+MUS_RG_TVNOIZE = 2E 02
+PH_TRAP_BLEND = 2F 02
+PH_TRAP_HELD = 30 02
+PH_TRAP_SOLO = 31 02
+PH_FACE_BLEND = 32 02
+PH_FACE_HELD = 33 02
+PH_FACE_SOLO = 34 02
+PH_CLOTH_BLEND = 35 02
+PH_CLOTH_HELD = 36 02
+PH_CLOTH_SOLO = 37 02
+PH_DRESS_BLEND = 38 02
+PH_DRESS_HELD = 39 02
+PH_DRESS_SOLO = 3A 02
+PH_FLEECE_BLEND = 3B 02
+PH_FLEECE_HELD = 3C 02
+PH_FLEECE_SOLO = 3D 02
+PH_KIT_BLEND = 3E 02
+PH_KIT_HELD = 3F 02
+PH_KIT_SOLO = 40 02
+PH_PRICE_BLEND = 41 02
+PH_PRICE_HELD = 42 02
+PH_PRICE_SOLO = 43 02
+PH_LOT_BLEND = 44 02
+PH_LOT_HELD = 45 02
+PH_LOT_SOLO = 46 02
+PH_GOAT_BLEND = 47 02
+PH_GOAT_HELD = 48 02
+PH_GOAT_SOLO = 49 02
+PH_THOUGHT_BLEND = 4A 02
+PH_THOUGHT_HELD = 4B 02
+PH_THOUGHT_SOLO = 4C 02
+PH_CHOICE_BLEND = 4D 02
+PH_CHOICE_HELD = 4E 02
+PH_CHOICE_SOLO = 4F 02
+PH_MOUTH_BLEND = 50 02
+PH_MOUTH_HELD = 51 02
+PH_MOUTH_SOLO = 52 02
+PH_FOOT_BLEND = 53 02
+PH_FOOT_HELD = 54 02
+PH_FOOT_SOLO = 55 02
+PH_GOOSE_BLEND = 56 02
+PH_GOOSE_HELD = 57 02
+PH_GOOSE_SOLO = 58 02
+PH_STRUT_BLEND = 59 02
+PH_STRUT_HELD = 5A 02
+PH_STRUT_SOLO = 5B 02
+PH_CURE_BLEND = 5C 02
+PH_CURE_HELD = 5D 02
+PH_CURE_SOLO = 5E 02
+PH_NURSE_BLEND = 5F 02
+PH_NURSE_HELD = 60 02
+PH_NURSE_SOLO = 61 02
+
+A_BUTTON = F8 00
+B_BUTTON = F8 01
+DPAD_UPDOWN = F8 0A
+DPAD_NONE = F8 0C
+
+UP_ARROW_2 = F9 00
+DOWN_ARROW_2 = F9 01
+LEFT_ARROW_2 = F9 02
+RIGHT_ARROW_2 = F9 03
+PLUS = F9 04
+LV_2 = F9 05
+PP = F9 06
+ID = F9 07
+NO = F9 08
+UNDERSCORE = F9 09
+CIRCLE_1 = F9 0A
+CIRCLE_2 = F9 0B
+CIRCLE_3 = F9 0C
+CIRCLE_4 = F9 0D
+CIRCLE_5 = F9 0E
+CIRCLE_6 = F9 0F
+CIRCLE_7 = F9 10
+CIRCLE_8 = F9 11
+CIRCLE_9 = F9 12
+ROUND_LEFT_PAREN = F9 13
+ROUND_RIGHT_PAREN = F9 14
+CIRCLE_DOT = F9 15
+TRIANGLE = F9 16
+BIG_MULT_X = F9 17
+
+EMOJI_UNDERSCORE = F9 D0
+EMOJI_PIPE = F9 D1
+EMOJI_HIGHBAR = F9 D2
+EMOJI_TILDE = F9 D3
+EMOJI_LEFT_PAREN = F9 D4
+EMOJI_RIGHT_PAREN = F9 D5
+EMOJI_UNION = F9 D6 @ ⊂
+EMOJI_GREATER_THAN = F9 D7
+EMOJI_LEFT_EYE = F9 D8
+EMOJI_RIGHT_EYE = F9 D9
+EMOJI_AT = F9 DA
+EMOJI_SEMICOLON = F9 DB
+EMOJI_PLUS = F9 DC
+EMOJI_MINUS = F9 DD
+EMOJI_EQUALS = F9 DE
+EMOJI_SPIRAL = F9 DF
+EMOJI_TONGUE = F9 E0
+EMOJI_TRIANGLE_OUTLINE = F9 E1
+EMOJI_ACUTE = F9 E2
+EMOJI_GRAVE = F9 E3
+EMOJI_CIRCLE = F9 E4
+EMOJI_TRIANGLE = F9 E5
+EMOJI_SQUARE = F9 E6
+EMOJI_HEART = F9 E7
+EMOJI_MOON = F9 E8
+EMOJI_NOTE = F9 E9
+EMOJI_BALL = F9 EA
+EMOJI_BOLT = F9 EB
+EMOJI_LEAF = F9 EC
+EMOJI_FIRE = F9 ED
+EMOJI_WATER = F9 EE
+EMOJI_LEFT_FIST = F9 EF
+EMOJI_RIGHT_FIST = F9 F0
+EMOJI_BIGWHEEL = F9 F1
+EMOJI_SMALLWHEEL = F9 F2
+EMOJI_SPHERE = F9 F3
+EMOJI_IRRITATED = F9 F4
+EMOJI_MISCHIEVOUS = F9 F5
+EMOJI_HAPPY = F9 F6
+EMOJI_ANGRY = F9 F7
+EMOJI_SURPRISED = F9 F8
+EMOJI_BIGSMILE = F9 F9
+EMOJI_EVIL = F9 FA
+EMOJI_TIRED = F9 FB
+EMOJI_NEUTRAL = F9 FC
+EMOJI_SHOCKED = F9 FD
+EMOJI_BIGANGER = F9 FE
+
+'\l' = FA @ scroll up window text
+'\p' = FB @ new paragraph
+'\n' = FE @ new line
diff --git a/berry_fix/data/data.s b/berry_fix/data/data.s
new file mode 100644
index 000000000..dbb86b13b
--- /dev/null
+++ b/berry_fix/data/data.s
@@ -0,0 +1,4 @@
+ .section .rodata
+
+_data_2f0::
+ .incbin "data/payload.gba.lz"
diff --git a/berry_fix/ld_script.sed b/berry_fix/ld_script.sed
new file mode 100644
index 000000000..b91542b6f
--- /dev/null
+++ b/berry_fix/ld_script.sed
@@ -0,0 +1,14 @@
+/<EWRAM>/ {
+ r sym_ewram.ld
+ d
+}
+
+/<BSS>/ {
+ r sym_bss.ld
+ d
+}
+
+/<COMMON>/ {
+ r sym_common.ld
+ d
+}
diff --git a/berry_fix/ld_script.txt b/berry_fix/ld_script.txt
new file mode 100644
index 000000000..2edeaef7c
--- /dev/null
+++ b/berry_fix/ld_script.txt
@@ -0,0 +1,31 @@
+ENTRY(_start)
+
+SECTIONS {
+ . = 0x2000000;
+
+ .text :
+ ALIGN(4)
+ {
+ asm/loader.o(.text);
+ } =0
+
+ . += 0x100;
+ .rodata :
+ ALIGN(4)
+ {
+ data/data.o(.rodata);
+ } =0
+
+ . = 0x2010000;
+
+ ewram (NOLOAD) :
+ ALIGN(4)
+ {
+ gCode = .;
+ }
+
+ /DISCARD/ :
+ {
+ *(*);
+ }
+}
diff --git a/berry_fix/payload/Makefile b/berry_fix/payload/Makefile
new file mode 100644
index 000000000..63e326724
--- /dev/null
+++ b/berry_fix/payload/Makefile
@@ -0,0 +1,172 @@
+include $(DEVKITARM)/base_tools
+export CPP := $(PREFIX)cpp
+export LD := $(PREFIX)ld
+COMPARE ?= 0
+
+ifeq ($(OS),Windows_NT)
+EXE := .exe
+else
+EXE :=
+endif
+
+SHELL := /bin/bash -o pipefail
+
+CPPFLAGS := -I ../../tools/agbcc/include -I ../../tools/agbcc -iquote include -nostdinc -undef
+
+ROM := payload.gba
+OBJ_DIR := build
+CC1 := ../../tools/agbcc/bin/agbcc$(EXE)
+override CC1FLAGS += -mthumb-interwork -Wimplicit -Wparentheses -Werror -O2 -fhex-asm
+
+
+ELF = $(ROM:.gba=.elf)
+MAP = $(ROM:.gba=.map)
+
+C_SUBDIR = src
+ASM_SUBDIR = asm
+DATA_ASM_SUBDIR = data
+
+C_BUILDDIR = $(OBJ_DIR)/$(C_SUBDIR)
+ASM_BUILDDIR = $(OBJ_DIR)/$(ASM_SUBDIR)
+DATA_ASM_BUILDDIR = $(OBJ_DIR)/$(DATA_ASM_SUBDIR)
+
+ASFLAGS := -mcpu=arm7tdmi
+
+LDFLAGS = -Map ../$(MAP)
+
+LIB := -L ../../../tools/agbcc/lib -lgcc
+
+SHA1 := $(shell { command -v sha1sum || command -v shasum; } 2>/dev/null) -c
+GFX := ../../tools/gbagfx/gbagfx$(EXE)
+AIF := ../../tools/aif2pcm/aif2pcm$(EXE)
+MID := ../../tools/mid2agb/mid2agb$(EXE)
+SCANINC := ../../tools/scaninc/scaninc$(EXE)
+PREPROC := ../../tools/preproc/preproc$(EXE)
+RAMSCRGEN := ../../tools/ramscrgen/ramscrgen$(EXE)
+FIX := ../../tools/gbafix/gbafix$(EXE)
+
+# Clear the default suffixes
+.SUFFIXES:
+# Don't delete intermediate files
+.SECONDARY:
+# Delete files that weren't built properly
+.DELETE_ON_ERROR:
+
+# Secondary expansion is required for dependency variables in object rules.
+.SECONDEXPANSION:
+
+.PHONY: all rom clean compare tidy
+
+C_SRCS := $(wildcard $(C_SUBDIR)/*.c $(C_SUBDIR)/*/*.c $(C_SUBDIR)/*/*/*.c)
+C_OBJS := $(patsubst $(C_SUBDIR)/%.c,$(C_BUILDDIR)/%.o,$(C_SRCS))
+
+ASM_SRCS := $(wildcard $(ASM_SUBDIR)/*.s)
+ASM_OBJS := $(patsubst $(ASM_SUBDIR)/%.s,$(ASM_BUILDDIR)/%.o,$(ASM_SRCS))
+
+DATA_ASM_SRCS := $(wildcard $(DATA_ASM_SUBDIR)/*.s)
+DATA_ASM_OBJS := $(patsubst $(DATA_ASM_SUBDIR)/%.s,$(DATA_ASM_BUILDDIR)/%.o,$(DATA_ASM_SRCS))
+
+SONG_SRCS := $(wildcard $(SONG_SUBDIR)/*.s)
+SONG_OBJS := $(patsubst $(SONG_SUBDIR)/%.s,$(SONG_BUILDDIR)/%.o,$(SONG_SRCS))
+
+MID_SRCS := $(wildcard $(MID_SUBDIR)/*.mid)
+MID_OBJS := $(patsubst $(MID_SUBDIR)/%.mid,$(MID_BUILDDIR)/%.o,$(MID_SRCS))
+
+OBJS := $(C_OBJS) $(ASM_OBJS) $(DATA_ASM_OBJS) $(SONG_OBJS) $(MID_OBJS)
+# OBJS_REL := $(patsubst $(OBJ_DIR)/%,%,$(OBJS))
+
+SUBDIRS := $(sort $(dir $(OBJS)))
+
+$(shell mkdir -p $(SUBDIRS))
+
+$(C_BUILDDIR)/siirtc.o: CC1FLAGS := -mthumb-interwork
+$(C_BUILDDIR)/agb_flash.o: CC1FLAGS := -O1 -mthumb-interwork
+$(C_BUILDDIR)/agb_flash_1m.o: CC1FLAGS := -O1 -mthumb-interwork
+$(C_BUILDDIR)/agb_flash_mx.o: CC1FLAGS := -O1 -mthumb-interwork
+$(C_BUILDDIR)/agb_flash_le.o: CC1FLAGS := -O1 -mthumb-interwork
+
+all: rom
+ @:
+
+rom: $(ROM)
+ifeq ($(COMPARE),1)
+ @$(SHA1) rom.sha1
+endif
+
+# For contributors to make sure a change didn't affect the contents of the ROM.
+compare: ; @$(MAKE) COMPARE=1
+
+clean: tidy
+ rm -f sound/direct_sound_samples/*.bin
+ rm -f $(SONG_OBJS) $(MID_OBJS) $(MID_SUBDIR)/*.s
+ find . \( -iname '*.1bpp' -o -iname '*.4bpp' -o -iname '*.8bpp' -o -iname '*.gbapal' -o -iname '*.lz' -o -iname '*.latfont' -o -iname '*.hwjpnfont' -o -iname '*.fwjpnfont' \) -exec rm {} +
+
+tidy:
+ rm -f $(ROM) $(ELF) $(MAP)
+ rm -r build/*
+
+%.s: ;
+%.png: ;
+%.pal: ;
+%.aif: ;
+
+%.1bpp: %.png ; $(GFX) $< $@
+%.4bpp: %.png ; $(GFX) $< $@
+%.8bpp: %.png ; $(GFX) $< $@
+%.gbapal: %.pal ; $(GFX) $< $@
+%.gbapal: %.png ; $(GFX) $< $@
+%.lz: % ; $(GFX) $< $@
+%.rl: % ; $(GFX) $< $@
+
+
+ifeq ($(NODEP),1)
+$(C_BUILDDIR)/%.o: c_dep :=
+else
+$(C_BUILDDIR)/%.o: c_dep = $(shell $(SCANINC) -I include $(C_SUBDIR)/$*.c)
+endif
+
+$(C_BUILDDIR)/%.o : $(C_SUBDIR)/%.c $$(c_dep)
+ @$(CPP) $(CPPFLAGS) $< -o $(C_BUILDDIR)/$*.i
+ @$(PREPROC) $(C_BUILDDIR)/$*.i charmap.txt | $(CC1) $(CC1FLAGS) -o $(C_BUILDDIR)/$*.s
+ @echo -e ".text\n\t.align\t2, 0\n" >> $(C_BUILDDIR)/$*.s
+ $(AS) $(ASFLAGS) -o $@ $(C_BUILDDIR)/$*.s
+
+ifeq ($(NODEP),1)
+$(ASM_BUILDDIR)/%.o: asm_dep :=
+else
+$(ASM_BUILDDIR)/%.o: asm_dep = $(shell $(SCANINC) $(ASM_SUBDIR)/$*.s)
+endif
+
+$(ASM_BUILDDIR)/%.o: $(ASM_SUBDIR)/%.s $$(asm_dep)
+ $(AS) $(ASFLAGS) -o $@ $<
+
+ifeq ($(NODEP),1)
+$(DATA_ASM_BUILDDIR)/%.o: data_dep :=
+else
+$(DATA_ASM_BUILDDIR)/%.o: data_dep = $(shell $(SCANINC) $(DATA_ASM_SUBDIR)/$*.s)
+endif
+
+$(DATA_ASM_BUILDDIR)/%.o: $(DATA_ASM_SUBDIR)/%.s $$(data_dep)
+ $(PREPROC) $< charmap.txt | $(CPP) -I include | $(AS) $(ASFLAGS) -o $@
+
+$(SONG_BUILDDIR)/%.o: $(SONG_SUBDIR)/%.s
+ $(AS) $(ASFLAGS) -I sound -o $@ $<
+
+$(OBJ_DIR)/sym_bss.ld: sym_bss.txt
+ $(RAMSCRGEN) .bss $< ENGLISH > $@
+
+$(OBJ_DIR)/sym_common.ld: sym_common.txt $(C_OBJS) $(wildcard common_syms/*.txt)
+ $(RAMSCRGEN) COMMON $< ENGLISH -c $(C_BUILDDIR),common_syms > $@
+
+$(OBJ_DIR)/sym_ewram.ld: sym_ewram.txt
+ $(RAMSCRGEN) ewram_data $< ENGLISH > $@
+
+$(OBJ_DIR)/ld_script.ld: ld_script.txt $(OBJ_DIR)/sym_bss.ld $(OBJ_DIR)/sym_common.ld $(OBJ_DIR)/sym_ewram.ld
+ cd $(OBJ_DIR) && sed -f ../../ld_script.sed ../$< | sed "s#tools/#../tools/#g" > ld_script.ld
+
+$(ELF): $(OBJ_DIR)/ld_script.ld $(OBJS)
+ cd $(OBJ_DIR) && $(LD) $(LDFLAGS) -T ld_script.ld -o ../$@ $(LIB)
+
+$(ROM): $(ELF)
+ $(OBJCOPY) -O binary $< $@
+
diff --git a/berry_fix/payload/asm/crt0.s b/berry_fix/payload/asm/crt0.s
new file mode 100644
index 000000000..872a63018
--- /dev/null
+++ b/berry_fix/payload/asm/crt0.s
@@ -0,0 +1,82 @@
+ .include "asm/macros/function.inc"
+ .include "constants/gba_constants.inc"
+
+ .syntax unified
+
+ .text
+
+ .arm
+ .align 2, 0
+ .global Init
+Init:
+ mov r0, PSR_IRQ_MODE
+ msr cpsr_cf, r0
+ ldr sp, sp_irq
+ mov r0, PSR_SYS_MODE
+ msr cpsr_cf, r0
+ ldr sp, sp_sys
+ ldr r1, =INTR_VECTOR
+ ldr r0, =IntrMain
+ str r0, [r1]
+ ldr r1, =AgbMain + 1
+ mov lr, pc
+ bx r1
+ b Init
+
+ .align 2, 0
+sp_sys: .word IWRAM_END - 0x100
+sp_irq: .word IWRAM_END - 0x60
+
+ .pool
+ .size Init, .-Init
+
+ .arm
+ .align 2, 0
+ .global IntrMain
+IntrMain: @ 0x2010048
+ mov ip, REG_BASE
+ add r3, ip, OFFSET_REG_IE
+ ldr r2, [r3]
+ and r1, r2, r2, lsr #16
+ mov r2, #0
+ ands r0, r1, #0x2000
+ strbne r0, [r3, #-0x17c]
+_02010064:
+ bne _02010064
+ ands r0, r1, #0xc0
+ bne _020100DC
+ add r2, r2, #4
+ ands r0, r1, #1
+ strhne r0, [ip, #-8]
+ bne _020100DC
+ add r2, r2, #4
+ ands r0, r1, #2
+ bne _020100DC
+ add r2, r2, #4
+ ands r0, r1, #4
+ bne _020100DC
+ add r2, r2, #4
+ ands r0, r1, #0x100
+ bne _020100DC
+ add r2, r2, #4
+ ands r0, r1, #0x200
+ bne _020100DC
+ add r2, r2, #4
+ ands r0, r1, #0x400
+ bne _020100DC
+ add r2, r2, #4
+ ands r0, r1, #0x800
+ bne _020100DC
+ add r2, r2, #4
+ ands r0, r1, #0x1000
+ bne _020100DC
+ add r2, r2, #4
+ ands r0, r1, #8
+_020100DC:
+ strh r0, [r3, #2]
+ ldr r1, =gIntrTable
+ add r1, r1, r2
+ ldr r0, [r1]
+ bx r0
+ .pool
+ .size IntrMain, .-IntrMain
diff --git a/berry_fix/payload/asm/libagbsyscall.s b/berry_fix/payload/asm/libagbsyscall.s
new file mode 100644
index 000000000..ea8ef3e89
--- /dev/null
+++ b/berry_fix/payload/asm/libagbsyscall.s
@@ -0,0 +1,46 @@
+ .include "asm/macros/function.inc"
+ .include "constants/gba_constants.inc"
+
+ .syntax unified
+
+ .text
+
+ thumb_func_start CpuSet
+CpuSet: @ 81E3B64
+ swi 0xB
+ bx lr
+ thumb_func_end CpuSet
+
+ thumb_func_start Div
+Div: @ 81E3B68
+ swi 0x6
+ bx lr
+ thumb_func_end Div
+
+ thumb_func_start Mod
+Mod:
+ swi 0x6
+ adds r0, r1, 0
+ bx lr
+ thumb_func_end Mod
+
+ thumb_func_start LZ77UnCompVram
+LZ77UnCompVram: @ 81E3B6C
+ swi 0x12
+ bx lr
+ thumb_func_end LZ77UnCompVram
+
+ thumb_func_start RegisterRamReset
+RegisterRamReset: @ 81E3B80
+ swi 0x1
+ bx lr
+ thumb_func_end RegisterRamReset
+
+ thumb_func_start VBlankIntrWait
+VBlankIntrWait: @ 81E3BA0
+ movs r2, 0
+ swi 0x5
+ bx lr
+ thumb_func_end VBlankIntrWait
+
+ .align 2, 0 @ Don't pad with nop.
diff --git a/berry_fix/payload/asm/macros/function.inc b/berry_fix/payload/asm/macros/function.inc
new file mode 100644
index 000000000..67fb373a8
--- /dev/null
+++ b/berry_fix/payload/asm/macros/function.inc
@@ -0,0 +1,29 @@
+ .macro arm_func_start name
+ .align 2, 0
+ .global \name
+ .arm
+ .type \name, function
+ .endm
+
+ .macro arm_func_end name
+ .size \name, .-\name
+ .endm
+
+ .macro thumb_func_start name
+ .align 2, 0
+ .global \name
+ .thumb
+ .thumb_func
+ .type \name, function
+ .endm
+
+ .macro non_word_aligned_thumb_func_start name
+ .global \name
+ .thumb
+ .thumb_func
+ .type \name, function
+ .endm
+
+ .macro thumb_func_end name
+ .size \name, .-\name
+ .endm
diff --git a/berry_fix/payload/charmap.txt b/berry_fix/payload/charmap.txt
new file mode 100644
index 000000000..a736b40f2
--- /dev/null
+++ b/berry_fix/payload/charmap.txt
@@ -0,0 +1,1067 @@
+' ' = 00
+'À' = 01
+'Á' = 02
+'Â' = 03
+'Ç' = 04
+'È' = 05
+'É' = 06
+'Ê' = 07
+'Ë' = 08
+'Ì' = 09
+'Î' = 0B
+'Ï' = 0C
+'Ò' = 0D
+'Ó' = 0E
+'Ô' = 0F
+'Œ' = 10
+'Ù' = 11
+'Ú' = 12
+'Û' = 13
+'Ñ' = 14
+'ß' = 15
+'à' = 16
+'á' = 17
+'ç' = 19
+'è' = 1A
+'é' = 1B
+'ê' = 1C
+'ë' = 1D
+'ì' = 1E
+'î' = 20
+'ï' = 21
+'ò' = 22
+'ó' = 23
+'ô' = 24
+'œ' = 25
+'ù' = 26
+'ú' = 27
+'û' = 28
+'ñ' = 29
+'º' = 2A
+'ª' = 2B
+SUPER_ER = 2C
+'&' = 2D
+'+' = 2E
+LV = 34
+'=' = 35
+';' = 36
+'¿' = 51
+'¡' = 52
+PK = 53
+PKMN = 53 54
+POKEBLOCK = 55 56 57 58 59
+'Í' = 5A
+'%' = 5B
+'(' = 5C
+')' = 5D
+'â' = 68
+'í' = 6F
+UNK_SPACER = 77
+UP_ARROW = 79
+DOWN_ARROW = 7A
+LEFT_ARROW = 7B
+RIGHT_ARROW = 7C
+'0' = A1
+'1' = A2
+'2' = A3
+'3' = A4
+'4' = A5
+'5' = A6
+'6' = A7
+'7' = A8
+'8' = A9
+'9' = AA
+'!' = AB
+'?' = AC
+'.' = AD
+'-' = AE
+'·' = AF
+'…' = B0
+'“' = B1
+'”' = B2
+'‘' = B3
+'’' = B4
+'♂' = B5
+'♀' = B6
+'¥' = B7
+',' = B8
+'×' = B9
+'/' = BA
+'A' = BB
+'B' = BC
+'C' = BD
+'D' = BE
+'E' = BF
+'F' = C0
+'G' = C1
+'H' = C2
+'I' = C3
+'J' = C4
+'K' = C5
+'L' = C6
+'M' = C7
+'N' = C8
+'O' = C9
+'P' = CA
+'Q' = CB
+'R' = CC
+'S' = CD
+'T' = CE
+'U' = CF
+'V' = D0
+'W' = D1
+'X' = D2
+'Y' = D3
+'Z' = D4
+'a' = D5
+'b' = D6
+'c' = D7
+'d' = D8
+'e' = D9
+'f' = DA
+'g' = DB
+'h' = DC
+'i' = DD
+'j' = DE
+'k' = DF
+'l' = E0
+'m' = E1
+'n' = E2
+'o' = E3
+'p' = E4
+'q' = E5
+'r' = E6
+'s' = E7
+'t' = E8
+'u' = E9
+'v' = EA
+'w' = EB
+'x' = EC
+'y' = ED
+'z' = EE
+'▶' = EF
+':' = F0
+'Ä' = F1
+'Ö' = F2
+'Ü' = F3
+'ä' = F4
+'ö' = F5
+'ü' = F6
+TALL_PLUS = FC 0C FB
+'$' = FF
+
+@ Hiragana
+'あ' = 01
+'い' = 02
+'う' = 03
+'え' = 04
+'お' = 05
+'か' = 06
+'き' = 07
+'く' = 08
+'け' = 09
+'こ' = 0A
+'さ' = 0B
+'し' = 0C
+'す' = 0D
+'せ' = 0E
+'そ' = 0F
+'た' = 10
+'ち' = 11
+'つ' = 12
+'て' = 13
+'と' = 14
+'な' = 15
+'に' = 16
+'ぬ' = 17
+'ね' = 18
+'の' = 19
+'は' = 1A
+'ひ' = 1B
+'ふ' = 1C
+'へ' = 1D
+'ほ' = 1E
+'ま' = 1F
+'み' = 20
+'む' = 21
+'め' = 22
+'も' = 23
+'や' = 24
+'ゆ' = 25
+'よ' = 26
+'ら' = 27
+'り' = 28
+'る' = 29
+'れ' = 2A
+'ろ' = 2B
+'わ' = 2C
+'を' = 2D
+'ん' = 2E
+'ぁ' = 2F
+'ぃ' = 30
+'ぅ' = 31
+'ぇ' = 32
+'ぉ' = 33
+'ゃ' = 34
+'ゅ' = 35
+'ょ' = 36
+'が' = 37
+'ぎ' = 38
+'ぐ' = 39
+'げ' = 3A
+'ご' = 3B
+'ざ' = 3C
+'じ' = 3D
+'ず' = 3E
+'ぜ' = 3F
+'ぞ' = 40
+'だ' = 41
+'ぢ' = 42
+'づ' = 43
+'で' = 44
+'ど' = 45
+'ば' = 46
+'び' = 47
+'ぶ' = 48
+'べ' = 49
+'ぼ' = 4A
+'ぱ' = 4B
+'ぴ' = 4C
+'ぷ' = 4D
+'ぺ' = 4E
+'ぽ' = 4F
+'っ' = 50
+
+@ Katakana
+'ア' = 51
+'イ' = 52
+'ウ' = 53
+'エ' = 54
+'オ' = 55
+'カ' = 56
+'キ' = 57
+'ク' = 58
+'ケ' = 59
+'コ' = 5A
+'サ' = 5B
+'シ' = 5C
+'ス' = 5D
+'セ' = 5E
+'ソ' = 5F
+'タ' = 60
+'チ' = 61
+'ツ' = 62
+'テ' = 63
+'ト' = 64
+'ナ' = 65
+'ニ' = 66
+'ヌ' = 67
+'ネ' = 68
+'ノ' = 69
+'ハ' = 6A
+'ヒ' = 6B
+'フ' = 6C
+'ヘ' = 6D
+'ホ' = 6E
+'マ' = 6F
+'ミ' = 70
+'ム' = 71
+'メ' = 72
+'モ' = 73
+'ヤ' = 74
+'ユ' = 75
+'ヨ' = 76
+'ラ' = 77
+'リ' = 78
+'ル' = 79
+'レ' = 7A
+'ロ' = 7B
+'ワ' = 7C
+'ヲ' = 7D
+'ン' = 7E
+'ァ' = 7F
+'ィ' = 80
+'ゥ' = 81
+'ェ' = 82
+'ォ' = 83
+'ャ' = 84
+'ュ' = 85
+'ョ' = 86
+'ガ' = 87
+'ギ' = 88
+'グ' = 89
+'ゲ' = 8A
+'ゴ' = 8B
+'ザ' = 8C
+'ジ' = 8D
+'ズ' = 8E
+'ゼ' = 8F
+'ゾ' = 90
+'ダ' = 91
+'ヂ' = 92
+'ヅ' = 93
+'デ' = 94
+'ド' = 95
+'バ' = 96
+'ビ' = 97
+'ブ' = 98
+'ベ' = 99
+'ボ' = 9A
+'パ' = 9B
+'ピ' = 9C
+'プ' = 9D
+'ペ' = 9E
+'ポ' = 9F
+'ッ' = A0
+
+@ Japanese punctuation
+' ' = 00
+'!' = AB
+'?' = AC
+'。' = AD
+'ー' = AE
+'⋯' = B0
+
+STRING = FD
+
+@ string placeholders
+PLAYER = FD 01
+STR_VAR_1 = FD 02
+STR_VAR_2 = FD 03
+STR_VAR_3 = FD 04
+KUN = FD 05
+RIVAL = FD 06
+@ version-dependent strings (originally made for Ruby/Sapphire differences)
+@ Emerald uses the Sapphire strings (except for VERSION).
+VERSION = FD 07 @ "EMERALD"
+AQUA = FD 08
+MAGMA = FD 09
+ARCHIE = FD 0A
+MAXIE = FD 0B
+KYOGRE = FD 0C
+GROUDON = FD 0D
+
+@ battle string placeholders
+
+B_BUFF1 = FD 00
+B_BUFF2 = FD 01
+B_COPY_VAR_1 = FD 02
+B_COPY_VAR_2 = FD 03
+B_COPY_VAR_3 = FD 04
+B_PLAYER_MON1_NAME = FD 05
+B_OPPONENT_MON1_NAME = FD 06
+B_PLAYER_MON2_NAME = FD 07
+B_OPPONENT_MON2_NAME = FD 08
+B_LINK_PLAYER_MON1_NAME = FD 09
+B_LINK_OPPONENT_MON1_NAME = FD 0A
+B_LINK_PLAYER_MON2_NAME = FD 0B
+B_LINK_OPPONENT_MON2_NAME = FD 0C
+B_ATK_NAME_WITH_PREFIX_MON1 = FD 0D
+B_ATK_PARTNER_NAME = FD 0E
+B_ATK_NAME_WITH_PREFIX = FD 0F
+B_DEF_NAME_WITH_PREFIX = FD 10
+B_EFF_NAME_WITH_PREFIX = FD 11 @ EFF = short for gEffectBattler
+B_ACTIVE_NAME_WITH_PREFIX = FD 12
+B_SCR_ACTIVE_NAME_WITH_PREFIX = FD 13
+B_CURRENT_MOVE = FD 14
+B_LAST_MOVE = FD 15
+B_LAST_ITEM = FD 16
+B_LAST_ABILITY = FD 17
+B_ATK_ABILITY = FD 18
+B_DEF_ABILITY = FD 19
+B_SCR_ACTIVE_ABILITY = FD 1A
+B_EFF_ABILITY = FD 1B
+B_TRAINER1_CLASS = FD 1C
+B_TRAINER1_NAME = FD 1D
+B_LINK_PLAYER_NAME = FD 1E
+B_LINK_PARTNER_NAME = FD 1F
+B_LINK_OPPONENT1_NAME = FD 20
+B_LINK_OPPONENT2_NAME = FD 21
+B_LINK_SCR_TRAINER_NAME = FD 22
+B_PLAYER_NAME = FD 23
+B_TRAINER1_LOSE_TEXT = FD 24
+B_TRAINER1_WIN_TEXT = FD 25
+B_26 = FD 26
+B_PC_CREATOR_NAME = FD 27
+B_ATK_PREFIX1 = FD 28
+B_DEF_PREFIX1 = FD 29
+B_ATK_PREFIX2 = FD 2A
+B_DEF_PREFIX2 = FD 2B
+B_ATK_PREFIX3 = FD 2C
+B_DEF_PREFIX3 = FD 2D
+B_TRAINER2_CLASS = FD 2E
+B_TRAINER2_NAME = FD 2F
+B_TRAINER2_LOSE_TEXT = FD 30
+B_TRAINER2_WIN_TEXT = FD 31
+B_PARTNER_CLASS = FD 32
+B_PARTNER_NAME = FD 33
+B_BUFF3 = FD 34
+
+@ indicates the end of a town/city name (before " TOWN" or " CITY")
+NAME_END = FC 00
+
+@ special 0xF7 character
+SPECIAL_F7 = F7
+
+@ more text functions
+
+COLOR = FC 01 @ use a color listed below right after
+HIGHLIGHT = FC 02 @ same as fc 01
+SHADOW = FC 03 @ same as fc 01
+COLOR_HIGHLIGHT_SHADOW = FC 04 @ takes 3 bytes
+PALETTE = FC 05 @ used in credits
+SIZE = FC 06 @ note that anything other than "SMALL" is invalid
+UNKNOWN_7 = FC 07
+PAUSE = FC 08 @ manually print the wait byte after this, havent mapped them
+PAUSE_UNTIL_PRESS = FC 09
+UNKNOWN_A = FC 0A
+PLAY_BGM = FC 0B
+ESCAPE = FC 0C
+SHIFT_TEXT = FC 0D
+UNKNOWN_E = FC 0E
+UNKNOWN_F = FC 0F
+PLAY_SE = FC 10
+CLEAR = FC 11
+SKIP = FC 12
+CLEAR_TO = FC 13
+UNKNOWN_14 = FC 14
+JPN = FC 15
+ENG = FC 16
+PAUSE_MUSIC = FC 17
+RESUME_MUSIC = FC 18
+
+@ colors
+
+TRANSPARENT = 00
+WHITE = 01
+DARK_GREY = 02
+LIGHT_GREY = 03
+RED = 04
+LIGHT_RED = 05
+GREEN = 06
+LIGHT_GREEN = 07
+BLUE = 08
+LIGHT_BLUE = 09
+@ these next colors can be set to anything arbitrary at runtime
+@ usually though they'll have the textbox border colors as described below
+DYNAMIC_COLOR1 = 0A @ white
+DYNAMIC_COLOR2 = 0B @ white with a tinge of green
+DYNAMIC_COLOR3 = 0C @ white 2
+DYNAMIC_COLOR4 = 0D @ aquamarine
+DYNAMIC_COLOR5 = 0E @ blue-green
+DYNAMIC_COLOR6 = 0F @ cerulean
+
+@ sound and music
+
+MUS_DUMMY = 00 00
+SE_KAIFUKU = 01 00
+SE_PC_LOGIN = 02 00
+SE_PC_OFF = 03 00
+SE_PC_ON = 04 00
+SE_SELECT = 05 00
+SE_WIN_OPEN = 06 00
+SE_WALL_HIT = 07 00
+SE_DOOR = 08 00
+SE_KAIDAN = 09 00
+SE_DANSA = 0A 00
+SE_JITENSYA = 0B 00
+SE_KOUKA_L = 0C 00
+SE_KOUKA_M = 0D 00
+SE_KOUKA_H = 0E 00
+SE_BOWA2 = 0F 00
+SE_POKE_DEAD = 10 00
+SE_NIGERU = 11 00
+SE_JIDO_DOA = 12 00
+SE_NAMINORI = 13 00
+SE_BAN = 14 00
+SE_PIN = 15 00
+SE_BOO = 16 00
+SE_BOWA = 17 00
+SE_JYUNI = 18 00
+SE_A = 19 00
+SE_I = 1A 00
+SE_U = 1B 00
+SE_E = 1C 00
+SE_O = 1D 00
+SE_N = 1E 00
+SE_SEIKAI = 1F 00
+SE_HAZURE = 20 00
+SE_EXP = 21 00
+SE_JITE_PYOKO = 22 00
+SE_MU_PACHI = 23 00
+SE_TK_KASYA = 24 00
+SE_FU_ZAKU = 25 00
+SE_FU_ZAKU2 = 26 00
+SE_FU_ZUZUZU = 27 00
+SE_RU_GASHIN = 28 00
+SE_RU_GASYAN = 29 00
+SE_RU_BARI = 2A 00
+SE_RU_HYUU = 2B 00
+SE_KI_GASYAN = 2C 00
+SE_TK_WARPIN = 2D 00
+SE_TK_WARPOUT = 2E 00
+SE_TU_SAA = 2F 00
+SE_HI_TURUN = 30 00
+SE_TRACK_MOVE = 31 00
+SE_TRACK_STOP = 32 00
+SE_TRACK_HAIKI = 33 00
+SE_TRACK_DOOR = 34 00
+SE_MOTER = 35 00
+SE_CARD = 36 00
+SE_SAVE = 37 00
+SE_KON = 38 00
+SE_KON2 = 39 00
+SE_KON3 = 3A 00
+SE_KON4 = 3B 00
+SE_SUIKOMU = 3C 00
+SE_NAGERU = 3D 00
+SE_TOY_C = 3E 00
+SE_TOY_D = 3F 00
+SE_TOY_E = 40 00
+SE_TOY_F = 41 00
+SE_TOY_G = 42 00
+SE_TOY_A = 43 00
+SE_TOY_B = 44 00
+SE_TOY_C1 = 45 00
+SE_MIZU = 46 00
+SE_HASHI = 47 00
+SE_DAUGI = 48 00
+SE_PINPON = 49 00
+SE_FUUSEN1 = 4A 00
+SE_FUUSEN2 = 4B 00
+SE_FUUSEN3 = 4C 00
+SE_TOY_KABE = 4D 00
+SE_TOY_DANGO = 4E 00
+SE_DOKU = 4F 00
+SE_ESUKA = 50 00
+SE_T_AME = 51 00
+SE_T_AME_E = 52 00
+SE_T_OOAME = 53 00
+SE_T_OOAME_E = 54 00
+SE_T_KOAME = 55 00
+SE_T_KOAME_E = 56 00
+SE_T_KAMI = 57 00
+SE_T_KAMI2 = 58 00
+SE_ELEBETA = 59 00
+SE_HINSI = 5A 00
+SE_EXPMAX = 5B 00
+SE_TAMAKORO = 5C 00
+SE_TAMAKORO_E = 5D 00
+SE_BASABASA = 5E 00
+SE_REGI = 5F 00
+SE_C_GAJI = 60 00
+SE_C_MAKU_U = 61 00
+SE_C_MAKU_D = 62 00
+SE_C_PASI = 63 00
+SE_C_SYU = 64 00
+SE_C_PIKON = 65 00
+SE_REAPOKE = 66 00
+SE_OP_BASYU = 67 00
+SE_BT_START = 68 00
+SE_DENDOU = 69 00
+SE_JIHANKI = 6A 00
+SE_TAMA = 6B 00
+SE_Z_SCROLL = 6C 00
+SE_Z_PAGE = 6D 00
+SE_PN_ON = 6E 00
+SE_PN_OFF = 6F 00
+SE_Z_SEARCH = 70 00
+SE_TAMAGO = 71 00
+SE_TB_START = 72 00
+SE_TB_KON = 73 00
+SE_TB_KARA = 74 00
+SE_BIDORO = 75 00
+SE_W085 = 76 00
+SE_W085B = 77 00
+SE_W231 = 78 00
+SE_W171 = 79 00
+SE_W233 = 7A 00
+SE_W233B = 7B 00
+SE_W145 = 7C 00
+SE_W145B = 7D 00
+SE_W145C = 7E 00
+SE_W240 = 7F 00
+SE_W015 = 80 00
+SE_W081 = 81 00
+SE_W081B = 82 00
+SE_W088 = 83 00
+SE_W016 = 84 00
+SE_W016B = 85 00
+SE_W003 = 86 00
+SE_W104 = 87 00
+SE_W013 = 88 00
+SE_W196 = 89 00
+SE_W086 = 8A 00
+SE_W004 = 8B 00
+SE_W025 = 8C 00
+SE_W025B = 8D 00
+SE_W152 = 8E 00
+SE_W026 = 8F 00
+SE_W172 = 90 00
+SE_W172B = 91 00
+SE_W053 = 92 00
+SE_W007 = 93 00
+SE_W092 = 94 00
+SE_W221 = 95 00
+SE_W221B = 96 00
+SE_W052 = 97 00
+SE_W036 = 98 00
+SE_W059 = 99 00
+SE_W059B = 9A 00
+SE_W010 = 9B 00
+SE_W011 = 9C 00
+SE_W017 = 9D 00
+SE_W019 = 9E 00
+SE_W028 = 9F 00
+SE_W013B = A0 00
+SE_W044 = A1 00
+SE_W029 = A2 00
+SE_W057 = A3 00
+SE_W056 = A4 00
+SE_W250 = A5 00
+SE_W030 = A6 00
+SE_W039 = A7 00
+SE_W054 = A8 00
+SE_W077 = A9 00
+SE_W020 = AA 00
+SE_W082 = AB 00
+SE_W047 = AC 00
+SE_W195 = AD 00
+SE_W006 = AE 00
+SE_W091 = AF 00
+SE_W146 = B0 00
+SE_W120 = B1 00
+SE_W153 = B2 00
+SE_W071B = B3 00
+SE_W071 = B4 00
+SE_W103 = B5 00
+SE_W062 = B6 00
+SE_W062B = B7 00
+SE_W048 = B8 00
+SE_W187 = B9 00
+SE_W118 = BA 00
+SE_W155 = BB 00
+SE_W122 = BC 00
+SE_W060 = BD 00
+SE_W185 = BE 00
+SE_W014 = BF 00
+SE_W043 = C0 00
+SE_W207 = C1 00
+SE_W207B = C2 00
+SE_W215 = C3 00
+SE_W109 = C4 00
+SE_W173 = C5 00
+SE_W280 = C6 00
+SE_W202 = C7 00
+SE_W060B = C8 00
+SE_W076 = C9 00
+SE_W080 = CA 00
+SE_W100 = CB 00
+SE_W107 = CC 00
+SE_W166 = CD 00
+SE_W129 = CE 00
+SE_W115 = CF 00
+SE_W112 = D0 00
+SE_W197 = D1 00
+SE_W199 = D2 00
+SE_W236 = D3 00
+SE_W204 = D4 00
+SE_W268 = D5 00
+SE_W070 = D6 00
+SE_W063 = D7 00
+SE_W127 = D8 00
+SE_W179 = D9 00
+SE_W151 = DA 00
+SE_W201 = DB 00
+SE_W161 = DC 00
+SE_W161B = DD 00
+SE_W227 = DE 00
+SE_W227B = DF 00
+SE_W226 = E0 00
+SE_W208 = E1 00
+SE_W213 = E2 00
+SE_W213B = E3 00
+SE_W234 = E4 00
+SE_W260 = E5 00
+SE_W328 = E6 00
+SE_W320 = E7 00
+SE_W255 = E8 00
+SE_W291 = E9 00
+SE_W089 = EA 00
+SE_W239 = EB 00
+SE_W230 = EC 00
+SE_W281 = ED 00
+SE_W327 = EE 00
+SE_W287 = EF 00
+SE_W257 = F0 00
+SE_W253 = F1 00
+SE_W258 = F2 00
+SE_W322 = F3 00
+SE_W298 = F4 00
+SE_W287B = F5 00
+SE_W114 = F6 00
+SE_W063B = F7 00
+SE_RG_W_DOOR = F8 00
+SE_RG_CARD1 = F9 00
+SE_RG_CARD2 = FA 00
+SE_RG_CARD3 = FB 00
+SE_RG_BAG1 = FC 00
+SE_RG_BAG2 = FD 00
+SE_RG_GETTING = FE 00
+SE_RG_SHOP = FF 00
+SE_RG_KITEKI = 00 01
+SE_RG_HELP_OP = 01 01
+SE_RG_HELP_CL = 02 01
+SE_RG_HELP_NG = 03 01
+SE_RG_DEOMOV = 04 01
+SE_RG_EXCELLENT = 05 01
+SE_RG_NAWAMISS = 06 01
+SE_TOREEYE = 07 01
+SE_TOREOFF = 08 01
+SE_HANTEI1 = 09 01
+SE_HANTEI2 = 0A 01
+SE_CURTAIN = 0B 01
+SE_CURTAIN1 = 0C 01
+SE_USSOKI = 0D 01
+MUS_TETSUJI = 5E 01
+MUS_FIELD13 = 5F 01
+MUS_KACHI22 = 60 01
+MUS_KACHI2 = 61 01
+MUS_KACHI3 = 62 01
+MUS_KACHI5 = 63 01
+MUS_PCC = 64 01
+MUS_NIBI = 65 01
+MUS_SUIKUN = 66 01
+MUS_DOORO1 = 67 01
+MUS_DOORO_X1 = 68 01
+MUS_DOORO_X3 = 69 01
+MUS_MACHI_S2 = 6A 01
+MUS_MACHI_S4 = 6B 01
+MUS_GIM = 6C 01
+MUS_NAMINORI = 6D 01
+MUS_DAN01 = 6E 01
+MUS_FANFA1 = 6F 01
+MUS_ME_ASA = 70 01
+MUS_ME_BACHI = 71 01
+MUS_FANFA4 = 72 01
+MUS_FANFA5 = 73 01
+MUS_ME_WAZA = 74 01
+MUS_BIJYUTU = 75 01
+MUS_DOORO_X4 = 76 01
+MUS_FUNE_KAN = 77 01
+MUS_ME_SHINKA = 78 01
+MUS_SHINKA = 79 01
+MUS_ME_WASURE = 7A 01
+MUS_SYOUJOEYE = 7B 01
+MUS_BOYEYE = 7C 01
+MUS_DAN02 = 7D 01
+MUS_MACHI_S3 = 7E 01
+MUS_ODAMAKI = 7F 01
+MUS_B_TOWER = 80 01
+MUS_SWIMEYE = 81 01
+MUS_DAN03 = 82 01
+MUS_ME_KINOMI = 83 01
+MUS_ME_TAMA = 84 01
+MUS_ME_B_BIG = 85 01
+MUS_ME_B_SMALL = 86 01
+MUS_ME_ZANNEN = 87 01
+MUS_BD_TIME = 88 01
+MUS_TEST1 = 89 01
+MUS_TEST2 = 8A 01
+MUS_TEST3 = 8B 01
+MUS_TEST4 = 8C 01
+MUS_TEST = 8D 01
+MUS_GOMACHI0 = 8E 01
+MUS_GOTOWN = 8F 01
+MUS_POKECEN = 90 01
+MUS_NEXTROAD = 91 01
+MUS_GRANROAD = 92 01
+MUS_CYCLING = 93 01
+MUS_FRIENDLY = 94 01
+MUS_MISHIRO = 95 01
+MUS_TOZAN = 96 01
+MUS_GIRLEYE = 97 01
+MUS_MINAMO = 98 01
+MUS_ASHROAD = 99 01
+MUS_EVENT0 = 9A 01
+MUS_DEEPDEEP = 9B 01
+MUS_KACHI1 = 9C 01
+MUS_TITLE3 = 9D 01
+MUS_DEMO1 = 9E 01
+MUS_GIRL_SUP = 9F 01
+MUS_HAGESHII = A0 01
+MUS_KAKKOII = A1 01
+MUS_KAZANBAI = A2 01
+MUS_AQA_0 = A3 01
+MUS_TSURETEK = A4 01
+MUS_BOY_SUP = A5 01
+MUS_RAINBOW = A6 01
+MUS_AYASII = A7 01
+MUS_KACHI4 = A8 01
+MUS_ROPEWAY = A9 01
+MUS_CASINO = AA 01
+MUS_HIGHTOWN = AB 01
+MUS_SAFARI = AC 01
+MUS_C_ROAD = AD 01
+MUS_AJITO = AE 01
+MUS_M_BOAT = AF 01
+MUS_M_DUNGON = B0 01
+MUS_FINECITY = B1 01
+MUS_MACHUPI = B2 01
+MUS_P_SCHOOL = B3 01
+MUS_DENDOU = B4 01
+MUS_TONEKUSA = B5 01
+MUS_MABOROSI = B6 01
+MUS_CON_FAN = B7 01
+MUS_CONTEST0 = B8 01
+MUS_MGM0 = B9 01
+MUS_T_BATTLE = BA 01
+MUS_OOAME = BB 01
+MUS_HIDERI = BC 01
+MUS_RUNECITY = BD 01
+MUS_CON_K = BE 01
+MUS_EIKOU_R = BF 01
+MUS_KARAKURI = C0 01
+MUS_HUTAGO = C1 01
+MUS_SITENNOU = C2 01
+MUS_YAMA_EYE = C3 01
+MUS_CONLOBBY = C4 01
+MUS_INTER_V = C5 01
+MUS_DAIGO = C6 01
+MUS_THANKFOR = C7 01
+MUS_END = C8 01
+MUS_B_FRONTIER = C9 01
+MUS_B_ARENA = CA 01
+MUS_ME_POINTGET = CB 01
+MUS_ME_TORE_EYE = CC 01
+MUS_PYRAMID = CD 01
+MUS_PYRAMID_TOP = CE 01
+MUS_B_PALACE = CF 01
+MUS_REKKUU_KOURIN = D0 01
+MUS_SATTOWER = D1 01
+MUS_ME_SYMBOLGET = D2 01
+MUS_B_DOME = D3 01
+MUS_B_TUBE = D4 01
+MUS_B_FACTORY = D5 01
+MUS_VS_REKKU = D6 01
+MUS_VS_FRONT = D7 01
+MUS_VS_MEW = D8 01
+MUS_B_DOME1 = D9 01
+MUS_BATTLE27 = DA 01
+MUS_BATTLE31 = DB 01
+MUS_BATTLE20 = DC 01
+MUS_BATTLE32 = DD 01
+MUS_BATTLE33 = DE 01
+MUS_BATTLE36 = DF 01
+MUS_BATTLE34 = E0 01
+MUS_BATTLE35 = E1 01
+MUS_BATTLE38 = E2 01
+MUS_BATTLE30 = E3 01
+MUS_RG_ANNAI = E4 01
+MUS_RG_SLOT = E5 01
+MUS_RG_AJITO = E6 01
+MUS_RG_GYM = E7 01
+MUS_RG_PURIN = E8 01
+MUS_RG_DEMO = E9 01
+MUS_RG_TITLE = EA 01
+MUS_RG_GUREN = EB 01
+MUS_RG_SHION = EC 01
+MUS_RG_KAIHUKU = ED 01
+MUS_RG_CYCLING = EE 01
+MUS_RG_ROCKET = EF 01
+MUS_RG_SHOUJO = F0 01
+MUS_RG_SHOUNEN = F1 01
+MUS_RG_DENDOU = F2 01
+MUS_RG_T_MORI = F3 01
+MUS_RG_OTSUKIMI = F4 01
+MUS_RG_POKEYASHI = F5 01
+MUS_RG_ENDING = F6 01
+MUS_RG_LOAD01 = F7 01
+MUS_RG_OPENING = F8 01
+MUS_RG_LOAD02 = F9 01
+MUS_RG_LOAD03 = FA 01
+MUS_RG_CHAMP_R = FB 01
+MUS_RG_VS_GYM = FC 01
+MUS_RG_VS_TORE = FD 01
+MUS_RG_VS_YASEI = FE 01
+MUS_RG_VS_LAST = FF 01
+MUS_RG_MASARA = 00 02
+MUS_RG_KENKYU = 01 02
+MUS_RG_OHKIDO = 02 02
+MUS_RG_POKECEN = 03 02
+MUS_RG_SANTOAN = 04 02
+MUS_RG_NAMINORI = 05 02
+MUS_RG_P_TOWER = 06 02
+MUS_RG_SHIRUHU = 07 02
+MUS_RG_HANADA = 08 02
+MUS_RG_TAMAMUSI = 09 02
+MUS_RG_WIN_TRE = 0A 02
+MUS_RG_WIN_YASEI = 0B 02
+MUS_RG_WIN_GYM = 0C 02
+MUS_RG_KUCHIBA = 0D 02
+MUS_RG_NIBI = 0E 02
+MUS_RG_RIVAL1 = 0F 02
+MUS_RG_RIVAL2 = 10 02
+MUS_RG_FAN2 = 11 02
+MUS_RG_FAN5 = 12 02
+MUS_RG_FAN6 = 13 02
+MUS_ME_RG_PHOTO = 14 02
+MUS_RG_TITLEROG = 15 02
+MUS_RG_GET_YASEI = 16 02
+MUS_RG_SOUSA = 17 02
+MUS_RG_SEKAIKAN = 18 02
+MUS_RG_SEIBETU = 19 02
+MUS_RG_JUMP = 1A 02
+MUS_RG_UNION = 1B 02
+MUS_RG_NETWORK = 1C 02
+MUS_RG_OKURIMONO = 1D 02
+MUS_RG_KINOMIKUI = 1E 02
+MUS_RG_NANADUNGEON = 1F 02
+MUS_RG_OSHIE_TV = 20 02
+MUS_RG_NANASHIMA = 21 02
+MUS_RG_NANAISEKI = 22 02
+MUS_RG_NANA123 = 23 02
+MUS_RG_NANA45 = 24 02
+MUS_RG_NANA67 = 25 02
+MUS_RG_POKEFUE = 26 02
+MUS_RG_VS_DEO = 27 02
+MUS_RG_VS_MYU2 = 28 02
+MUS_RG_VS_DEN = 29 02
+MUS_RG_EXEYE = 2A 02
+MUS_RG_DEOEYE = 2B 02
+MUS_RG_T_TOWER = 2C 02
+MUS_RG_SLOWMASARA = 2D 02
+MUS_RG_TVNOIZE = 2E 02
+PH_TRAP_BLEND = 2F 02
+PH_TRAP_HELD = 30 02
+PH_TRAP_SOLO = 31 02
+PH_FACE_BLEND = 32 02
+PH_FACE_HELD = 33 02
+PH_FACE_SOLO = 34 02
+PH_CLOTH_BLEND = 35 02
+PH_CLOTH_HELD = 36 02
+PH_CLOTH_SOLO = 37 02
+PH_DRESS_BLEND = 38 02
+PH_DRESS_HELD = 39 02
+PH_DRESS_SOLO = 3A 02
+PH_FLEECE_BLEND = 3B 02
+PH_FLEECE_HELD = 3C 02
+PH_FLEECE_SOLO = 3D 02
+PH_KIT_BLEND = 3E 02
+PH_KIT_HELD = 3F 02
+PH_KIT_SOLO = 40 02
+PH_PRICE_BLEND = 41 02
+PH_PRICE_HELD = 42 02
+PH_PRICE_SOLO = 43 02
+PH_LOT_BLEND = 44 02
+PH_LOT_HELD = 45 02
+PH_LOT_SOLO = 46 02
+PH_GOAT_BLEND = 47 02
+PH_GOAT_HELD = 48 02
+PH_GOAT_SOLO = 49 02
+PH_THOUGHT_BLEND = 4A 02
+PH_THOUGHT_HELD = 4B 02
+PH_THOUGHT_SOLO = 4C 02
+PH_CHOICE_BLEND = 4D 02
+PH_CHOICE_HELD = 4E 02
+PH_CHOICE_SOLO = 4F 02
+PH_MOUTH_BLEND = 50 02
+PH_MOUTH_HELD = 51 02
+PH_MOUTH_SOLO = 52 02
+PH_FOOT_BLEND = 53 02
+PH_FOOT_HELD = 54 02
+PH_FOOT_SOLO = 55 02
+PH_GOOSE_BLEND = 56 02
+PH_GOOSE_HELD = 57 02
+PH_GOOSE_SOLO = 58 02
+PH_STRUT_BLEND = 59 02
+PH_STRUT_HELD = 5A 02
+PH_STRUT_SOLO = 5B 02
+PH_CURE_BLEND = 5C 02
+PH_CURE_HELD = 5D 02
+PH_CURE_SOLO = 5E 02
+PH_NURSE_BLEND = 5F 02
+PH_NURSE_HELD = 60 02
+PH_NURSE_SOLO = 61 02
+
+A_BUTTON = F8 00
+B_BUTTON = F8 01
+DPAD_UPDOWN = F8 0A
+DPAD_NONE = F8 0C
+
+UP_ARROW_2 = F9 00
+DOWN_ARROW_2 = F9 01
+LEFT_ARROW_2 = F9 02
+RIGHT_ARROW_2 = F9 03
+PLUS = F9 04
+LV_2 = F9 05
+PP = F9 06
+ID = F9 07
+NO = F9 08
+UNDERSCORE = F9 09
+CIRCLE_1 = F9 0A
+CIRCLE_2 = F9 0B
+CIRCLE_3 = F9 0C
+CIRCLE_4 = F9 0D
+CIRCLE_5 = F9 0E
+CIRCLE_6 = F9 0F
+CIRCLE_7 = F9 10
+CIRCLE_8 = F9 11
+CIRCLE_9 = F9 12
+ROUND_LEFT_PAREN = F9 13
+ROUND_RIGHT_PAREN = F9 14
+CIRCLE_DOT = F9 15
+TRIANGLE = F9 16
+BIG_MULT_X = F9 17
+
+EMOJI_UNDERSCORE = F9 D0
+EMOJI_PIPE = F9 D1
+EMOJI_HIGHBAR = F9 D2
+EMOJI_TILDE = F9 D3
+EMOJI_LEFT_PAREN = F9 D4
+EMOJI_RIGHT_PAREN = F9 D5
+EMOJI_UNION = F9 D6 @ ⊂
+EMOJI_GREATER_THAN = F9 D7
+EMOJI_LEFT_EYE = F9 D8
+EMOJI_RIGHT_EYE = F9 D9
+EMOJI_AT = F9 DA
+EMOJI_SEMICOLON = F9 DB
+EMOJI_PLUS = F9 DC
+EMOJI_MINUS = F9 DD
+EMOJI_EQUALS = F9 DE
+EMOJI_SPIRAL = F9 DF
+EMOJI_TONGUE = F9 E0
+EMOJI_TRIANGLE_OUTLINE = F9 E1
+EMOJI_ACUTE = F9 E2
+EMOJI_GRAVE = F9 E3
+EMOJI_CIRCLE = F9 E4
+EMOJI_TRIANGLE = F9 E5
+EMOJI_SQUARE = F9 E6
+EMOJI_HEART = F9 E7
+EMOJI_MOON = F9 E8
+EMOJI_NOTE = F9 E9
+EMOJI_BALL = F9 EA
+EMOJI_BOLT = F9 EB
+EMOJI_LEAF = F9 EC
+EMOJI_FIRE = F9 ED
+EMOJI_WATER = F9 EE
+EMOJI_LEFT_FIST = F9 EF
+EMOJI_RIGHT_FIST = F9 F0
+EMOJI_BIGWHEEL = F9 F1
+EMOJI_SMALLWHEEL = F9 F2
+EMOJI_SPHERE = F9 F3
+EMOJI_IRRITATED = F9 F4
+EMOJI_MISCHIEVOUS = F9 F5
+EMOJI_HAPPY = F9 F6
+EMOJI_ANGRY = F9 F7
+EMOJI_SURPRISED = F9 F8
+EMOJI_BIGSMILE = F9 F9
+EMOJI_EVIL = F9 FA
+EMOJI_TIRED = F9 FB
+EMOJI_NEUTRAL = F9 FC
+EMOJI_SHOCKED = F9 FD
+EMOJI_BIGANGER = F9 FE
+
+'\l' = FA @ scroll up window text
+'\p' = FB @ new paragraph
+'\n' = FE @ new line
diff --git a/berry_fix/payload/common_syms/agb_flash.txt b/berry_fix/payload/common_syms/agb_flash.txt
new file mode 100644
index 000000000..cb421ec80
--- /dev/null
+++ b/berry_fix/payload/common_syms/agb_flash.txt
@@ -0,0 +1,10 @@
+gFlashTimeoutFlag
+PollFlashStatus
+WaitForFlashWrite
+ProgramFlashSector
+gFlash
+ProgramFlashByte
+gFlashNumRemainingBytes
+EraseFlashChip
+EraseFlashSector
+gFlashMaxTime
diff --git a/berry_fix/payload/common_syms/main.txt b/berry_fix/payload/common_syms/main.txt
new file mode 100644
index 000000000..b62c72124
--- /dev/null
+++ b/berry_fix/payload/common_syms/main.txt
@@ -0,0 +1,9 @@
+gIntrTable
+gHeldKeys
+gNewKeys
+gIntrVector
+gUpdateSuccessful
+gUnknown_3001194
+gUnknown_30011A0
+gMainCallbackState
+gGameVersion
diff --git a/berry_fix/payload/common_syms/rtc.txt b/berry_fix/payload/common_syms/rtc.txt
new file mode 100644
index 000000000..7aafbe65d
--- /dev/null
+++ b/berry_fix/payload/common_syms/rtc.txt
@@ -0,0 +1,2 @@
+gTimeSinceBerryUpdate
+gRtcUTCTime
diff --git a/berry_fix/payload/constants/gba_constants.inc b/berry_fix/payload/constants/gba_constants.inc
new file mode 100644
index 000000000..9d59c8fcd
--- /dev/null
+++ b/berry_fix/payload/constants/gba_constants.inc
@@ -0,0 +1,490 @@
+ .set PSR_USR_MODE, 0x00000010
+ .set PSR_FIQ_MODE, 0x00000011
+ .set PSR_IRQ_MODE, 0x00000012
+ .set PSR_SVC_MODE, 0x00000013
+ .set PSR_ABT_MODE, 0x00000017
+ .set PSR_UND_MODE, 0x0000001b
+ .set PSR_SYS_MODE, 0x0000001f
+ .set PSR_MODE_MASK, 0x0000001f
+ .set PSR_T_BIT, 0x00000020
+ .set PSR_F_BIT, 0x00000040
+ .set PSR_I_BIT, 0x00000080
+
+ .set EWRAM_START, 0x02000000
+ .set EWRAM_END, EWRAM_START + 0x40000
+ .set IWRAM_START, 0x03000000
+ .set IWRAM_END, IWRAM_START + 0x8000
+
+ .set PLTT, 0x5000000
+ .set BG_PLTT, PLTT
+ .set OBJ_PLTT, PLTT + 0x200
+
+ .set VRAM, 0x6000000
+ .set BG_VRAM, VRAM
+ .set OBJ_VRAM0, VRAM + 0x10000 @ text-mode BG
+ .set OBJ_VRAM1, VRAM + 0x14000 @ bitmap-mode BG
+
+ .set OAM, 0x7000000
+
+ .set SOUND_INFO_PTR, 0x3007FF0
+ .set INTR_CHECK, 0x3007FF8
+ .set INTR_VECTOR, 0x3007FFC
+
+ .set INTR_FLAG_VBLANK, 1 << 0
+ .set INTR_FLAG_HBLANK, 1 << 1
+ .set INTR_FLAG_VCOUNT, 1 << 2
+ .set INTR_FLAG_TIMER0, 1 << 3
+ .set INTR_FLAG_TIMER1, 1 << 4
+ .set INTR_FLAG_TIMER2, 1 << 5
+ .set INTR_FLAG_TIMER3, 1 << 6
+ .set INTR_FLAG_SERIAL, 1 << 7
+ .set INTR_FLAG_DMA0, 1 << 8
+ .set INTR_FLAG_DMA1, 1 << 9
+ .set INTR_FLAG_DMA2, 1 << 10
+ .set INTR_FLAG_DMA3, 1 << 11
+ .set INTR_FLAG_KEYPAD, 1 << 12
+ .set INTR_FLAG_GAMEPAK, 1 << 13
+
+ .set VCOUNT_VBLANK, 160
+ .set TOTAL_SCANLINES, 228
+
+ .set REG_BASE, 0x4000000 @ I/O register base address
+
+@ I/O register offsets
+ .set OFFSET_REG_DISPCNT, 0x0
+ .set OFFSET_REG_DISPSTAT, 0x4
+ .set OFFSET_REG_VCOUNT, 0x6
+ .set OFFSET_REG_BG0CNT, 0x8
+ .set OFFSET_REG_BG1CNT, 0xa
+ .set OFFSET_REG_BG2CNT, 0xc
+ .set OFFSET_REG_BG3CNT, 0xe
+ .set OFFSET_REG_BG0HOFS, 0x10
+ .set OFFSET_REG_BG0VOFS, 0x12
+ .set OFFSET_REG_BG1HOFS, 0x14
+ .set OFFSET_REG_BG1VOFS, 0x16
+ .set OFFSET_REG_BG2HOFS, 0x18
+ .set OFFSET_REG_BG2VOFS, 0x1a
+ .set OFFSET_REG_BG3HOFS, 0x1c
+ .set OFFSET_REG_BG3VOFS, 0x1e
+ .set OFFSET_REG_BG2PA, 0x20
+ .set OFFSET_REG_BG2PB, 0x22
+ .set OFFSET_REG_BG2PC, 0x24
+ .set OFFSET_REG_BG2PD, 0x26
+ .set OFFSET_REG_BG2X_L, 0x28
+ .set OFFSET_REG_BG2X_H, 0x2a
+ .set OFFSET_REG_BG2Y_L, 0x2c
+ .set OFFSET_REG_BG2Y_H, 0x2e
+ .set OFFSET_REG_BG3PA, 0x30
+ .set OFFSET_REG_BG3PB, 0x32
+ .set OFFSET_REG_BG3PC, 0x34
+ .set OFFSET_REG_BG3PD, 0x36
+ .set OFFSET_REG_BG3X_L, 0x38
+ .set OFFSET_REG_BG3X_H, 0x3a
+ .set OFFSET_REG_BG3Y_L, 0x3c
+ .set OFFSET_REG_BG3Y_H, 0x3e
+ .set OFFSET_REG_WIN0H, 0x40
+ .set OFFSET_REG_WIN1H, 0x42
+ .set OFFSET_REG_WIN0V, 0x44
+ .set OFFSET_REG_WIN1V, 0x46
+ .set OFFSET_REG_WININ, 0x48
+ .set OFFSET_REG_WINOUT, 0x4a
+ .set OFFSET_REG_MOSAIC, 0x4c
+ .set OFFSET_REG_BLDCNT, 0x50
+ .set OFFSET_REG_BLDALPHA, 0x52
+ .set OFFSET_REG_BLDY, 0x54
+
+ .set OFFSET_REG_SOUND1CNT, 0x60
+ .set OFFSET_REG_SOUND1CNT_L, 0x60
+ .set OFFSET_REG_NR10, 0x60
+ .set OFFSET_REG_SOUND1CNT_H, 0x62
+ .set OFFSET_REG_NR11, 0x62
+ .set OFFSET_REG_NR12, 0x63
+ .set OFFSET_REG_SOUND1CNT_X, 0x64
+ .set OFFSET_REG_NR13, 0x64
+ .set OFFSET_REG_NR14, 0x65
+ .set OFFSET_REG_SOUND2CNT, 0x68
+ .set OFFSET_REG_SOUND2CNT_L, 0x68
+ .set OFFSET_REG_NR21, 0x68
+ .set OFFSET_REG_NR22, 0x69
+ .set OFFSET_REG_SOUND2CNT_H, 0x6c
+ .set OFFSET_REG_NR23, 0x6c
+ .set OFFSET_REG_NR24, 0x6d
+ .set OFFSET_REG_SOUND3CNT, 0x70
+ .set OFFSET_REG_SOUND3CNT_L, 0x70
+ .set OFFSET_REG_NR30, 0x70
+ .set OFFSET_REG_SOUND3CNT_H, 0x72
+ .set OFFSET_REG_NR31, 0x72
+ .set OFFSET_REG_NR32, 0x73
+ .set OFFSET_REG_SOUND3CNT_X, 0x74
+ .set OFFSET_REG_NR33, 0x74
+ .set OFFSET_REG_NR34, 0x75
+ .set OFFSET_REG_SOUND4CNT, 0x78
+ .set OFFSET_REG_SOUND4CNT_L, 0x78
+ .set OFFSET_REG_NR41, 0x78
+ .set OFFSET_REG_NR42, 0x79
+ .set OFFSET_REG_SOUND4CNT_H, 0x7c
+ .set OFFSET_REG_NR43, 0x7c
+ .set OFFSET_REG_NR44, 0x7d
+ .set OFFSET_REG_SOUNDCNT, 0x80
+ .set OFFSET_REG_SOUNDCNT_L, 0x80
+ .set OFFSET_REG_NR50, 0x80
+ .set OFFSET_REG_NR51, 0x81
+ .set OFFSET_REG_SOUNDCNT_H, 0x82
+ .set OFFSET_REG_SOUNDCNT_X, 0x84
+ .set OFFSET_REG_NR52, 0x84
+ .set OFFSET_REG_SOUNDBIAS, 0x88
+ .set OFFSET_REG_WAVE_RAM, 0x90
+ .set OFFSET_REG_WAVE_RAM0, 0x90
+ .set OFFSET_REG_WAVE_RAM0_L, 0x90
+ .set OFFSET_REG_WAVE_RAM0_H, 0x92
+ .set OFFSET_REG_WAVE_RAM1, 0x94
+ .set OFFSET_REG_WAVE_RAM1_L, 0x94
+ .set OFFSET_REG_WAVE_RAM1_H, 0x96
+ .set OFFSET_REG_WAVE_RAM2, 0x98
+ .set OFFSET_REG_WAVE_RAM2_L, 0x98
+ .set OFFSET_REG_WAVE_RAM2_H, 0x9a
+ .set OFFSET_REG_WAVE_RAM3, 0x9c
+ .set OFFSET_REG_WAVE_RAM3_L, 0x9c
+ .set OFFSET_REG_WAVE_RAM3_H, 0x9e
+ .set OFFSET_REG_FIFO, 0xa0
+ .set OFFSET_REG_FIFO_A, 0xa0
+ .set OFFSET_REG_FIFO_A_L, 0xa0
+ .set OFFSET_REG_FIFO_A_H, 0xa2
+ .set OFFSET_REG_FIFO_B, 0xa4
+ .set OFFSET_REG_FIFO_B_L, 0xa4
+ .set OFFSET_REG_FIFO_B_H, 0xa6
+
+ .set OFFSET_REG_DMA0, 0xb0
+ .set OFFSET_REG_DMA0SAD, 0xb0
+ .set OFFSET_REG_DMA0SAD_L, 0xb0
+ .set OFFSET_REG_DMA0SAD_H, 0xb2
+ .set OFFSET_REG_DMA0DAD, 0xb4
+ .set OFFSET_REG_DMA0DAD_L, 0xb4
+ .set OFFSET_REG_DMA0DAD_H, 0xb6
+ .set OFFSET_REG_DMA0CNT, 0xb8
+ .set OFFSET_REG_DMA0CNT_L, 0xb8
+ .set OFFSET_REG_DMA0CNT_H, 0xba
+ .set OFFSET_REG_DMA1, 0xbc
+ .set OFFSET_REG_DMA1SAD, 0xbc
+ .set OFFSET_REG_DMA1SAD_L, 0xbc
+ .set OFFSET_REG_DMA1SAD_H, 0xbe
+ .set OFFSET_REG_DMA1DAD, 0xc0
+ .set OFFSET_REG_DMA1DAD_L, 0xc0
+ .set OFFSET_REG_DMA1DAD_H, 0xc2
+ .set OFFSET_REG_DMA1CNT, 0xc4
+ .set OFFSET_REG_DMA1CNT_L, 0xc4
+ .set OFFSET_REG_DMA1CNT_H, 0xc6
+ .set OFFSET_REG_DMA2, 0xc8
+ .set OFFSET_REG_DMA2SAD, 0xc8
+ .set OFFSET_REG_DMA2SAD_L, 0xc8
+ .set OFFSET_REG_DMA2SAD_H, 0xca
+ .set OFFSET_REG_DMA2DAD, 0xcc
+ .set OFFSET_REG_DMA2DAD_L, 0xcc
+ .set OFFSET_REG_DMA2DAD_H, 0xce
+ .set OFFSET_REG_DMA2CNT, 0xd0
+ .set OFFSET_REG_DMA2CNT_L, 0xd0
+ .set OFFSET_REG_DMA2CNT_H, 0xd2
+ .set OFFSET_REG_DMA3, 0xd4
+ .set OFFSET_REG_DMA3SAD, 0xd4
+ .set OFFSET_REG_DMA3SAD_L, 0xd4
+ .set OFFSET_REG_DMA3SAD_H, 0xd6
+ .set OFFSET_REG_DMA3DAD, 0xd8
+ .set OFFSET_REG_DMA3DAD_L, 0xd8
+ .set OFFSET_REG_DMA3DAD_H, 0xda
+ .set OFFSET_REG_DMA3CNT, 0xdc
+ .set OFFSET_REG_DMA3CNT_L, 0xdc
+ .set OFFSET_REG_DMA3CNT_H, 0xde
+
+ .set OFFSET_REG_TM0CNT, 0x100
+ .set OFFSET_REG_TM0CNT_L, 0x100
+ .set OFFSET_REG_TM0CNT_H, 0x102
+ .set OFFSET_REG_TM1CNT, 0x104
+ .set OFFSET_REG_TM1CNT_L, 0x104
+ .set OFFSET_REG_TM1CNT_H, 0x106
+ .set OFFSET_REG_TM2CNT, 0x108
+ .set OFFSET_REG_TM2CNT_L, 0x108
+ .set OFFSET_REG_TM2CNT_H, 0x10a
+ .set OFFSET_REG_TM3CNT, 0x10c
+ .set OFFSET_REG_TM3CNT_L, 0x10c
+ .set OFFSET_REG_TM3CNT_H, 0x10e
+
+ .set OFFSET_REG_SIOCNT, 0x128
+ .set OFFSET_REG_SIODATA8, 0x12a
+ .set OFFSET_REG_SIODATA32, 0x120
+ .set OFFSET_REG_SIOMLT_SEND, 0x12a
+ .set OFFSET_REG_SIOMLT_RECV, 0x120
+ .set OFFSET_REG_SIOMULTI0, 0x120
+ .set OFFSET_REG_SIOMULTI1, 0x122
+ .set OFFSET_REG_SIOMULTI2, 0x124
+ .set OFFSET_REG_SIOMULTI3, 0x126
+
+ .set OFFSET_REG_KEYINPUT, 0x130
+ .set OFFSET_REG_KEYCNT, 0x132
+
+ .set OFFSET_REG_RCNT, 0x134
+
+ .set OFFSET_REG_JOYCNT, 0x140
+ .set OFFSET_REG_JOYSTAT, 0x158
+ .set OFFSET_REG_JOY_RECV, 0x150
+ .set OFFSET_REG_JOY_RECV_L, 0x150
+ .set OFFSET_REG_JOY_RECV_H, 0x152
+ .set OFFSET_REG_JOY_TRANS, 0x154
+ .set OFFSET_REG_JOY_TRANS_L, 0x154
+ .set OFFSET_REG_JOY_TRANS_H, 0x156
+
+ .set OFFSET_REG_IME, 0x208
+ .set OFFSET_REG_IE, 0x200
+ .set OFFSET_REG_IF, 0x202
+
+ .set OFFSET_REG_WAITCNT, 0x204
+
+@ I/O register addresses
+ .set REG_DISPCNT, REG_BASE + OFFSET_REG_DISPCNT
+ .set REG_DISPSTAT, REG_BASE + OFFSET_REG_DISPSTAT
+ .set REG_VCOUNT, REG_BASE + OFFSET_REG_VCOUNT
+ .set REG_BG0CNT, REG_BASE + OFFSET_REG_BG0CNT
+ .set REG_BG1CNT, REG_BASE + OFFSET_REG_BG1CNT
+ .set REG_BG2CNT, REG_BASE + OFFSET_REG_BG2CNT
+ .set REG_BG3CNT, REG_BASE + OFFSET_REG_BG3CNT
+ .set REG_BG0HOFS, REG_BASE + OFFSET_REG_BG0HOFS
+ .set REG_BG0VOFS, REG_BASE + OFFSET_REG_BG0VOFS
+ .set REG_BG1HOFS, REG_BASE + OFFSET_REG_BG1HOFS
+ .set REG_BG1VOFS, REG_BASE + OFFSET_REG_BG1VOFS
+ .set REG_BG2HOFS, REG_BASE + OFFSET_REG_BG2HOFS
+ .set REG_BG2VOFS, REG_BASE + OFFSET_REG_BG2VOFS
+ .set REG_BG3HOFS, REG_BASE + OFFSET_REG_BG3HOFS
+ .set REG_BG3VOFS, REG_BASE + OFFSET_REG_BG3VOFS
+ .set REG_BG2PA, REG_BASE + OFFSET_REG_BG2PA
+ .set REG_BG2PB, REG_BASE + OFFSET_REG_BG2PB
+ .set REG_BG2PC, REG_BASE + OFFSET_REG_BG2PC
+ .set REG_BG2PD, REG_BASE + OFFSET_REG_BG2PD
+ .set REG_BG2X_L, REG_BASE + OFFSET_REG_BG2X_L
+ .set REG_BG2X_H, REG_BASE + OFFSET_REG_BG2X_H
+ .set REG_BG2Y_L, REG_BASE + OFFSET_REG_BG2Y_L
+ .set REG_BG2Y_H, REG_BASE + OFFSET_REG_BG2Y_H
+ .set REG_BG3PA, REG_BASE + OFFSET_REG_BG3PA
+ .set REG_BG3PB, REG_BASE + OFFSET_REG_BG3PB
+ .set REG_BG3PC, REG_BASE + OFFSET_REG_BG3PC
+ .set REG_BG3PD, REG_BASE + OFFSET_REG_BG3PD
+ .set REG_BG3X_L, REG_BASE + OFFSET_REG_BG3X_L
+ .set REG_BG3X_H, REG_BASE + OFFSET_REG_BG3X_H
+ .set REG_BG3Y_L, REG_BASE + OFFSET_REG_BG3Y_L
+ .set REG_BG3Y_H, REG_BASE + OFFSET_REG_BG3Y_H
+ .set REG_WIN0H, REG_BASE + OFFSET_REG_WIN0H
+ .set REG_WIN1H, REG_BASE + OFFSET_REG_WIN1H
+ .set REG_WIN0V, REG_BASE + OFFSET_REG_WIN0V
+ .set REG_WIN1V, REG_BASE + OFFSET_REG_WIN1V
+ .set REG_WININ, REG_BASE + OFFSET_REG_WININ
+ .set REG_WINOUT, REG_BASE + OFFSET_REG_WINOUT
+ .set REG_MOSAIC, REG_BASE + OFFSET_REG_MOSAIC
+ .set REG_BLDCNT, REG_BASE + OFFSET_REG_BLDCNT
+ .set REG_BLDALPHA, REG_BASE + OFFSET_REG_BLDALPHA
+ .set REG_BLDY, REG_BASE + OFFSET_REG_BLDY
+
+ .set REG_SOUND1CNT, REG_BASE + OFFSET_REG_SOUND1CNT
+ .set REG_SOUND1CNT_L, REG_BASE + OFFSET_REG_SOUND1CNT_L
+ .set REG_NR10, REG_BASE + OFFSET_REG_NR10
+ .set REG_SOUND1CNT_H, REG_BASE + OFFSET_REG_SOUND1CNT_H
+ .set REG_NR11, REG_BASE + OFFSET_REG_NR11
+ .set REG_NR12, REG_BASE + OFFSET_REG_NR12
+ .set REG_SOUND1CNT_X, REG_BASE + OFFSET_REG_SOUND1CNT_X
+ .set REG_NR13, REG_BASE + OFFSET_REG_NR13
+ .set REG_NR14, REG_BASE + OFFSET_REG_NR14
+ .set REG_SOUND2CNT, REG_BASE + OFFSET_REG_SOUND2CNT
+ .set REG_SOUND2CNT_L, REG_BASE + OFFSET_REG_SOUND2CNT_L
+ .set REG_NR21, REG_BASE + OFFSET_REG_NR21
+ .set REG_NR22, REG_BASE + OFFSET_REG_NR22
+ .set REG_SOUND2CNT_H, REG_BASE + OFFSET_REG_SOUND2CNT_H
+ .set REG_NR23, REG_BASE + OFFSET_REG_NR23
+ .set REG_NR24, REG_BASE + OFFSET_REG_NR24
+ .set REG_SOUND3CNT, REG_BASE + OFFSET_REG_SOUND3CNT
+ .set REG_SOUND3CNT_L, REG_BASE + OFFSET_REG_SOUND3CNT_L
+ .set REG_NR30, REG_BASE + OFFSET_REG_NR30
+ .set REG_SOUND3CNT_H, REG_BASE + OFFSET_REG_SOUND3CNT_H
+ .set REG_NR31, REG_BASE + OFFSET_REG_NR31
+ .set REG_NR32, REG_BASE + OFFSET_REG_NR32
+ .set REG_SOUND3CNT_X, REG_BASE + OFFSET_REG_SOUND3CNT_X
+ .set REG_NR33, REG_BASE + OFFSET_REG_NR33
+ .set REG_NR34, REG_BASE + OFFSET_REG_NR34
+ .set REG_SOUND4CNT, REG_BASE + OFFSET_REG_SOUND4CNT
+ .set REG_SOUND4CNT_L, REG_BASE + OFFSET_REG_SOUND4CNT_L
+ .set REG_NR41, REG_BASE + OFFSET_REG_NR41
+ .set REG_NR42, REG_BASE + OFFSET_REG_NR42
+ .set REG_SOUND4CNT_H, REG_BASE + OFFSET_REG_SOUND4CNT_H
+ .set REG_NR43, REG_BASE + OFFSET_REG_NR43
+ .set REG_NR44, REG_BASE + OFFSET_REG_NR44
+ .set REG_SOUNDCNT, REG_BASE + OFFSET_REG_SOUNDCNT
+ .set REG_SOUNDCNT_L, REG_BASE + OFFSET_REG_SOUNDCNT_L
+ .set REG_NR50, REG_BASE + OFFSET_REG_NR50
+ .set REG_NR51, REG_BASE + OFFSET_REG_NR51
+ .set REG_SOUNDCNT_H, REG_BASE + OFFSET_REG_SOUNDCNT_H
+ .set REG_SOUNDCNT_X, REG_BASE + OFFSET_REG_SOUNDCNT_X
+ .set REG_NR52, REG_BASE + OFFSET_REG_NR52
+ .set REG_SOUNDBIAS, REG_BASE + OFFSET_REG_SOUNDBIAS
+ .set REG_WAVE_RAM, REG_BASE + OFFSET_REG_WAVE_RAM
+ .set REG_WAVE_RAM0, REG_BASE + OFFSET_REG_WAVE_RAM0
+ .set REG_WAVE_RAM0_L, REG_BASE + OFFSET_REG_WAVE_RAM0_L
+ .set REG_WAVE_RAM0_H, REG_BASE + OFFSET_REG_WAVE_RAM0_H
+ .set REG_WAVE_RAM1, REG_BASE + OFFSET_REG_WAVE_RAM1
+ .set REG_WAVE_RAM1_L, REG_BASE + OFFSET_REG_WAVE_RAM1_L
+ .set REG_WAVE_RAM1_H, REG_BASE + OFFSET_REG_WAVE_RAM1_H
+ .set REG_WAVE_RAM2, REG_BASE + OFFSET_REG_WAVE_RAM2
+ .set REG_WAVE_RAM2_L, REG_BASE + OFFSET_REG_WAVE_RAM2_L
+ .set REG_WAVE_RAM2_H, REG_BASE + OFFSET_REG_WAVE_RAM2_H
+ .set REG_WAVE_RAM3, REG_BASE + OFFSET_REG_WAVE_RAM3
+ .set REG_WAVE_RAM3_L, REG_BASE + OFFSET_REG_WAVE_RAM3_L
+ .set REG_WAVE_RAM3_H, REG_BASE + OFFSET_REG_WAVE_RAM3_H
+ .set REG_FIFO, REG_BASE + OFFSET_REG_FIFO
+ .set REG_FIFO_A, REG_BASE + OFFSET_REG_FIFO_A
+ .set REG_FIFO_A_L, REG_BASE + OFFSET_REG_FIFO_A_L
+ .set REG_FIFO_A_H, REG_BASE + OFFSET_REG_FIFO_A_H
+ .set REG_FIFO_B, REG_BASE + OFFSET_REG_FIFO_B
+ .set REG_FIFO_B_L, REG_BASE + OFFSET_REG_FIFO_B_L
+ .set REG_FIFO_B_H, REG_BASE + OFFSET_REG_FIFO_B_H
+
+ .set REG_DMA0, REG_BASE + OFFSET_REG_DMA0
+ .set REG_DMA0SAD, REG_BASE + OFFSET_REG_DMA0SAD
+ .set REG_DMA0SAD_L, REG_BASE + OFFSET_REG_DMA0SAD_L
+ .set REG_DMA0SAD_H, REG_BASE + OFFSET_REG_DMA0SAD_H
+ .set REG_DMA0DAD, REG_BASE + OFFSET_REG_DMA0DAD
+ .set REG_DMA0DAD_L, REG_BASE + OFFSET_REG_DMA0DAD_L
+ .set REG_DMA0DAD_H, REG_BASE + OFFSET_REG_DMA0DAD_H
+ .set REG_DMA0CNT, REG_BASE + OFFSET_REG_DMA0CNT
+ .set REG_DMA0CNT_L, REG_BASE + OFFSET_REG_DMA0CNT_L
+ .set REG_DMA0CNT_H, REG_BASE + OFFSET_REG_DMA0CNT_H
+ .set REG_DMA1, REG_BASE + OFFSET_REG_DMA1
+ .set REG_DMA1SAD, REG_BASE + OFFSET_REG_DMA1SAD
+ .set REG_DMA1SAD_L, REG_BASE + OFFSET_REG_DMA1SAD_L
+ .set REG_DMA1SAD_H, REG_BASE + OFFSET_REG_DMA1SAD_H
+ .set REG_DMA1DAD, REG_BASE + OFFSET_REG_DMA1DAD
+ .set REG_DMA1DAD_L, REG_BASE + OFFSET_REG_DMA1DAD_L
+ .set REG_DMA1DAD_H, REG_BASE + OFFSET_REG_DMA1DAD_H
+ .set REG_DMA1CNT, REG_BASE + OFFSET_REG_DMA1CNT
+ .set REG_DMA1CNT_L, REG_BASE + OFFSET_REG_DMA1CNT_L
+ .set REG_DMA1CNT_H, REG_BASE + OFFSET_REG_DMA1CNT_H
+ .set REG_DMA2, REG_BASE + OFFSET_REG_DMA2
+ .set REG_DMA2SAD, REG_BASE + OFFSET_REG_DMA2SAD
+ .set REG_DMA2SAD_L, REG_BASE + OFFSET_REG_DMA2SAD_L
+ .set REG_DMA2SAD_H, REG_BASE + OFFSET_REG_DMA2SAD_H
+ .set REG_DMA2DAD, REG_BASE + OFFSET_REG_DMA2DAD
+ .set REG_DMA2DAD_L, REG_BASE + OFFSET_REG_DMA2DAD_L
+ .set REG_DMA2DAD_H, REG_BASE + OFFSET_REG_DMA2DAD_H
+ .set REG_DMA2CNT, REG_BASE + OFFSET_REG_DMA2CNT
+ .set REG_DMA2CNT_L, REG_BASE + OFFSET_REG_DMA2CNT_L
+ .set REG_DMA2CNT_H, REG_BASE + OFFSET_REG_DMA2CNT_H
+ .set REG_DMA3, REG_BASE + OFFSET_REG_DMA3
+ .set REG_DMA3SAD, REG_BASE + OFFSET_REG_DMA3SAD
+ .set REG_DMA3SAD_L, REG_BASE + OFFSET_REG_DMA3SAD_L
+ .set REG_DMA3SAD_H, REG_BASE + OFFSET_REG_DMA3SAD_H
+ .set REG_DMA3DAD, REG_BASE + OFFSET_REG_DMA3DAD
+ .set REG_DMA3DAD_L, REG_BASE + OFFSET_REG_DMA3DAD_L
+ .set REG_DMA3DAD_H, REG_BASE + OFFSET_REG_DMA3DAD_H
+ .set REG_DMA3CNT, REG_BASE + OFFSET_REG_DMA3CNT
+ .set REG_DMA3CNT_L, REG_BASE + OFFSET_REG_DMA3CNT_L
+ .set REG_DMA3CNT_H, REG_BASE + OFFSET_REG_DMA3CNT_H
+
+ .set REG_TM0CNT, REG_BASE + OFFSET_REG_TM0CNT
+ .set REG_TM0CNT_L, REG_BASE + OFFSET_REG_TM0CNT_L
+ .set REG_TM0CNT_H, REG_BASE + OFFSET_REG_TM0CNT_H
+ .set REG_TM1CNT, REG_BASE + OFFSET_REG_TM1CNT
+ .set REG_TM1CNT_L, REG_BASE + OFFSET_REG_TM1CNT_L
+ .set REG_TM1CNT_H, REG_BASE + OFFSET_REG_TM1CNT_H
+ .set REG_TM2CNT, REG_BASE + OFFSET_REG_TM2CNT
+ .set REG_TM2CNT_L, REG_BASE + OFFSET_REG_TM2CNT_L
+ .set REG_TM2CNT_H, REG_BASE + OFFSET_REG_TM2CNT_H
+ .set REG_TM3CNT, REG_BASE + OFFSET_REG_TM3CNT
+ .set REG_TM3CNT_L, REG_BASE + OFFSET_REG_TM3CNT_L
+ .set REG_TM3CNT_H, REG_BASE + OFFSET_REG_TM3CNT_H
+
+ .set REG_SIOCNT, REG_BASE + OFFSET_REG_SIOCNT
+ .set REG_SIODATA8, REG_BASE + OFFSET_REG_SIODATA8
+ .set REG_SIODATA32, REG_BASE + OFFSET_REG_SIODATA32
+ .set REG_SIOMLT_SEND, REG_BASE + OFFSET_REG_SIOMLT_SEND
+ .set REG_SIOMLT_RECV, REG_BASE + OFFSET_REG_SIOMLT_RECV
+ .set REG_SIOMULTI0, REG_BASE + OFFSET_REG_SIOMULTI0
+ .set REG_SIOMULTI1, REG_BASE + OFFSET_REG_SIOMULTI1
+ .set REG_SIOMULTI2, REG_BASE + OFFSET_REG_SIOMULTI2
+ .set REG_SIOMULTI3, REG_BASE + OFFSET_REG_SIOMULTI3
+
+ .set REG_KEYINPUT, REG_BASE + OFFSET_REG_KEYINPUT
+ .set REG_KEYCNT, REG_BASE + OFFSET_REG_KEYCNT
+
+ .set REG_RCNT, REG_BASE + OFFSET_REG_RCNT
+
+ .set REG_JOYCNT, REG_BASE + OFFSET_REG_JOYCNT
+ .set REG_JOYSTAT, REG_BASE + OFFSET_REG_JOYSTAT
+ .set REG_JOY_RECV, REG_BASE + OFFSET_REG_JOY_RECV
+ .set REG_JOY_RECV_L, REG_BASE + OFFSET_REG_JOY_RECV_L
+ .set REG_JOY_RECV_H, REG_BASE + OFFSET_REG_JOY_RECV_H
+ .set REG_JOY_TRANS, REG_BASE + OFFSET_REG_JOY_TRANS
+ .set REG_JOY_TRANS_L, REG_BASE + OFFSET_REG_JOY_TRANS_L
+ .set REG_JOY_TRANS_H, REG_BASE + OFFSET_REG_JOY_TRANS_H
+
+ .set REG_IME, REG_BASE + OFFSET_REG_IME
+ .set REG_IE, REG_BASE + OFFSET_REG_IE
+ .set REG_IF, REG_BASE + OFFSET_REG_IF
+
+ .set REG_WAITCNT, REG_BASE + OFFSET_REG_WAITCNT
+
+@ DMA register constants
+
+ .set DMA_DEST_INC, 0x0000
+ .set DMA_DEST_DEC, 0x0020
+ .set DMA_DEST_FIXED, 0x0040
+ .set DMA_DEST_RELOAD, 0x0060
+ .set DMA_SRC_INC, 0x0000
+ .set DMA_SRC_DEC, 0x0080
+ .set DMA_SRC_FIXED, 0x0100
+ .set DMA_REPEAT, 0x0200
+ .set DMA_16BIT, 0x0000
+ .set DMA_32BIT, 0x0400
+ .set DMA_DREQ_ON, 0x0800
+ .set DMA_START_NOW, 0x0000
+ .set DMA_START_VBLANK, 0x1000
+ .set DMA_START_HBLANK, 0x2000
+ .set DMA_START_SPECIAL, 0x3000
+ .set DMA_INTR_ENABLE, 0x4000
+ .set DMA_ENABLE, 0x8000
+
+@ OAM attribute constants
+
+ .set OAM_OBJ_NORMAL, 0x00000000
+ .set OAM_OBJ_BLEND, 0x00000400
+ .set OAM_OBJ_WINDOW, 0x00000800
+
+ .set OAM_AFFINE_NONE, 0x00000000
+ .set OAM_AFFINE_NORMAL_SIZE, 0x00000100
+ .set OAM_OBJ_DISABLED, 0x00000200
+ .set OAM_AFFINE_DOUBLE_SIZE, 0x00000300
+
+ .set OAM_MOSAIC_OFF, 0x00000000
+ .set OAM_MOSAIC_ON, 0x00001000
+
+ .set OAM_4BPP, 0x00000000
+ .set OAM_8BPP, 0x00002000
+
+ .set OAM_H_FLIP, 0x10000000
+ .set OAM_V_FLIP, 0x20000000
+
+ .set OAM_SQUARE, 0x00000000
+ .set OAM_H_RECTANGLE, 0x00004000
+ .set OAM_V_RECTANGLE, 0x00008000
+ .set OAM_SIZE_0, 0x00000000
+ .set OAM_SIZE_1, 0x40000000
+ .set OAM_SIZE_2, 0x80000000
+ .set OAM_SIZE_3, 0xc0000000
+
+ .set OAM_SIZE_8x8, OAM_SIZE_0 | OAM_SQUARE
+ .set OAM_SIZE_16x16, OAM_SIZE_1 | OAM_SQUARE
+ .set OAM_SIZE_32x32, OAM_SIZE_2 | OAM_SQUARE
+ .set OAM_SIZE_64x64, OAM_SIZE_3 | OAM_SQUARE
+
+ .set OAM_SIZE_16x8, OAM_SIZE_0 | OAM_H_RECTANGLE
+ .set OAM_SIZE_32x8, OAM_SIZE_1 | OAM_H_RECTANGLE
+ .set OAM_SIZE_32x16, OAM_SIZE_2 | OAM_H_RECTANGLE
+ .set OAM_SIZE_64x32, OAM_SIZE_3 | OAM_H_RECTANGLE
+
+ .set OAM_SIZE_8x16, OAM_SIZE_0 | OAM_V_RECTANGLE
+ .set OAM_SIZE_8x32, OAM_SIZE_1 | OAM_V_RECTANGLE
+ .set OAM_SIZE_16x32, OAM_SIZE_2 | OAM_V_RECTANGLE
+ .set OAM_SIZE_32x64, OAM_SIZE_3 | OAM_V_RECTANGLE
diff --git a/berry_fix/payload/graphics/debug_digits.png b/berry_fix/payload/graphics/debug_digits.png
new file mode 100644
index 000000000..edf0d36c9
--- /dev/null
+++ b/berry_fix/payload/graphics/debug_digits.png
Binary files differ
diff --git a/berry_fix/payload/graphics/msg_box.png b/berry_fix/payload/graphics/msg_box.png
new file mode 100644
index 000000000..00d1bbe37
--- /dev/null
+++ b/berry_fix/payload/graphics/msg_box.png
Binary files differ
diff --git a/berry_fix/payload/graphics/msg_box.tilemap b/berry_fix/payload/graphics/msg_box.tilemap
new file mode 100644
index 000000000..5b82401ba
--- /dev/null
+++ b/berry_fix/payload/graphics/msg_box.tilemap
Binary files differ
diff --git a/berry_fix/payload/include/constants/game_stat.h b/berry_fix/payload/include/constants/game_stat.h
new file mode 100644
index 000000000..47d703d85
--- /dev/null
+++ b/berry_fix/payload/include/constants/game_stat.h
@@ -0,0 +1,56 @@
+#ifndef GUARD_CONSTANTS_GAME_STAT_H
+#define GUARD_CONSTANTS_GAME_STAT_H
+
+#define GAME_STAT_SAVED_GAME 0
+#define GAME_STAT_FIRST_HOF_PLAY_TIME 1
+#define GAME_STAT_STARTED_TRENDS 2
+#define GAME_STAT_PLANTED_BERRIES 3
+#define GAME_STAT_TRADED_BIKES 4
+#define GAME_STAT_STEPS 5
+#define GAME_STAT_GOT_INTERVIEWED 6
+#define GAME_STAT_TOTAL_BATTLES 7
+#define GAME_STAT_WILD_BATTLES 8
+#define GAME_STAT_TRAINER_BATTLES 9
+#define GAME_STAT_ENTERED_HOF 10
+#define GAME_STAT_POKEMON_CAPTURES 11
+#define GAME_STAT_FISHING_CAPTURES 12
+#define GAME_STAT_HATCHED_EGGS 13
+#define GAME_STAT_EVOLVED_POKEMON 14
+#define GAME_STAT_USED_POKECENTER 15
+#define GAME_STAT_RESTED_AT_HOME 16
+#define GAME_STAT_ENTERED_SAFARI_ZONE 17
+#define GAME_STAT_USED_CUT 18
+#define GAME_STAT_USED_ROCK_SMASH 19
+#define GAME_STAT_MOVED_SECRET_BASE 20
+#define GAME_STAT_POKEMON_TRADES 21
+#define GAME_STAT_UNKNOWN_22 22
+#define GAME_STAT_LINK_BATTLE_WINS 23
+#define GAME_STAT_LINK_BATTLE_LOSSES 24
+#define GAME_STAT_LINK_BATTLE_DRAWS 25
+#define GAME_STAT_USED_SPLASH 26
+#define GAME_STAT_USED_STRUGGLE 27
+#define GAME_STAT_SLOT_JACKPOTS 28
+#define GAME_STAT_CONSECUTIVE_ROULETTE_WINS 29
+#define GAME_STAT_ENTERED_BATTLE_TOWER 30
+#define GAME_STAT_UNKNOWN_31 31
+#define GAME_STAT_BATTLE_TOWER_BEST_STREAK 32
+#define GAME_STAT_POKEBLOCKS 33
+#define GAME_STAT_POKEBLOCKS_WITH_FRIENDS 34
+#define GAME_STAT_WON_LINK_CONTEST 35
+#define GAME_STAT_ENTERED_CONTEST 36
+#define GAME_STAT_WON_CONTEST 37
+#define GAME_STAT_SHOPPED 38
+#define GAME_STAT_USED_ITEMFINDER 39
+#define GAME_STAT_GOT_RAINED_ON 40
+#define GAME_STAT_CHECKED_POKEDEX 41
+#define GAME_STAT_RECEIVED_RIBBONS 42
+#define GAME_STAT_JUMPED_DOWN_LEDGES 43
+#define GAME_STAT_WATCHED_TV 44
+#define GAME_STAT_CHECKED_CLOCK 45
+#define GAME_STAT_WON_POKEMON_LOTTERY 46
+#define GAME_STAT_USED_DAYCARE 47
+#define GAME_STAT_RODE_CABLE_CAR 48
+#define GAME_STAT_ENTERED_HOT_SPRINGS 49
+#define NUM_GAME_STATS 50
+
+#endif // GUARD_CONSTANTS_GAME_STAT_H
diff --git a/berry_fix/payload/include/constants/vars.h b/berry_fix/payload/include/constants/vars.h
new file mode 100644
index 000000000..4b40c1d8c
--- /dev/null
+++ b/berry_fix/payload/include/constants/vars.h
@@ -0,0 +1,196 @@
+#ifndef GUARD_CONSTANTS_VARS_H
+#define GUARD_CONSTANTS_VARS_H
+
+#define VAR_0x3F20 0x3F20
+
+#define VARS_START 0x4000
+
+// temporary vars
+// The first 0x10 vars are are temporary--they are cleared every time a map is loaded.
+#define VAR_TEMP_0 0x4000
+#define VAR_TEMP_1 0x4001
+#define VAR_TEMP_2 0x4002
+#define VAR_TEMP_3 0x4003
+#define VAR_TEMP_4 0x4004
+#define VAR_TEMP_5 0x4005
+#define VAR_TEMP_6 0x4006
+#define VAR_TEMP_7 0x4007
+#define VAR_TEMP_8 0x4008
+#define VAR_TEMP_9 0x4009
+#define VAR_TEMP_A 0x400A
+#define VAR_TEMP_B 0x400B
+#define VAR_TEMP_C 0x400C
+#define VAR_TEMP_D 0x400D
+#define VAR_TEMP_E 0x400E
+#define VAR_TEMP_F 0x400F
+
+// object gfx id vars
+// These 0x10 vars are used to dynamically control a event object's sprite.
+// For example, the rival's sprite id is dynamically set based on the player's gender.
+// See VarGetEventObjectGraphicsId().
+#define VAR_OBJ_GFX_ID_0 0x4010
+#define VAR_OBJ_GFX_ID_1 0x4011
+#define VAR_OBJ_GFX_ID_2 0x4012
+#define VAR_OBJ_GFX_ID_3 0x4013
+#define VAR_OBJ_GFX_ID_4 0x4014
+#define VAR_OBJ_GFX_ID_5 0x4015
+#define VAR_OBJ_GFX_ID_6 0x4016
+#define VAR_OBJ_GFX_ID_7 0x4017
+#define VAR_OBJ_GFX_ID_8 0x4018
+#define VAR_OBJ_GFX_ID_9 0x4019
+#define VAR_OBJ_GFX_ID_A 0x401A
+#define VAR_OBJ_GFX_ID_B 0x401B
+#define VAR_OBJ_GFX_ID_C 0x401C
+#define VAR_OBJ_GFX_ID_D 0x401D
+#define VAR_OBJ_GFX_ID_E 0x401E
+#define VAR_OBJ_GFX_ID_F 0x401F
+
+// general purpose vars
+#define VAR_RECYCLE_GOODS 0x4020
+#define VAR_REPEL_STEP_COUNT 0x4021
+#define VAR_ICE_STEP_COUNT 0x4022
+#define VAR_STARTER_MON 0x4023 // 0=Treecko, 1=Torchic, 2=Mudkip
+#define VAR_MIRAGE_RND_H 0x4024
+#define VAR_MIRAGE_RND_L 0x4025
+#define VAR_SECRET_BASE_MAP 0x4026
+#define VAR_CYCLING_ROAD_RECORD_COLLISIONS 0x4027
+#define VAR_CYCLING_ROAD_RECORD_TIME_L 0x4028
+#define VAR_CYCLING_ROAD_RECORD_TIME_H 0x4029
+#define VAR_HAPPINESS_STEP_COUNTER 0x402A
+#define VAR_POISON_STEP_COUNTER 0x402B
+#define VAR_RESET_RTC_ENABLE 0x402C
+#define VAR_ENIGMA_BERRY_AVAILABLE 0x402D
+
+#define VAR_DAYS 0x4040
+#define VAR_FANCLUB_UNKNOWN_1 0x4041 // TODO: document these two fanclub vars
+#define VAR_FANCLUB_UNKNOWN_2 0x4042
+#define VAR_DEPT_STORE_FLOOR 0x4043
+#define VAR_TRICK_HOUSE_ROOMS_COMPLETED 0x4044
+#define VAR_LOTTERY_PRIZE 0x4045
+#define VAR_NATIONAL_DEX 0x4046
+#define VAR_SHROOMISH_SIZE_RECORD 0x4047
+#define VAR_ASH_GATHER_COUNT 0x4048
+#define VAR_BIRCH_STATE 0x4049
+#define VAR_CRUISE_STEP_COUNT 0x404A
+#define VAR_LOTTERY_RND_L 0x404B
+#define VAR_LOTTERY_RND_H 0x404C
+
+#define VAR_BARBOACH_SIZE_RECORD 0x404F
+#define VAR_LITTLEROOT_STATE 0x4050
+#define VAR_ROUTE102_ACCESSIBLE 0x4051
+
+#define VAR_LAVARIDGE_RIVAL_STATE 0x4053
+#define VAR_CURRENT_SECRET_BASE 0x4054
+
+#define VAR_PETALBURG_STATE 0x4057
+#define VAR_SLATEPORT_STATE 0x4058
+
+#define VAR_RUSTBORO_STATE 0x405A
+
+#define VAR_SOOTOPOLIS_STATE 0x405E
+
+#define VAR_ROUTE101_STATE 0x4060
+
+#define VAR_ROUTE103_STATE 0x4062
+
+#define VAR_ROUTE110_STATE 0x4069
+
+#define VAR_ROUTE116_STATE 0x406F
+
+#define VAR_ROUTE118_STATE 0x4071
+#define VAR_ROUTE119_STATE 0x4072
+
+#define VAR_ROUTE121_STATE 0x4074
+#define VAR_ROUTE128_STATE 0x407B
+
+#define VAR_LITTLEROOT_HOUSES_STATE 0x4082 // TODO: needs more investigation
+
+#define VAR_BIRCH_LAB_STATE 0x4084
+#define VAR_PETALBURG_GYM_STATE 0x4085
+#define VAR_LINK_CONTEST_ROOM_STATE 0x4086
+#define VAR_CABLE_CLUB_STATE 0x4087
+#define VAR_CONTEST_LOCATION 0x4088
+#define VAR_MAP_SCENE_SIX_ISLAND_POKEMON_CENTER_1F 0x4089 // TODO: related to decorations
+#define VAR_CONTEST_PRIZE_PICKUP 0x408A
+
+#define VAR_LITTLEROOT_HOUSES_STATE_2 0x408C // TODO: needs more investigation
+#define VAR_LITTLEROOT_RIVAL_STATE 0x408D
+#define VAR_BOARD_BRINEY_BOAT_ROUTE104_STATE 0x408E
+#define VAR_DEVON_CORP_3F_STATE 0x408F
+#define VAR_BRINEY_HOUSE_STATE 0x4090
+
+#define VAR_LITTLEROOT_INTRO_STATE 0x4092
+#define VAR_MAUVILLE_GYM_STATE 0x4093
+#define VAR_LILYCOVE_MUSEUM_2F_STATE 0x4094
+#define VAR_LILYCOVE_FAN_CLUB_STATE 0x4095
+#define VAR_BRINEY_LOCATION 0x4096
+#define VAR_0x4097 0x4097 // TODO: related to creating new secret base
+#define VAR_PETALBURG_WOODS_STATE 0x4098
+#define VAR_LILYCOVE_CONTEST_LOBBY_STATE 0x4099
+#define VAR_RUSTURF_TUNNEL_STATE 0x409a
+#define VAR_CAVE_OF_ORIGIN_B4F_STATE 0x409B
+#define VAR_ELITE_4_STATE 0x409C
+
+#define VAR_SLATEPORT_HARBOR_STATE 0x40A0
+
+#define VAR_SEAFLOOR_CAVERN_STATE 0x40A2
+#define VAR_CABLE_CAR_STATION_STATE 0x40A3
+#define VAR_SAFARI_ZONE_STATE 0x40A4
+#define VAR_TRICK_HOUSE_ENTRANCE_STATE 0x40A5
+#define VAR_TRICK_HOUSE_ENTRANCE_STATE_2 0x40A6
+#define VAR_TRICK_HOUSE_ENTRANCE_STATE_3 0x40A7
+
+#define VAR_CYCLING_CHALLENGE_STATE 0x40A9
+#define VAR_SLATEPORT_MUSEUM_1F_STATE 0x40AA
+#define VAR_TRICK_HOUSE_PUZZLE_1_STATE 0x40AB
+#define VAR_TRICK_HOUSE_PUZZLE_2_STATE 0x40AC
+#define VAR_TRICK_HOUSE_PUZZLE_3_STATE 0x40AD
+#define VAR_TRICK_HOUSE_PUZZLE_4_STATE 0x40AE
+#define VAR_TRICK_HOUSE_PUZZLE_5_STATE 0x40AF
+#define VAR_TRICK_HOUSE_PUZZLE_6_STATE 0x40B0
+#define VAR_TRICK_HOUSE_PUZZLE_7_STATE 0x40B1
+#define VAR_TRICK_HOUSE_PUZZLE_8_STATE 0x40B2
+#define VAR_WEATHER_INSTITUTE_STATE 0x40B3
+#define VAR_PORTHOLE_STATE 0x40B4
+#define VAR_TRICK_HOUSE_STATE 0x40B5 // TODO: needs some further investigation
+#define VAR_TRICK_HOUSE_PUZZLE_7_STATE_2 0x40B6
+#define VAR_SLATEPORT_FAN_CLUB_STATE 0x40B7
+
+#define VAR_MT_PYRE_STATE 0x40B9
+#define VAR_NEW_MAUVILLE_STATE 0x40BA
+
+#define VAR_BRAVO_TRAINER_BATTLE_TOWER_ON 0x40BC
+#define VAR_JAGGED_PASS_VOLCANIC_ASH_WEATHER 0x40BD
+#define VAR_GLASS_WORKSHOP_STATE 0x40BE
+#define VAR_METEOR_FALLS_STATE 0x40BF
+#define VAR_GAME_CORNER_STATE 0x40C0
+#define VAR_TRICK_HOUSE_PRIZE_PICKUP 0x40C1
+#define VAR_PACIFIDLOG_TM_RECEIVED_DAY 0x40C2
+#define VAR_VICTORY_ROAD_1F_STATE 0x40C3
+#define VAR_FOSSIL_RESURRECTION_STATE 0x40C4
+#define VAR_WHICH_FOSSIL_REVIVED 0x40C5
+#define VAR_STEVENS_HOUSE_STATE 0x40C6
+#define VAR_OLDALE_STATE 0x40C7
+
+// special vars
+// They are commonly used as parameters to commands, or return values from commands.
+#define VAR_SPECIAL_0 0x8000
+#define VAR_SPECIAL_1 0x8001
+#define VAR_SPECIAL_2 0x8002
+#define VAR_SPECIAL_3 0x8003
+#define VAR_SPECIAL_4 0x8004
+#define VAR_SPECIAL_5 0x8005
+#define VAR_SPECIAL_6 0x8006
+#define VAR_SPECIAL_7 0x8007
+#define VAR_SPECIAL_8 0x8008
+#define VAR_SPECIAL_9 0x8009
+#define VAR_SPECIAL_A 0x800A
+#define VAR_SPECIAL_B 0x800B
+#define FACING 0x800C
+#define RESULT 0x800D
+#define ITEM_ID 0x800E
+#define LAST_TALKED 0x800F
+#define CONTEST_RANK 0x8010
+#define CONTEST_CATEGORY 0x8011
+
+#endif // GUARD_CONSTANTS_VARS_H
diff --git a/berry_fix/payload/include/flash.h b/berry_fix/payload/include/flash.h
new file mode 100644
index 000000000..7fc35896d
--- /dev/null
+++ b/berry_fix/payload/include/flash.h
@@ -0,0 +1,55 @@
+#ifndef GUARD_FLASH_H
+#define GUARD_FLASH_H
+
+#include "gba/gba.h"
+
+enum
+{
+ SECTOR_DAMAGED,
+ SECTOR_OK,
+ SECTOR_CHECK, // unused
+};
+
+enum MsgBoxUpdateMessage
+{
+ MSGBOX_WILL_NOW_UPDATE = 0,
+ MSGBOX_HAS_BEEN_UPDATED,
+ MSGBOX_UNABLE_TO_UPDATE,
+ MSGBOX_NO_NEED_TO_UPDATE,
+ MSGBOX_UPDATING
+};
+
+struct SaveSector
+{
+ u8 data[0xFF4];
+ u16 id;
+ u16 checksum;
+ u32 signature;
+ u32 counter;
+}; // size is 0x1000
+
+// headless save section?
+struct UnkSaveSection
+{
+ u8 data[0xFF4];
+ u32 signature;
+}; // size is 0xFF8
+
+#define eSaveSection ((struct SaveSector *)0x2020000)
+
+#define NUM_SECTORS_PER_SAVE_SLOT 14 // Number of sectors occupied by a save slot
+#define FILE_SIGNATURE 0x08012025
+
+#define SAVE_STATUS_EMPTY 0
+#define SAVE_STATUS_OK 1
+#define SAVE_STATUS_NO_FLASH 4
+#define SAVE_STATUS_ERROR 0xFF
+
+bool32 flash_maincb_ident_is_valid(void);
+bool8 flash_maincb_read_save(u32);
+void msg_load_gfx(void);
+void msg_display(enum MsgBoxUpdateMessage);
+bool32 flash_maincb_check_need_reset_pacifidlog_tm(void);
+bool32 flash_maincb_reset_pacifidlog_tm(void);
+
+#endif //GUARD_FLASH_H
diff --git a/berry_fix/payload/include/gba/defines.h b/berry_fix/payload/include/gba/defines.h
new file mode 100644
index 000000000..289518cf3
--- /dev/null
+++ b/berry_fix/payload/include/gba/defines.h
@@ -0,0 +1,87 @@
+#ifndef GUARD_GBA_DEFINES
+#define GUARD_GBA_DEFINES
+
+#include <stddef.h>
+
+#define TRUE 1
+#define FALSE 0
+
+#define BSS_DATA __attribute__((section(".bss")))
+#define IWRAM_DATA __attribute__((section("iwram_data")))
+#define EWRAM_DATA __attribute__((section("ewram_data")))
+#define UNUSED __attribute__((unused))
+#define NAKED __attribute__((naked))
+
+#define ALIGNED(n) __attribute__((aligned(n)))
+
+#define SOUND_INFO_PTR (*(struct SoundInfo **)0x3007FF0)
+#define INTR_CHECK (*(u16 *)0x3007FF8)
+#define INTR_VECTOR (*(void **)0x3007FFC)
+
+#define EWRAM_START 0x02000000
+#define EWRAM_END (EWRAM_START + 0x40000)
+#define IWRAM_START 0x03000000
+#define IWRAM_END (IWRAM_START + 0x8000)
+
+#define PLTT 0x5000000
+#define PLTT_SIZE 0x400
+
+#define BG_PLTT PLTT
+#define BG_PLTT_SIZE 0x200
+
+#define OBJ_PLTT (PLTT + 0x200)
+#define OBJ_PLTT_SIZE 0x200
+
+#define VRAM 0x6000000
+#define VRAM_SIZE 0x18000
+
+#define BG_VRAM VRAM
+#define BG_VRAM_SIZE 0x10000
+#define BG_CHAR_SIZE 0x4000
+#define BG_SCREEN_SIZE 0x800
+#define BG_CHAR_ADDR(n) (void *)(BG_VRAM + (0x4000 * (n)))
+#define BG_SCREEN_ADDR(n) (void *)(BG_VRAM + (0x800 * (n)))
+#define BG_TILE_ADDR(n) (void *)(BG_VRAM + (0x80 * (n)))
+
+#define BG_TILE_H_FLIP(n) (0x400 + (n))
+#define BG_TILE_V_FLIP(n) (0x800 + (n))
+
+// text-mode BG
+#define OBJ_VRAM0 (void *)(VRAM + 0x10000)
+#define OBJ_VRAM0_SIZE 0x8000
+
+// bitmap-mode BG
+#define OBJ_VRAM1 (void *)(VRAM + 0x14000)
+#define OBJ_VRAM1_SIZE 0x4000
+
+#define OAM 0x7000000
+#define OAM_SIZE 0x400
+
+#define ROM_HEADER_SIZE 0xC0
+
+#define DISPLAY_WIDTH 240
+#define DISPLAY_HEIGHT 160
+
+#define TILE_SIZE_4BPP 32
+#define TILE_SIZE_8BPP 64
+
+#define TILE_OFFSET_4BPP(n) ((n) * TILE_SIZE_4BPP)
+#define TILE_OFFSET_8BPP(n) ((n) * TILE_SIZE_8BPP)
+
+#define TOTAL_OBJ_TILE_COUNT 1024
+
+#define RGB(r, g, b) ((r) | ((g) << 5) | ((b) << 10))
+#define RGB2(r, g, b) (((b) << 10) | ((g) << 5) | (r))
+#define _RGB(r, g, b) ((((b) & 0x1F) << 10) + (((g) & 0x1F) << 5) + ((r) & 0x1F))
+
+#define RGB_BLACK RGB(0, 0, 0)
+#define RGB_WHITE RGB(31, 31, 31)
+#define RGB_RED RGB(31, 0, 0)
+#define RGB_GREEN RGB(0, 31, 0)
+#define RGB_BLUE RGB(0, 0, 31)
+#define RGB_YELLOW RGB(31, 31, 0)
+#define RGB_MAGENTA RGB(31, 0, 31)
+#define RGB_CYAN RGB(0, 31, 31)
+#define RGB_WHITEALPHA (RGB_WHITE | 0x8000)
+
+#endif // GUARD_GBA_DEFINES
diff --git a/berry_fix/payload/include/gba/flash_internal.h b/berry_fix/payload/include/gba/flash_internal.h
new file mode 100644
index 000000000..6fbec31f1
--- /dev/null
+++ b/berry_fix/payload/include/gba/flash_internal.h
@@ -0,0 +1,85 @@
+#ifndef GUARD_GBA_FLASH_INTERNAL_H
+#define GUARD_GBA_FLASH_INTERNAL_H
+
+#include "gba/gba.h"
+
+#define FLASH_BASE ((u8 *)0xE000000)
+
+#define FLASH_WRITE(addr, data) ((*(vu8 *)(FLASH_BASE + (addr))) = (data))
+
+#define FLASH_ROM_SIZE_1M 131072 // 1 megabit ROM
+
+#define SECTORS_PER_BANK 16
+
+struct FlashSector
+{
+ u32 size;
+ u8 shift;
+ u16 count;
+ u16 top;
+};
+
+struct FlashType {
+ u32 romSize;
+ struct FlashSector sector;
+ u16 wait[2]; // game pak bus read/write wait
+
+ // TODO: add support for anonymous unions/structs if possible
+ union {
+ struct {
+ u8 makerId;
+ u8 deviceId;
+ } separate;
+ u16 joined;
+ } ids;
+};
+
+struct FlashSetupInfo
+{
+ u16 (*programFlashByte)(u16, u32, u8);
+ u16 (*programFlashSector)(u16, void *);
+ u16 (*eraseFlashChip)(void);
+ u16 (*eraseFlashSector)(u16);
+ u16 (*WaitForFlashWrite)(u8, u8 *, u8);
+ const u16 *maxTime;
+ struct FlashType type;
+};
+
+extern u16 gFlashNumRemainingBytes;
+
+extern u16 (*ProgramFlashByte)(u16, u32, u8);
+extern u16 (*ProgramFlashSector)(u16, void *);
+extern u16 (*EraseFlashChip)(void);
+extern u16 (*EraseFlashSector)(u16);
+extern u16 (*WaitForFlashWrite)(u8, u8 *, u8);
+extern const u16 *gFlashMaxTime;
+extern const struct FlashType *gFlash;
+
+extern u8 (*PollFlashStatus)(u8 *);
+extern u8 gFlashTimeoutFlag;
+
+extern const struct FlashSetupInfo MX29L010;
+extern const struct FlashSetupInfo LE26FV10N1TS;
+extern const struct FlashSetupInfo DefaultFlash;
+
+void SwitchFlashBank(u8 bankNum);
+u16 ReadFlashId(void);
+void StartFlashTimer(u8 phase);
+void SetReadFlash1(u16 *dest);
+void StopFlashTimer(void);
+u16 SetFlashTimerIntr(u8 timerNum, void (**intrFunc)(void));
+u32 ProgramFlashSectorAndVerify(u16 sectorNum, u8 *src);
+void ReadFlash(u16 sectorNum, u32 offset, void *dest, u32 size);
+u32 ProgramFlashSectorAndVerifyNBytes(u16 sectorNum, void *dataSrc, u32 n);
+
+u16 WaitForFlashWrite_Common(u8 phase, u8 *addr, u8 lastData);
+
+u16 EraseFlashChip_MX(void);
+u16 EraseFlashSector_MX(u16 sectorNum);
+u16 ProgramFlashByte_MX(u16 sectorNum, u32 offset, u8 data);
+u16 ProgramFlashSector_MX(u16 sectorNum, void *src);
+
+// agb_flash_1m
+u32 IdentifyFlash(void);
+
+#endif // GUARD_GBA_FLASH_INTERNAL_H
diff --git a/berry_fix/payload/include/gba/gba.h b/berry_fix/payload/include/gba/gba.h
new file mode 100644
index 000000000..349344031
--- /dev/null
+++ b/berry_fix/payload/include/gba/gba.h
@@ -0,0 +1,12 @@
+#ifndef GUARD_GBA_GBA_H
+#define GUARD_GBA_GBA_H
+
+#include "gba/defines.h"
+#include "gba/io_reg.h"
+#include "gba/types.h"
+#include "gba/multiboot.h"
+#include "gba/syscall.h"
+#include "gba/macro.h"
+#include "gba/isagbprint.h"
+
+#endif // GUARD_GBA_GBA_H
diff --git a/berry_fix/payload/include/gba/io_reg.h b/berry_fix/payload/include/gba/io_reg.h
new file mode 100644
index 000000000..df79b084d
--- /dev/null
+++ b/berry_fix/payload/include/gba/io_reg.h
@@ -0,0 +1,770 @@
+#ifndef GUARD_GBA_IO_REG_H
+#define GUARD_GBA_IO_REG_H
+
+#define REG_BASE 0x4000000 // I/O register base address
+
+// I/O register offsets
+
+#define REG_OFFSET_DISPCNT 0x0
+#define REG_OFFSET_DISPSTAT 0x4
+#define REG_OFFSET_VCOUNT 0x6
+#define REG_OFFSET_BG0CNT 0x8
+#define REG_OFFSET_BG1CNT 0xa
+#define REG_OFFSET_BG2CNT 0xc
+#define REG_OFFSET_BG3CNT 0xe
+#define REG_OFFSET_BG0HOFS 0x10
+#define REG_OFFSET_BG0VOFS 0x12
+#define REG_OFFSET_BG1HOFS 0x14
+#define REG_OFFSET_BG1VOFS 0x16
+#define REG_OFFSET_BG2HOFS 0x18
+#define REG_OFFSET_BG2VOFS 0x1a
+#define REG_OFFSET_BG3HOFS 0x1c
+#define REG_OFFSET_BG3VOFS 0x1e
+#define REG_OFFSET_BG2PA 0x20
+#define REG_OFFSET_BG2PB 0x22
+#define REG_OFFSET_BG2PC 0x24
+#define REG_OFFSET_BG2PD 0x26
+#define REG_OFFSET_BG2X 0x28
+#define REG_OFFSET_BG2X_L 0x28
+#define REG_OFFSET_BG2X_H 0x2a
+#define REG_OFFSET_BG2Y 0x2c
+#define REG_OFFSET_BG2Y_L 0x2c
+#define REG_OFFSET_BG2Y_H 0x2e
+#define REG_OFFSET_BG3PA 0x30
+#define REG_OFFSET_BG3PB 0x32
+#define REG_OFFSET_BG3PC 0x34
+#define REG_OFFSET_BG3PD 0x36
+#define REG_OFFSET_BG3X 0x38
+#define REG_OFFSET_BG3X_L 0x38
+#define REG_OFFSET_BG3X_H 0x3a
+#define REG_OFFSET_BG3Y 0x3c
+#define REG_OFFSET_BG3Y_L 0x3c
+#define REG_OFFSET_BG3Y_H 0x3e
+#define REG_OFFSET_WIN0H 0x40
+#define REG_OFFSET_WIN1H 0x42
+#define REG_OFFSET_WIN0V 0x44
+#define REG_OFFSET_WIN1V 0x46
+#define REG_OFFSET_WININ 0x48
+#define REG_OFFSET_WINOUT 0x4a
+#define REG_OFFSET_MOSAIC 0x4c
+#define REG_OFFSET_BLDCNT 0x50
+#define REG_OFFSET_BLDALPHA 0x52
+#define REG_OFFSET_BLDY 0x54
+
+#define REG_OFFSET_SOUND1CNT_L 0x60
+#define REG_OFFSET_NR10 0x60
+#define REG_OFFSET_SOUND1CNT_H 0x62
+#define REG_OFFSET_NR11 0x62
+#define REG_OFFSET_NR12 0x63
+#define REG_OFFSET_SOUND1CNT_X 0x64
+#define REG_OFFSET_NR13 0x64
+#define REG_OFFSET_NR14 0x65
+#define REG_OFFSET_SOUND2CNT_L 0x68
+#define REG_OFFSET_NR21 0x68
+#define REG_OFFSET_NR22 0x69
+#define REG_OFFSET_SOUND2CNT_H 0x6c
+#define REG_OFFSET_NR23 0x6c
+#define REG_OFFSET_NR24 0x6d
+#define REG_OFFSET_SOUND3CNT_L 0x70
+#define REG_OFFSET_NR30 0x70
+#define REG_OFFSET_SOUND3CNT_H 0x72
+#define REG_OFFSET_NR31 0x72
+#define REG_OFFSET_NR32 0x73
+#define REG_OFFSET_SOUND3CNT_X 0x74
+#define REG_OFFSET_NR33 0x74
+#define REG_OFFSET_NR34 0x75
+#define REG_OFFSET_SOUND4CNT_L 0x78
+#define REG_OFFSET_NR41 0x78
+#define REG_OFFSET_NR42 0x79
+#define REG_OFFSET_SOUND4CNT_H 0x7c
+#define REG_OFFSET_NR43 0x7c
+#define REG_OFFSET_NR44 0x7d
+#define REG_OFFSET_SOUNDCNT_L 0x80
+#define REG_OFFSET_NR50 0x80
+#define REG_OFFSET_NR51 0x81
+#define REG_OFFSET_SOUNDCNT_H 0x82
+#define REG_OFFSET_SOUNDCNT_X 0x84
+#define REG_OFFSET_NR52 0x84
+#define REG_OFFSET_SOUNDBIAS 0x88
+#define REG_OFFSET_SOUNDBIAS_L 0x88
+#define REG_OFFSET_SOUNDBIAS_H 0x89
+#define REG_OFFSET_WAVE_RAM0 0x90
+#define REG_OFFSET_WAVE_RAM1 0x94
+#define REG_OFFSET_WAVE_RAM2 0x98
+#define REG_OFFSET_WAVE_RAM3 0x9c
+#define REG_OFFSET_FIFO_A 0xa0
+#define REG_OFFSET_FIFO_B 0xa4
+
+#define REG_OFFSET_DMA0 0xb0
+#define REG_OFFSET_DMA0SAD 0xb0
+#define REG_OFFSET_DMA0SAD_L 0xb0
+#define REG_OFFSET_DMA0SAD_H 0xb2
+#define REG_OFFSET_DMA0DAD 0xb4
+#define REG_OFFSET_DMA0DAD_L 0xb4
+#define REG_OFFSET_DMA0DAD_H 0xb6
+#define REG_OFFSET_DMA0CNT 0xb8
+#define REG_OFFSET_DMA0CNT_L 0xb8
+#define REG_OFFSET_DMA0CNT_H 0xba
+#define REG_OFFSET_DMA1 0xbc
+#define REG_OFFSET_DMA1SAD 0xbc
+#define REG_OFFSET_DMA1SAD_L 0xbc
+#define REG_OFFSET_DMA1SAD_H 0xbe
+#define REG_OFFSET_DMA1DAD 0xc0
+#define REG_OFFSET_DMA1DAD_L 0xc0
+#define REG_OFFSET_DMA1DAD_H 0xc2
+#define REG_OFFSET_DMA1CNT 0xc4
+#define REG_OFFSET_DMA1CNT_L 0xc4
+#define REG_OFFSET_DMA1CNT_H 0xc6
+#define REG_OFFSET_DMA2 0xc8
+#define REG_OFFSET_DMA2SAD 0xc8
+#define REG_OFFSET_DMA2SAD_L 0xc8
+#define REG_OFFSET_DMA2SAD_H 0xca
+#define REG_OFFSET_DMA2DAD 0xcc
+#define REG_OFFSET_DMA2DAD_L 0xcc
+#define REG_OFFSET_DMA2DAD_H 0xce
+#define REG_OFFSET_DMA2CNT 0xd0
+#define REG_OFFSET_DMA2CNT_L 0xd0
+#define REG_OFFSET_DMA2CNT_H 0xd2
+#define REG_OFFSET_DMA3 0xd4
+#define REG_OFFSET_DMA3SAD 0xd4
+#define REG_OFFSET_DMA3SAD_L 0xd4
+#define REG_OFFSET_DMA3SAD_H 0xd6
+#define REG_OFFSET_DMA3DAD 0xd8
+#define REG_OFFSET_DMA3DAD_L 0xd8
+#define REG_OFFSET_DMA3DAD_H 0xda
+#define REG_OFFSET_DMA3CNT 0xdc
+#define REG_OFFSET_DMA3CNT_L 0xdc
+#define REG_OFFSET_DMA3CNT_H 0xde
+
+#define REG_OFFSET_TMCNT 0x100
+#define REG_OFFSET_TMCNT_L 0x100
+#define REG_OFFSET_TMCNT_H 0x102
+#define REG_OFFSET_TM0CNT 0x100
+#define REG_OFFSET_TM0CNT_L 0x100
+#define REG_OFFSET_TM0CNT_H 0x102
+#define REG_OFFSET_TM1CNT 0x104
+#define REG_OFFSET_TM1CNT_L 0x104
+#define REG_OFFSET_TM1CNT_H 0x106
+#define REG_OFFSET_TM2CNT 0x108
+#define REG_OFFSET_TM2CNT_L 0x108
+#define REG_OFFSET_TM2CNT_H 0x10a
+#define REG_OFFSET_TM3CNT 0x10c
+#define REG_OFFSET_TM3CNT_L 0x10c
+#define REG_OFFSET_TM3CNT_H 0x10e
+
+#define REG_OFFSET_SIOCNT 0x128
+#define REG_OFFSET_SIODATA8 0x12a
+#define REG_OFFSET_SIODATA32 0x120
+#define REG_OFFSET_SIOMLT_SEND 0x12a
+#define REG_OFFSET_SIOMLT_RECV 0x120
+#define REG_OFFSET_SIOMULTI0 0x120
+#define REG_OFFSET_SIOMULTI1 0x122
+#define REG_OFFSET_SIOMULTI2 0x124
+#define REG_OFFSET_SIOMULTI3 0x126
+
+#define REG_OFFSET_KEYINPUT 0x130
+#define REG_OFFSET_KEYCNT 0x132
+
+#define REG_OFFSET_RCNT 0x134
+
+#define REG_OFFSET_JOYCNT 0x140
+#define REG_OFFSET_JOYSTAT 0x158
+#define REG_OFFSET_JOY_RECV 0x150
+#define REG_OFFSET_JOY_RECV_L 0x150
+#define REG_OFFSET_JOY_RECV_H 0x152
+#define REG_OFFSET_JOY_TRANS 0x154
+#define REG_OFFSET_JOY_TRANS_L 0x154
+#define REG_OFFSET_JOY_TRANS_H 0x156
+
+#define REG_OFFSET_IME 0x208
+#define REG_OFFSET_IE 0x200
+#define REG_OFFSET_IF 0x202
+
+#define REG_OFFSET_WAITCNT 0x204
+
+// I/O register addresses
+
+#define REG_ADDR_DISPCNT (REG_BASE + REG_OFFSET_DISPCNT)
+#define REG_ADDR_DISPSTAT (REG_BASE + REG_OFFSET_DISPSTAT)
+#define REG_ADDR_VCOUNT (REG_BASE + REG_OFFSET_VCOUNT)
+#define REG_ADDR_BG0CNT (REG_BASE + REG_OFFSET_BG0CNT)
+#define REG_ADDR_BG1CNT (REG_BASE + REG_OFFSET_BG1CNT)
+#define REG_ADDR_BG2CNT (REG_BASE + REG_OFFSET_BG2CNT)
+#define REG_ADDR_BG3CNT (REG_BASE + REG_OFFSET_BG3CNT)
+#define REG_ADDR_BG0HOFS (REG_BASE + REG_OFFSET_BG0HOFS)
+#define REG_ADDR_BG0VOFS (REG_BASE + REG_OFFSET_BG0VOFS)
+#define REG_ADDR_BG1HOFS (REG_BASE + REG_OFFSET_BG1HOFS)
+#define REG_ADDR_BG1VOFS (REG_BASE + REG_OFFSET_BG1VOFS)
+#define REG_ADDR_BG2HOFS (REG_BASE + REG_OFFSET_BG2HOFS)
+#define REG_ADDR_BG2VOFS (REG_BASE + REG_OFFSET_BG2VOFS)
+#define REG_ADDR_BG3HOFS (REG_BASE + REG_OFFSET_BG3HOFS)
+#define REG_ADDR_BG3VOFS (REG_BASE + REG_OFFSET_BG3VOFS)
+#define REG_ADDR_BG2PA (REG_BASE + REG_OFFSET_BG2PA)
+#define REG_ADDR_BG2PB (REG_BASE + REG_OFFSET_BG2PB)
+#define REG_ADDR_BG2PC (REG_BASE + REG_OFFSET_BG2PC)
+#define REG_ADDR_BG2PD (REG_BASE + REG_OFFSET_BG2PD)
+#define REG_ADDR_BG2X (REG_BASE + REG_OFFSET_BG2X)
+#define REG_ADDR_BG2X_L (REG_BASE + REG_OFFSET_BG2X_L)
+#define REG_ADDR_BG2X_H (REG_BASE + REG_OFFSET_BG2X_H)
+#define REG_ADDR_BG2Y (REG_BASE + REG_OFFSET_BG2Y)
+#define REG_ADDR_BG2Y_L (REG_BASE + REG_OFFSET_BG2Y_L)
+#define REG_ADDR_BG2Y_H (REG_BASE + REG_OFFSET_BG2Y_H)
+#define REG_ADDR_BG3PA (REG_BASE + REG_OFFSET_BG3PA)
+#define REG_ADDR_BG3PB (REG_BASE + REG_OFFSET_BG3PB)
+#define REG_ADDR_BG3PC (REG_BASE + REG_OFFSET_BG3PC)
+#define REG_ADDR_BG3PD (REG_BASE + REG_OFFSET_BG3PD)
+#define REG_ADDR_BG3X (REG_BASE + REG_OFFSET_BG3X)
+#define REG_ADDR_BG3X_L (REG_BASE + REG_OFFSET_BG3X_L)
+#define REG_ADDR_BG3X_H (REG_BASE + REG_OFFSET_BG3X_H)
+#define REG_ADDR_BG3Y (REG_BASE + REG_OFFSET_BG3Y)
+#define REG_ADDR_BG3Y_L (REG_BASE + REG_OFFSET_BG3Y_L)
+#define REG_ADDR_BG3Y_H (REG_BASE + REG_OFFSET_BG3Y_H)
+#define REG_ADDR_WIN0H (REG_BASE + REG_OFFSET_WIN0H)
+#define REG_ADDR_WIN1H (REG_BASE + REG_OFFSET_WIN1H)
+#define REG_ADDR_WIN0V (REG_BASE + REG_OFFSET_WIN0V)
+#define REG_ADDR_WIN1V (REG_BASE + REG_OFFSET_WIN1V)
+#define REG_ADDR_WININ (REG_BASE + REG_OFFSET_WININ)
+#define REG_ADDR_WINOUT (REG_BASE + REG_OFFSET_WINOUT)
+#define REG_ADDR_MOSAIC (REG_BASE + REG_OFFSET_MOSAIC)
+#define REG_ADDR_BLDCNT (REG_BASE + REG_OFFSET_BLDCNT)
+#define REG_ADDR_BLDALPHA (REG_BASE + REG_OFFSET_BLDALPHA)
+#define REG_ADDR_BLDY (REG_BASE + REG_OFFSET_BLDY)
+
+#define REG_ADDR_SOUND1CNT_L (REG_BASE + REG_OFFSET_SOUND1CNT_L)
+#define REG_ADDR_NR10 (REG_BASE + REG_OFFSET_NR10)
+#define REG_ADDR_SOUND1CNT_H (REG_BASE + REG_OFFSET_SOUND1CNT_H)
+#define REG_ADDR_NR11 (REG_BASE + REG_OFFSET_NR11)
+#define REG_ADDR_NR12 (REG_BASE + REG_OFFSET_NR12)
+#define REG_ADDR_SOUND1CNT_X (REG_BASE + REG_OFFSET_SOUND1CNT_X)
+#define REG_ADDR_NR13 (REG_BASE + REG_OFFSET_NR13)
+#define REG_ADDR_NR14 (REG_BASE + REG_OFFSET_NR14)
+#define REG_ADDR_SOUND2CNT_L (REG_BASE + REG_OFFSET_SOUND2CNT_L)
+#define REG_ADDR_NR21 (REG_BASE + REG_OFFSET_NR21)
+#define REG_ADDR_NR22 (REG_BASE + REG_OFFSET_NR22)
+#define REG_ADDR_SOUND2CNT_H (REG_BASE + REG_OFFSET_SOUND2CNT_H)
+#define REG_ADDR_NR23 (REG_BASE + REG_OFFSET_NR23)
+#define REG_ADDR_NR24 (REG_BASE + REG_OFFSET_NR24)
+#define REG_ADDR_SOUND3CNT_L (REG_BASE + REG_OFFSET_SOUND3CNT_L)
+#define REG_ADDR_NR30 (REG_BASE + REG_OFFSET_NR30)
+#define REG_ADDR_SOUND3CNT_H (REG_BASE + REG_OFFSET_SOUND3CNT_H)
+#define REG_ADDR_NR31 (REG_BASE + REG_OFFSET_NR31)
+#define REG_ADDR_NR32 (REG_BASE + REG_OFFSET_NR32)
+#define REG_ADDR_SOUND3CNT_X (REG_BASE + REG_OFFSET_SOUND3CNT_X)
+#define REG_ADDR_NR33 (REG_BASE + REG_OFFSET_NR33)
+#define REG_ADDR_NR34 (REG_BASE + REG_OFFSET_NR34)
+#define REG_ADDR_SOUND4CNT_L (REG_BASE + REG_OFFSET_SOUND4CNT_L)
+#define REG_ADDR_NR41 (REG_BASE + REG_OFFSET_NR41)
+#define REG_ADDR_NR42 (REG_BASE + REG_OFFSET_NR42)
+#define REG_ADDR_SOUND4CNT_H (REG_BASE + REG_OFFSET_SOUND4CNT_H)
+#define REG_ADDR_NR43 (REG_BASE + REG_OFFSET_NR43)
+#define REG_ADDR_NR44 (REG_BASE + REG_OFFSET_NR44)
+#define REG_ADDR_SOUNDCNT_L (REG_BASE + REG_OFFSET_SOUNDCNT_L)
+#define REG_ADDR_NR50 (REG_BASE + REG_OFFSET_NR50)
+#define REG_ADDR_NR51 (REG_BASE + REG_OFFSET_NR51)
+#define REG_ADDR_SOUNDCNT_H (REG_BASE + REG_OFFSET_SOUNDCNT_H)
+#define REG_ADDR_SOUNDCNT_X (REG_BASE + REG_OFFSET_SOUNDCNT_X)
+#define REG_ADDR_NR52 (REG_BASE + REG_OFFSET_NR52)
+#define REG_ADDR_SOUNDBIAS (REG_BASE + REG_OFFSET_SOUNDBIAS)
+#define REG_ADDR_SOUNDBIAS_L (REG_BASE + REG_OFFSET_SOUNDBIAS_L)
+#define REG_ADDR_SOUNDBIAS_H (REG_BASE + REG_OFFSET_SOUNDBIAS_H)
+#define REG_ADDR_WAVE_RAM0 (REG_BASE + REG_OFFSET_WAVE_RAM0)
+#define REG_ADDR_WAVE_RAM1 (REG_BASE + REG_OFFSET_WAVE_RAM1)
+#define REG_ADDR_WAVE_RAM2 (REG_BASE + REG_OFFSET_WAVE_RAM2)
+#define REG_ADDR_WAVE_RAM3 (REG_BASE + REG_OFFSET_WAVE_RAM3)
+#define REG_ADDR_FIFO_A (REG_BASE + REG_OFFSET_FIFO_A)
+#define REG_ADDR_FIFO_B (REG_BASE + REG_OFFSET_FIFO_B)
+
+#define REG_ADDR_DMA0 (REG_BASE + REG_OFFSET_DMA0)
+#define REG_ADDR_DMA0SAD (REG_BASE + REG_OFFSET_DMA0SAD)
+#define REG_ADDR_DMA0DAD (REG_BASE + REG_OFFSET_DMA0DAD)
+#define REG_ADDR_DMA0CNT (REG_BASE + REG_OFFSET_DMA0CNT)
+#define REG_ADDR_DMA0CNT_L (REG_BASE + REG_OFFSET_DMA0CNT_L)
+#define REG_ADDR_DMA0CNT_H (REG_BASE + REG_OFFSET_DMA0CNT_H)
+#define REG_ADDR_DMA1 (REG_BASE + REG_OFFSET_DMA1)
+#define REG_ADDR_DMA1SAD (REG_BASE + REG_OFFSET_DMA1SAD)
+#define REG_ADDR_DMA1DAD (REG_BASE + REG_OFFSET_DMA1DAD)
+#define REG_ADDR_DMA1CNT (REG_BASE + REG_OFFSET_DMA1CNT)
+#define REG_ADDR_DMA1CNT_L (REG_BASE + REG_OFFSET_DMA1CNT_L)
+#define REG_ADDR_DMA1CNT_H (REG_BASE + REG_OFFSET_DMA1CNT_H)
+#define REG_ADDR_DMA2 (REG_BASE + REG_OFFSET_DMA2)
+#define REG_ADDR_DMA2SAD (REG_BASE + REG_OFFSET_DMA2SAD)
+#define REG_ADDR_DMA2DAD (REG_BASE + REG_OFFSET_DMA2DAD)
+#define REG_ADDR_DMA2CNT (REG_BASE + REG_OFFSET_DMA2CNT)
+#define REG_ADDR_DMA2CNT_L (REG_BASE + REG_OFFSET_DMA2CNT_L)
+#define REG_ADDR_DMA2CNT_H (REG_BASE + REG_OFFSET_DMA2CNT_H)
+#define REG_ADDR_DMA3 (REG_BASE + REG_OFFSET_DMA3)
+#define REG_ADDR_DMA3SAD (REG_BASE + REG_OFFSET_DMA3SAD)
+#define REG_ADDR_DMA3DAD (REG_BASE + REG_OFFSET_DMA3DAD)
+#define REG_ADDR_DMA3CNT (REG_BASE + REG_OFFSET_DMA3CNT)
+#define REG_ADDR_DMA3CNT_L (REG_BASE + REG_OFFSET_DMA3CNT_L)
+#define REG_ADDR_DMA3CNT_H (REG_BASE + REG_OFFSET_DMA3CNT_H)
+
+#define REG_ADDR_TMCNT (REG_BASE + REG_OFFSET_TMCNT)
+#define REG_ADDR_TMCNT_L (REG_BASE + REG_OFFSET_TMCNT_L)
+#define REG_ADDR_TMCNT_H (REG_BASE + REG_OFFSET_TMCNT_H)
+#define REG_ADDR_TM0CNT (REG_BASE + REG_OFFSET_TM0CNT)
+#define REG_ADDR_TM0CNT_L (REG_BASE + REG_OFFSET_TM0CNT_L)
+#define REG_ADDR_TM0CNT_H (REG_BASE + REG_OFFSET_TM0CNT_H)
+#define REG_ADDR_TM1CNT (REG_BASE + REG_OFFSET_TM1CNT)
+#define REG_ADDR_TM1CNT_L (REG_BASE + REG_OFFSET_TM1CNT_L)
+#define REG_ADDR_TM1CNT_H (REG_BASE + REG_OFFSET_TM1CNT_H)
+#define REG_ADDR_TM2CNT (REG_BASE + REG_OFFSET_TM2CNT)
+#define REG_ADDR_TM2CNT_L (REG_BASE + REG_OFFSET_TM2CNT_L)
+#define REG_ADDR_TM2CNT_H (REG_BASE + REG_OFFSET_TM2CNT_H)
+#define REG_ADDR_TM3CNT (REG_BASE + REG_OFFSET_TM3CNT)
+#define REG_ADDR_TM3CNT_L (REG_BASE + REG_OFFSET_TM3CNT_L)
+#define REG_ADDR_TM3CNT_H (REG_BASE + REG_OFFSET_TM3CNT_H)
+
+#define REG_ADDR_SIOCNT (REG_BASE + REG_OFFSET_SIOCNT)
+#define REG_ADDR_SIODATA8 (REG_BASE + REG_OFFSET_SIODATA8)
+#define REG_ADDR_SIODATA32 (REG_BASE + REG_OFFSET_SIODATA32)
+#define REG_ADDR_SIOMLT_SEND (REG_BASE + REG_OFFSET_SIOMLT_SEND)
+#define REG_ADDR_SIOMLT_RECV (REG_BASE + REG_OFFSET_SIOMLT_RECV)
+#define REG_ADDR_SIOMULTI0 (REG_BASE + REG_OFFSET_SIOMULTI0)
+#define REG_ADDR_SIOMULTI1 (REG_BASE + REG_OFFSET_SIOMULTI1)
+#define REG_ADDR_SIOMULTI2 (REG_BASE + REG_OFFSET_SIOMULTI2)
+#define REG_ADDR_SIOMULTI3 (REG_BASE + REG_OFFSET_SIOMULTI3)
+
+#define REG_ADDR_KEYINPUT (REG_BASE + REG_OFFSET_KEYINPUT)
+#define REG_ADDR_KEYCNT (REG_BASE + REG_OFFSET_KEYCNT)
+
+#define REG_ADDR_RCNT (REG_BASE + REG_OFFSET_RCNT)
+
+#define REG_ADDR_JOYCNT (REG_BASE + REG_OFFSET_JOYCNT)
+#define REG_ADDR_JOYSTAT (REG_BASE + REG_OFFSET_JOYSTAT)
+#define REG_ADDR_JOY_RECV (REG_BASE + REG_OFFSET_JOY_RECV)
+#define REG_ADDR_JOY_RECV_L (REG_BASE + REG_OFFSET_JOY_RECV_L)
+#define REG_ADDR_JOY_RECV_H (REG_BASE + REG_OFFSET_JOY_RECV_H)
+#define REG_ADDR_JOY_TRANS (REG_BASE + REG_OFFSET_JOY_TRANS)
+#define REG_ADDR_JOY_TRANS_L (REG_BASE + REG_OFFSET_JOY_TRANS_L)
+#define REG_ADDR_JOY_TRANS_H (REG_BASE + REG_OFFSET_JOY_TRANS_H)
+
+#define REG_ADDR_IME (REG_BASE + REG_OFFSET_IME)
+#define REG_ADDR_IE (REG_BASE + REG_OFFSET_IE)
+#define REG_ADDR_IF (REG_BASE + REG_OFFSET_IF)
+
+#define REG_ADDR_WAITCNT (REG_BASE + REG_OFFSET_WAITCNT)
+
+// I/O registers
+
+#define REG_DISPCNT (*(vu16 *)REG_ADDR_DISPCNT)
+#define REG_DISPSTAT (*(vu16 *)REG_ADDR_DISPSTAT)
+#define REG_VCOUNT (*(vu16 *)REG_ADDR_VCOUNT)
+#define REG_BG0CNT (*(vu16 *)REG_ADDR_BG0CNT)
+#define REG_BG1CNT (*(vu16 *)REG_ADDR_BG1CNT)
+#define REG_BG2CNT (*(vu16 *)REG_ADDR_BG2CNT)
+#define REG_BG3CNT (*(vu16 *)REG_ADDR_BG3CNT)
+#define REG_BG0HOFS (*(vu16 *)REG_ADDR_BG0HOFS)
+#define REG_BG0VOFS (*(vu16 *)REG_ADDR_BG0VOFS)
+#define REG_BG1HOFS (*(vu16 *)REG_ADDR_BG1HOFS)
+#define REG_BG1VOFS (*(vu16 *)REG_ADDR_BG1VOFS)
+#define REG_BG2HOFS (*(vu16 *)REG_ADDR_BG2HOFS)
+#define REG_BG2VOFS (*(vu16 *)REG_ADDR_BG2VOFS)
+#define REG_BG3HOFS (*(vu16 *)REG_ADDR_BG3HOFS)
+#define REG_BG3VOFS (*(vu16 *)REG_ADDR_BG3VOFS)
+#define REG_BG2PA (*(vu16 *)REG_ADDR_BG2PA)
+#define REG_BG2PB (*(vu16 *)REG_ADDR_BG2PB)
+#define REG_BG2PC (*(vu16 *)REG_ADDR_BG2PC)
+#define REG_BG2PD (*(vu16 *)REG_ADDR_BG2PD)
+#define REG_BG2X (*(vu32 *)REG_ADDR_BG2X)
+#define REG_BG2X_L (*(vu16 *)REG_ADDR_BG2X_L)
+#define REG_BG2X_H (*(vu16 *)REG_ADDR_BG2X_H)
+#define REG_BG2Y (*(vu32 *)REG_ADDR_BG2Y)
+#define REG_BG2Y_L (*(vu16 *)REG_ADDR_BG2Y_L)
+#define REG_BG2Y_H (*(vu16 *)REG_ADDR_BG2Y_H)
+#define REG_BG3PA (*(vu16 *)REG_ADDR_BG3PA)
+#define REG_BG3PB (*(vu16 *)REG_ADDR_BG3PB)
+#define REG_BG3PC (*(vu16 *)REG_ADDR_BG3PC)
+#define REG_BG3PD (*(vu16 *)REG_ADDR_BG3PD)
+#define REG_BG3X (*(vu32 *)REG_ADDR_BG3X)
+#define REG_BG3X_L (*(vu16 *)REG_ADDR_BG3X_L)
+#define REG_BG3X_H (*(vu16 *)REG_ADDR_BG3X_H)
+#define REG_BG3Y (*(vu32 *)REG_ADDR_BG3Y)
+#define REG_BG3Y_L (*(vu16 *)REG_ADDR_BG3Y_L)
+#define REG_BG3Y_H (*(vu16 *)REG_ADDR_BG3Y_H)
+#define REG_WIN0H (*(vu16 *)REG_ADDR_WIN0H)
+#define REG_WIN1H (*(vu16 *)REG_ADDR_WIN1H)
+#define REG_WIN0V (*(vu16 *)REG_ADDR_WIN0V)
+#define REG_WIN1V (*(vu16 *)REG_ADDR_WIN1V)
+#define REG_WININ (*(vu16 *)REG_ADDR_WININ)
+#define REG_WINOUT (*(vu16 *)REG_ADDR_WINOUT)
+#define REG_MOSAIC (*(vu16 *)REG_ADDR_MOSAIC)
+#define REG_BLDCNT (*(vu16 *)REG_ADDR_BLDCNT)
+#define REG_BLDALPHA (*(vu16 *)REG_ADDR_BLDALPHA)
+#define REG_BLDY (*(vu16 *)REG_ADDR_BLDY)
+
+#define REG_SOUND1CNT_L (*(vu16 *)REG_ADDR_SOUND1CNT_L)
+#define REG_NR10 (*(vu8 *)REG_ADDR_NR10)
+#define REG_SOUND1CNT_H (*(vu16 *)REG_ADDR_SOUND1CNT_H)
+#define REG_NR11 (*(vu8 *)REG_ADDR_NR11)
+#define REG_NR12 (*(vu8 *)REG_ADDR_NR12)
+#define REG_SOUND1CNT_X (*(vu16 *)REG_ADDR_SOUND1CNT_X)
+#define REG_NR13 (*(vu8 *)REG_ADDR_NR13)
+#define REG_NR14 (*(vu8 *)REG_ADDR_NR14)
+#define REG_SOUND2CNT_L (*(vu16 *)REG_ADDR_SOUND2CNT_L)
+#define REG_NR21 (*(vu8 *)REG_ADDR_NR21)
+#define REG_NR22 (*(vu8 *)REG_ADDR_NR22)
+#define REG_SOUND2CNT_H (*(vu16 *)REG_ADDR_SOUND2CNT_H)
+#define REG_NR23 (*(vu8 *)REG_ADDR_NR23)
+#define REG_NR24 (*(vu8 *)REG_ADDR_NR24)
+#define REG_SOUND3CNT_L (*(vu16 *)REG_ADDR_SOUND3CNT_L)
+#define REG_NR30 (*(vu8 *)REG_ADDR_NR30)
+#define REG_SOUND3CNT_H (*(vu16 *)REG_ADDR_SOUND3CNT_H)
+#define REG_NR31 (*(vu8 *)REG_ADDR_NR31)
+#define REG_NR32 (*(vu8 *)REG_ADDR_NR32)
+#define REG_SOUND3CNT_X (*(vu16 *)REG_ADDR_SOUND3CNT_X)
+#define REG_NR33 (*(vu8 *)REG_ADDR_NR33)
+#define REG_NR34 (*(vu8 *)REG_ADDR_NR34)
+#define REG_SOUND4CNT_L (*(vu16 *)REG_ADDR_SOUND4CNT_L)
+#define REG_NR41 (*(vu8 *)REG_ADDR_NR41)
+#define REG_NR42 (*(vu8 *)REG_ADDR_NR42)
+#define REG_SOUND4CNT_H (*(vu16 *)REG_ADDR_SOUND4CNT_H)
+#define REG_NR43 (*(vu8 *)REG_ADDR_NR43)
+#define REG_NR44 (*(vu8 *)REG_ADDR_NR44)
+#define REG_SOUNDCNT_L (*(vu16 *)REG_ADDR_SOUNDCNT_L)
+#define REG_NR50 (*(vu8 *)REG_ADDR_NR50)
+#define REG_NR51 (*(vu8 *)REG_ADDR_NR51)
+#define REG_SOUNDCNT_H (*(vu16 *)REG_ADDR_SOUNDCNT_H)
+#define REG_SOUNDCNT_X (*(vu16 *)REG_ADDR_SOUNDCNT_X)
+#define REG_NR52 (*(vu8 *)REG_ADDR_NR52)
+#define REG_SOUNDBIAS (*(vu16 *)REG_ADDR_SOUNDBIAS)
+#define REG_SOUNDBIAS_L (*(vu8 *)REG_ADDR_SOUNDBIAS_L)
+#define REG_SOUNDBIAS_H (*(vu8 *)REG_ADDR_SOUNDBIAS_H)
+#define REG_WAVE_RAM0 (*(vu32 *)REG_ADDR_WAVE_RAM0)
+#define REG_WAVE_RAM1 (*(vu32 *)REG_ADDR_WAVE_RAM1)
+#define REG_WAVE_RAM2 (*(vu32 *)REG_ADDR_WAVE_RAM2)
+#define REG_WAVE_RAM3 (*(vu32 *)REG_ADDR_WAVE_RAM3)
+#define REG_FIFO_A (*(vu32 *)REG_ADDR_FIFO_A)
+#define REG_FIFO_B (*(vu32 *)REG_ADDR_FIFO_B)
+
+#define REG_DMA0SAD (*(vu32 *)REG_ADDR_DMA0SAD)
+#define REG_DMA0DAD (*(vu32 *)REG_ADDR_DMA0DAD)
+#define REG_DMA0CNT (*(vu32 *)REG_ADDR_DMA0CNT)
+#define REG_DMA0CNT_L (*(vu16 *)REG_ADDR_DMA0CNT_L)
+#define REG_DMA0CNT_H (*(vu16 *)REG_ADDR_DMA0CNT_H)
+
+#define REG_DMA1SAD (*(vu32 *)REG_ADDR_DMA1SAD)
+#define REG_DMA1DAD (*(vu32 *)REG_ADDR_DMA1DAD)
+#define REG_DMA1CNT (*(vu32 *)REG_ADDR_DMA1CNT)
+#define REG_DMA1CNT_L (*(vu16 *)REG_ADDR_DMA1CNT_L)
+#define REG_DMA1CNT_H (*(vu16 *)REG_ADDR_DMA1CNT_H)
+
+#define REG_DMA2SAD (*(vu32 *)REG_ADDR_DMA2SAD)
+#define REG_DMA2DAD (*(vu32 *)REG_ADDR_DMA2DAD)
+#define REG_DMA2CNT (*(vu32 *)REG_ADDR_DMA2CNT)
+#define REG_DMA2CNT_L (*(vu16 *)REG_ADDR_DMA2CNT_L)
+#define REG_DMA2CNT_H (*(vu16 *)REG_ADDR_DMA2CNT_H)
+
+#define REG_DMA3SAD (*(vu32 *)REG_ADDR_DMA3SAD)
+#define REG_DMA3DAD (*(vu32 *)REG_ADDR_DMA3DAD)
+#define REG_DMA3CNT (*(vu32 *)REG_ADDR_DMA3CNT)
+#define REG_DMA3CNT_L (*(vu16 *)REG_ADDR_DMA3CNT_L)
+#define REG_DMA3CNT_H (*(vu16 *)REG_ADDR_DMA3CNT_H)
+
+#define REG_TMCNT(n) (*(vu16 *)(REG_ADDR_TMCNT + ((n) * 4)))
+#define REG_TMCNT_L(n) (*(vu16 *)(REG_ADDR_TMCNT_L + ((n) * 4)))
+#define REG_TMCNT_H(n) (*(vu16 *)(REG_ADDR_TMCNT_H + ((n) * 4)))
+#define REG_TM0CNT (*(vu32 *)REG_ADDR_TM0CNT)
+#define REG_TM0CNT_L (*(vu16 *)REG_ADDR_TM0CNT_L)
+#define REG_TM0CNT_H (*(vu16 *)REG_ADDR_TM0CNT_H)
+#define REG_TM1CNT (*(vu32 *)REG_ADDR_TM1CNT)
+#define REG_TM1CNT_L (*(vu16 *)REG_ADDR_TM1CNT_L)
+#define REG_TM1CNT_H (*(vu16 *)REG_ADDR_TM1CNT_H)
+#define REG_TM2CNT (*(vu32 *)REG_ADDR_TM2CNT)
+#define REG_TM2CNT_L (*(vu16 *)REG_ADDR_TM2CNT_L)
+#define REG_TM2CNT_H (*(vu16 *)REG_ADDR_TM2CNT_H)
+#define REG_TM3CNT (*(vu32 *)REG_ADDR_TM3CNT)
+#define REG_TM3CNT_L (*(vu16 *)REG_ADDR_TM3CNT_L)
+#define REG_TM3CNT_H (*(vu16 *)REG_ADDR_TM3CNT_H)
+
+#define REG_SIOCNT (*(vu16 *)REG_ADDR_SIOCNT)
+#define REG_SIODATA8 (*(vu16 *)REG_ADDR_SIODATA8)
+#define REG_SIODATA32 (*(vu32 *)REG_ADDR_SIODATA32)
+#define REG_SIOMLT_SEND (*(vu16 *)REG_ADDR_SIOMLT_SEND)
+#define REG_SIOMLT_RECV (*(vu64 *)REG_ADDR_SIOMLT_RECV)
+#define REG_SIOMULTI0 (*(vu16 *)REG_ADDR_SIOMULTI0)
+#define REG_SIOMULTI1 (*(vu16 *)REG_ADDR_SIOMULTI1)
+#define REG_SIOMULTI2 (*(vu16 *)REG_ADDR_SIOMULTI2)
+#define REG_SIOMULTI3 (*(vu16 *)REG_ADDR_SIOMULTI3)
+
+#define REG_KEYINPUT (*(vu16 *)REG_ADDR_KEYINPUT)
+#define REG_KEYCNT (*(vu16 *)REG_ADDR_KEYCNT)
+
+#define REG_RCNT (*(vu16 *)REG_ADDR_RCNT)
+
+#define REG_IME (*(vu16 *)REG_ADDR_IME)
+#define REG_IE (*(vu16 *)REG_ADDR_IE)
+#define REG_IF (*(vu16 *)REG_ADDR_IF)
+
+#define REG_WAITCNT (*(vu16 *)REG_ADDR_WAITCNT)
+
+// I/O register fields
+
+// DISPCNT
+#define DISPCNT_MODE_0 0x0000 // BG0: text, BG1: text, BG2: text, BG3: text
+#define DISPCNT_MODE_1 0x0001 // BG0: text, BG1: text, BG2: affine, BG3: off
+#define DISPCNT_MODE_2 0x0002 // BG0: off, BG1: off, BG2: affine, BG3: affine
+#define DISPCNT_MODE_3 0x0003 // Bitmap mode, 240x160, BGR555 color
+#define DISPCNT_MODE_4 0x0004 // Bitmap mode, 240x160, 256 color palette
+#define DISPCNT_MODE_5 0x0005 // Bitmap mode, 160x128, BGR555 color
+#define DISPCNT_HBLANK_INTERVAL 0x0020 // Allow access to OAM during H-Blank
+#define DISPCNT_OBJ_1D_MAP 0x0040
+#define DISPCNT_FORCED_BLANK 0x0080
+#define DISPCNT_BG0_ON 0x0100
+#define DISPCNT_BG1_ON 0x0200
+#define DISPCNT_BG2_ON 0x0400
+#define DISPCNT_BG3_ON 0x0800
+#define DISPCNT_BG_ALL_ON 0x0F00
+#define DISPCNT_OBJ_ON 0x1000
+#define DISPCNT_WIN0_ON 0x2000
+#define DISPCNT_WIN1_ON 0x4000
+#define DISPCNT_OBJWIN_ON 0x8000
+
+// DISPSTAT
+#define DISPSTAT_VBLANK 0x0001 // in V-Blank
+#define DISPSTAT_HBLANK 0x0002 // in H-Blank
+#define DISPSTAT_VCOUNT 0x0004 // V-Count match
+#define DISPSTAT_VBLANK_INTR 0x0008 // V-Blank interrupt enabled
+#define DISPSTAT_HBLANK_INTR 0x0010 // H-Blank interrupt enabled
+#define DISPSTAT_VCOUNT_INTR 0x0020 // V-Count interrupt enabled
+
+// BGCNT
+#define BGCNT_PRIORITY(n) (n) // Values 0 - 3. Lower priority BGs will be drawn on top of higher priority BGs.
+#define BGCNT_CHARBASE(n) ((n) << 2) // Values 0 - 3. Base block for tile pixel data.
+#define BGCNT_MOSAIC 0x0040
+#define BGCNT_16COLOR 0x0000 // 4 bits per pixel
+#define BGCNT_256COLOR 0x0080 // 8 bits per pixel
+#define BGCNT_SCREENBASE(n) ((n) << 8) // Values 0 - 31. Base block for tile map.
+#define BGCNT_WRAP 0x2000 // Only affects affine BGs. Text BGs wrap by default.
+#define BGCNT_TXT256x256 0x0000 // Internal screen size size of text mode BG in pixels.
+#define BGCNT_TXT512x256 0x4000
+#define BGCNT_TXT256x512 0x8000
+#define BGCNT_TXT512x512 0xC000
+#define BGCNT_AFF128x128 0x0000 // Internal screen size size of affine mode BG in pixels.
+#define BGCNT_AFF256x256 0x4000
+#define BGCNT_AFF512x512 0x8000
+#define BGCNT_AFF1024x1024 0xC000
+
+// WININ/OUT
+#define WININ_WIN0_BG0 (1 << 0)
+#define WININ_WIN0_BG1 (1 << 1)
+#define WININ_WIN0_BG2 (1 << 2)
+#define WININ_WIN0_BG3 (1 << 3)
+#define WININ_WIN0_BG_ALL (WININ_WIN0_BG0 | WININ_WIN0_BG1 | WININ_WIN0_BG2 | WININ_WIN0_BG3)
+#define WININ_WIN0_OBJ (1 << 4)
+#define WININ_WIN0_CLR (1 << 5)
+#define WININ_WIN1_BG0 (1 << 8)
+#define WININ_WIN1_BG1 (1 << 9)
+#define WININ_WIN1_BG2 (1 << 10)
+#define WININ_WIN1_BG3 (1 << 11)
+#define WININ_WIN1_BG_ALL (WININ_WIN1_BG0 | WININ_WIN1_BG1 | WININ_WIN1_BG2 | WININ_WIN1_BG3)
+#define WININ_WIN1_OBJ (1 << 12)
+#define WININ_WIN1_CLR (1 << 13)
+
+#define WINOUT_WIN01_BG0 (1 << 0)
+#define WINOUT_WIN01_BG1 (1 << 1)
+#define WINOUT_WIN01_BG2 (1 << 2)
+#define WINOUT_WIN01_BG3 (1 << 3)
+#define WINOUT_WIN01_BG_ALL (WINOUT_WIN01_BG0 | WINOUT_WIN01_BG1 | WINOUT_WIN01_BG2 | WINOUT_WIN01_BG3)
+#define WINOUT_WIN01_OBJ (1 << 4)
+#define WINOUT_WIN01_CLR (1 << 5)
+#define WINOUT_WINOBJ_BG0 (1 << 8)
+#define WINOUT_WINOBJ_BG1 (1 << 9)
+#define WINOUT_WINOBJ_BG2 (1 << 10)
+#define WINOUT_WINOBJ_BG3 (1 << 11)
+#define WINOUT_WINOBJ_BG_ALL (WINOUT_WINOBJ_BG0 | WINOUT_WINOBJ_BG1 | WINOUT_WINOBJ_BG2 | WINOUT_WINOBJ_BG3)
+#define WINOUT_WINOBJ_OBJ (1 << 12)
+#define WINOUT_WINOBJ_CLR (1 << 13)
+
+#define WIN_RANGE(a, b) (((a) << 8) | (b))
+#define WIN_RANGE2(a, b) ((b) | ((a) << 8))
+
+// BLDCNT
+// Bits 0-5 select layers for the 1st target
+#define BLDCNT_TGT1_BG0 (1 << 0)
+#define BLDCNT_TGT1_BG1 (1 << 1)
+#define BLDCNT_TGT1_BG2 (1 << 2)
+#define BLDCNT_TGT1_BG3 (1 << 3)
+#define BLDCNT_TGT1_OBJ (1 << 4)
+#define BLDCNT_TGT1_BD (1 << 5)
+#define BLDCNT_TGT1_ALL (BLDCNT_TGT1_BG0 | BLDCNT_TGT1_BG1 | BLDCNT_TGT1_BG2 | BLDCNT_TGT1_BG3 | BLDCNT_TGT1_OBJ | BLDCNT_TGT1_BD)
+// Bits 6-7 select the special effect
+#define BLDCNT_EFFECT_NONE (0 << 6) // no special effect
+#define BLDCNT_EFFECT_BLEND (1 << 6) // 1st+2nd targets mixed (controlled by BLDALPHA)
+#define BLDCNT_EFFECT_LIGHTEN (2 << 6) // 1st target becomes whiter (controlled by BLDY)
+#define BLDCNT_EFFECT_DARKEN (3 << 6) // 1st target becomes blacker (controlled by BLDY)
+// Bits 8-13 select layers for the 2nd target
+#define BLDCNT_TGT2_BG0 (1 << 8)
+#define BLDCNT_TGT2_BG1 (1 << 9)
+#define BLDCNT_TGT2_BG2 (1 << 10)
+#define BLDCNT_TGT2_BG3 (1 << 11)
+#define BLDCNT_TGT2_OBJ (1 << 12)
+#define BLDCNT_TGT2_BD (1 << 13)
+#define BLDCNT_TGT2_ALL (BLDCNT_TGT2_BG0 | BLDCNT_TGT2_BG1 | BLDCNT_TGT2_BG2 | BLDCNT_TGT2_BG3 | BLDCNT_TGT2_OBJ | BLDCNT_TGT2_BD)
+
+// BLDALPHA
+#define BLDALPHA_BLEND(target1, target2) (((target2) << 8) | (target1))
+
+// SOUNDCNT_H
+#define SOUND_CGB_MIX_QUARTER 0x0000
+#define SOUND_CGB_MIX_HALF 0x0001
+#define SOUND_CGB_MIX_FULL 0x0002
+#define SOUND_A_MIX_HALF 0x0000
+#define SOUND_A_MIX_FULL 0x0004
+#define SOUND_B_MIX_HALF 0x0000
+#define SOUND_B_MIX_FULL 0x0008
+#define SOUND_ALL_MIX_FULL 0x000E
+#define SOUND_A_RIGHT_OUTPUT 0x0100
+#define SOUND_A_LEFT_OUTPUT 0x0200
+#define SOUND_A_TIMER_0 0x0000
+#define SOUND_A_TIMER_1 0x0400
+#define SOUND_A_FIFO_RESET 0x0800
+#define SOUND_B_RIGHT_OUTPUT 0x1000
+#define SOUND_B_LEFT_OUTPUT 0x2000
+#define SOUND_B_TIMER_0 0x0000
+#define SOUND_B_TIMER_1 0x4000
+#define SOUND_B_FIFO_RESET 0x8000
+
+// SOUNDCNT_X
+#define SOUND_1_ON 0x0001
+#define SOUND_2_ON 0x0002
+#define SOUND_3_ON 0x0004
+#define SOUND_4_ON 0x0008
+#define SOUND_MASTER_ENABLE 0x0080
+
+// DMA
+#define DMA_DEST_INC 0x0000
+#define DMA_DEST_DEC 0x0020
+#define DMA_DEST_FIXED 0x0040
+#define DMA_DEST_RELOAD 0x0060
+#define DMA_SRC_INC 0x0000
+#define DMA_SRC_DEC 0x0080
+#define DMA_SRC_FIXED 0x0100
+#define DMA_REPEAT 0x0200
+#define DMA_16BIT 0x0000
+#define DMA_32BIT 0x0400
+#define DMA_DREQ_ON 0x0800
+#define DMA_START_NOW 0x0000
+#define DMA_START_VBLANK 0x1000
+#define DMA_START_HBLANK 0x2000
+#define DMA_START_SPECIAL 0x3000
+#define DMA_START_MASK 0x3000
+#define DMA_INTR_ENABLE 0x4000
+#define DMA_ENABLE 0x8000
+
+// timer
+#define TIMER_1CLK 0x00
+#define TIMER_64CLK 0x01
+#define TIMER_256CLK 0x02
+#define TIMER_1024CLK 0x03
+#define TIMER_INTR_ENABLE 0x40
+#define TIMER_ENABLE 0x80
+
+// serial
+#define SIO_ID 0x0030 // Communication ID
+
+#define SIO_8BIT_MODE 0x0000 // Normal 8-bit communication mode
+#define SIO_32BIT_MODE 0x1000 // Normal 32-bit communication mode
+#define SIO_MULTI_MODE 0x2000 // Multi-player communication mode
+#define SIO_UART_MODE 0x3000 // UART communication mode
+
+#define SIO_9600_BPS 0x0000 // baud rate 9600 bps
+#define SIO_38400_BPS 0x0001 // 38400 bps
+#define SIO_57600_BPS 0x0002 // 57600 bps
+#define SIO_115200_BPS 0x0003 // 115200 bps
+
+#define SIO_MULTI_SI 0x0004 // Multi-player communication SI terminal
+#define SIO_MULTI_SD 0x0008 // SD terminal
+#define SIO_MULTI_BUSY 0x0080
+
+#define SIO_ERROR 0x0040 // Detect error
+#define SIO_START 0x0080 // Start transfer
+#define SIO_ENABLE 0x0080 // Enable SIO
+
+#define SIO_INTR_ENABLE 0x4000
+
+#define SIO_MULTI_SI_SHIFT 2
+#define SIO_MULTI_SI_MASK 0x1
+#define SIO_MULTI_DI_SHIFT 3
+#define SIO_MULTI_DI_MASK 0x1
+
+// keys
+#define A_BUTTON 0x0001
+#define B_BUTTON 0x0002
+#define SELECT_BUTTON 0x0004
+#define START_BUTTON 0x0008
+#define DPAD_RIGHT 0x0010
+#define DPAD_LEFT 0x0020
+#define DPAD_UP 0x0040
+#define DPAD_DOWN 0x0080
+#define R_BUTTON 0x0100
+#define L_BUTTON 0x0200
+#define KEYS_MASK 0x03FF
+#define KEY_INTR_ENABLE 0x0400
+#define KEY_OR_INTR 0x0000
+#define KEY_AND_INTR 0x8000
+#define DPAD_ANY ((DPAD_RIGHT | DPAD_LEFT | DPAD_UP | DPAD_DOWN))
+#define JOY_EXCL_DPAD 0x030F
+
+// interrupt flags
+#define INTR_FLAG_VBLANK (1 << 0)
+#define INTR_FLAG_HBLANK (1 << 1)
+#define INTR_FLAG_VCOUNT (1 << 2)
+#define INTR_FLAG_TIMER0 (1 << 3)
+#define INTR_FLAG_TIMER1 (1 << 4)
+#define INTR_FLAG_TIMER2 (1 << 5)
+#define INTR_FLAG_TIMER3 (1 << 6)
+#define INTR_FLAG_SERIAL (1 << 7)
+#define INTR_FLAG_DMA0 (1 << 8)
+#define INTR_FLAG_DMA1 (1 << 9)
+#define INTR_FLAG_DMA2 (1 << 10)
+#define INTR_FLAG_DMA3 (1 << 11)
+#define INTR_FLAG_KEYPAD (1 << 12)
+#define INTR_FLAG_GAMEPAK (1 << 13)
+
+// WAITCNT
+#define WAITCNT_SRAM_4 (0 << 0)
+#define WAITCNT_SRAM_3 (1 << 0)
+#define WAITCNT_SRAM_2 (2 << 0)
+#define WAITCNT_SRAM_8 (3 << 0)
+#define WAITCNT_SRAM_MASK (3 << 0)
+
+#define WAITCNT_WS0_N_4 (0 << 2)
+#define WAITCNT_WS0_N_3 (1 << 2)
+#define WAITCNT_WS0_N_2 (2 << 2)
+#define WAITCNT_WS0_N_8 (3 << 2)
+#define WAITCNT_WS0_N_MASK (3 << 2)
+
+#define WAITCNT_WS0_S_2 (0 << 4)
+#define WAITCNT_WS0_S_1 (1 << 4)
+
+#define WAITCNT_WS1_N_4 (0 << 5)
+#define WAITCNT_WS1_N_3 (1 << 5)
+#define WAITCNT_WS1_N_2 (2 << 5)
+#define WAITCNT_WS1_N_8 (3 << 5)
+#define WAITCNT_WS1_N_MASK (3 << 5)
+
+#define WAITCNT_WS1_S_4 (0 << 7)
+#define WAITCNT_WS1_S_1 (1 << 7)
+
+#define WAITCNT_WS2_N_4 (0 << 8)
+#define WAITCNT_WS2_N_3 (1 << 8)
+#define WAITCNT_WS2_N_2 (2 << 8)
+#define WAITCNT_WS2_N_8 (3 << 8)
+#define WAITCNT_WS2_N_MASK (3 << 8)
+
+#define WAITCNT_WS2_S_8 (0 << 10)
+#define WAITCNT_WS2_S_1 (1 << 10)
+
+#define WAITCNT_PHI_OUT_NONE (0 << 11)
+#define WAITCNT_PHI_OUT_4MHZ (1 << 11)
+#define WAITCNT_PHI_OUT_8MHZ (2 << 11)
+#define WAITCNT_PHI_OUT_16MHZ (3 << 11)
+#define WAITCNT_PHI_OUT_MASK (3 << 11)
+
+#define WAITCNT_PREFETCH_ENABLE (1 << 14)
+
+#define WAITCNT_AGB (0 << 15)
+#define WAITCNT_CGB (1 << 15)
+
+#endif // GUARD_GBA_IO_REG_H
diff --git a/berry_fix/payload/include/gba/isagbprint.h b/berry_fix/payload/include/gba/isagbprint.h
new file mode 100644
index 000000000..c5eb456c3
--- /dev/null
+++ b/berry_fix/payload/include/gba/isagbprint.h
@@ -0,0 +1,50 @@
+#ifndef GUARD_GBA_ISAGBPRINT_H
+#define GUARD_GBA_ISAGBPRINT_H
+
+#ifdef NDEBUG
+#define AGBPrintInit()
+#define AGBPutc(cChr)
+#define AGBPrint(pBuf)
+#define AGBPrintf(pBuf, ...)
+#define AGBPrintFlush1Block()
+#define AGBPrintFlush()
+#define AGBAssert(pFile, nLine, pExpression, nStopProgram)
+#else
+void AGBPrintInit(void);
+void AGBPutc(const char cChr);
+void AGBPrint(const char *pBuf);
+void AGBPrintf(const char *pBuf, ...);
+void AGBPrintFlush1Block(void);
+void AGBPrintFlush(void);
+void AGBAssert(const char *pFile, int nLine, const char *pExpression, int nStopProgram);
+#endif
+
+#undef AGB_ASSERT
+#ifdef NDEBUG
+#define AGB_ASSERT(exp)
+#else
+#define AGB_ASSERT(exp) (exp) ? ((void*)0) : AGBAssert(__FILE__, __LINE__, #exp, 1);
+#endif
+
+#undef AGB_WARNING
+#ifdef NDEBUG
+#define AGB_WARNING(exp)
+#else
+#define AGB_WARNING(exp) (exp) ? ((void*)0) : AGBAssert(__FILE__, __LINE__, #exp, 0);
+#endif
+
+// for matching purposes
+
+#ifdef NDEBUG
+#define AGB_ASSERT_EX(exp, file, line)
+#else
+#define AGB_ASSERT_EX(exp, file, line) (exp) ? ((void*)0) : AGBAssert(file, line, #exp, 1);
+#endif
+
+#ifdef NDEBUG
+#define AGB_WARNING_EX(exp, file, line)
+#else
+#define AGB_WARNING_EX(exp, file, line) (exp) ? ((void*)0) : AGBAssert(file, line, #exp, 0);
+#endif
+
+#endif // GUARD_GBA_ISAGBPRINT_H
diff --git a/berry_fix/payload/include/gba/m4a_internal.h b/berry_fix/payload/include/gba/m4a_internal.h
new file mode 100644
index 000000000..339a0774e
--- /dev/null
+++ b/berry_fix/payload/include/gba/m4a_internal.h
@@ -0,0 +1,467 @@
+#ifndef GUARD_GBA_M4A_INTERNAL_H
+#define GUARD_GBA_M4A_INTERNAL_H
+
+#include "gba/gba.h"
+
+// ASCII encoding of 'Smsh' in reverse
+// This is presumably short for SMASH, the developer of MKS4AGB.
+#define ID_NUMBER 0x68736D53
+
+#define C_V 0x40 // center value for PAN, BEND, and TUNE
+
+#define SOUND_MODE_REVERB_VAL 0x0000007F
+#define SOUND_MODE_REVERB_SET 0x00000080
+#define SOUND_MODE_MAXCHN 0x00000F00
+#define SOUND_MODE_MAXCHN_SHIFT 8
+#define SOUND_MODE_MASVOL 0x0000F000
+#define SOUND_MODE_MASVOL_SHIFT 12
+#define SOUND_MODE_FREQ_05734 0x00010000
+#define SOUND_MODE_FREQ_07884 0x00020000
+#define SOUND_MODE_FREQ_10512 0x00030000
+#define SOUND_MODE_FREQ_13379 0x00040000
+#define SOUND_MODE_FREQ_15768 0x00050000
+#define SOUND_MODE_FREQ_18157 0x00060000
+#define SOUND_MODE_FREQ_21024 0x00070000
+#define SOUND_MODE_FREQ_26758 0x00080000
+#define SOUND_MODE_FREQ_31536 0x00090000
+#define SOUND_MODE_FREQ_36314 0x000A0000
+#define SOUND_MODE_FREQ_40137 0x000B0000
+#define SOUND_MODE_FREQ_42048 0x000C0000
+#define SOUND_MODE_FREQ 0x000F0000
+#define SOUND_MODE_FREQ_SHIFT 16
+#define SOUND_MODE_DA_BIT_9 0x00800000
+#define SOUND_MODE_DA_BIT_8 0x00900000
+#define SOUND_MODE_DA_BIT_7 0x00A00000
+#define SOUND_MODE_DA_BIT_6 0x00B00000
+#define SOUND_MODE_DA_BIT 0x00B00000
+#define SOUND_MODE_DA_BIT_SHIFT 20
+
+struct WaveData
+{
+ u16 type;
+ u16 status;
+ u32 freq;
+ u32 loopStart;
+ u32 size; // number of samples
+ s8 data[1]; // samples
+};
+
+#define TONEDATA_TYPE_CGB 0x07
+#define TONEDATA_TYPE_FIX 0x08
+#define TONEDATA_TYPE_SPL 0x40 // key split
+#define TONEDATA_TYPE_RHY 0x80 // rhythm
+
+#define TONEDATA_P_S_PAN 0xc0
+#define TONEDATA_P_S_PAM TONEDATA_P_S_PAN
+
+struct ToneData
+{
+ u8 type;
+ u8 key;
+ u8 length; // sound length (compatible sound)
+ u8 pan_sweep; // pan or sweep (compatible sound ch. 1)
+ struct WaveData *wav;
+ u8 attack;
+ u8 decay;
+ u8 sustain;
+ u8 release;
+};
+
+struct CgbChannel
+{
+ u8 sf;
+ u8 ty;
+ u8 rightVolume;
+ u8 leftVolume;
+ u8 at;
+ u8 de;
+ u8 su;
+ u8 re;
+ u8 ky;
+ u8 ev;
+ u8 eg;
+ u8 ec;
+ u8 echoVolume;
+ u8 echoLength;
+ u8 d1;
+ u8 d2;
+ u8 gt;
+ u8 mk;
+ u8 ve;
+ u8 pr;
+ u8 rp;
+ u8 d3[3];
+ u8 d5;
+ u8 sg;
+ u8 n4;
+ u8 pan;
+ u8 panMask;
+ u8 mo;
+ u8 le;
+ u8 sw;
+ u32 fr;
+ u32 wp;
+ u32 cp;
+ u32 tp;
+ u32 pp;
+ u32 np;
+ u8 d4[8];
+};
+
+struct MusicPlayerTrack;
+
+struct SoundChannel
+{
+ u8 status;
+ u8 type;
+ u8 rightVolume;
+ u8 leftVolume;
+ u8 attack;
+ u8 decay;
+ u8 sustain;
+ u8 release;
+ u8 ky;
+ u8 ev;
+ u8 er;
+ u8 el;
+ u8 echoVolume;
+ u8 echoLength;
+ u8 d1;
+ u8 d2;
+ u8 gt;
+ u8 mk;
+ u8 ve;
+ u8 pr;
+ u8 rp;
+ u8 d3[3];
+ u32 ct;
+ u32 fw;
+ u32 freq;
+ struct WaveData *wav;
+ u32 cp;
+ struct MusicPlayerTrack *track;
+ u32 pp;
+ u32 np;
+ u32 d4;
+ u16 xpi;
+ u16 xpc;
+};
+
+#define MAX_DIRECTSOUND_CHANNELS 12
+
+#define PCM_DMA_BUF_SIZE 1584 // size of Direct Sound buffer
+
+struct SoundInfo
+{
+ // This field is normally equal to ID_NUMBER but it is set to other
+ // values during sensitive operations for locking purposes.
+ // This field should be volatile but isn't. This could potentially cause
+ // race conditions.
+ u32 ident;
+
+ vu8 pcmDmaCounter;
+
+ // Direct Sound
+ u8 reverb;
+ u8 maxChans;
+ u8 masterVolume;
+ u8 freq;
+
+ u8 mode;
+ u8 c15;
+ u8 pcmDmaPeriod; // number of V-blanks per PCM DMA
+ u8 maxLines;
+ u8 gap[3];
+ s32 pcmSamplesPerVBlank;
+ s32 pcmFreq;
+ s32 divFreq;
+ struct CgbChannel *cgbChans;
+ u32 func;
+ u32 intp;
+ void (*CgbSound)(void);
+ void (*CgbOscOff)(u8);
+ u32 (*MidiKeyToCgbFreq)(u8, u8, u8);
+ u32 MPlayJumpTable;
+ u32 plynote;
+ u32 ExtVolPit;
+ u8 gap2[16];
+ struct SoundChannel chans[MAX_DIRECTSOUND_CHANNELS];
+ s8 pcmBuffer[PCM_DMA_BUF_SIZE * 2];
+};
+
+struct SongHeader
+{
+ u8 trackCount;
+ u8 blockCount;
+ u8 priority;
+ u8 reverb;
+ struct ToneData *tone;
+ u8 *part[1];
+};
+
+struct PokemonCrySong
+{
+ u8 trackCount;
+ u8 blockCount;
+ u8 priority;
+ u8 reverb;
+ struct ToneData *tone;
+ u8 *part[2];
+ u8 gap;
+ u8 part0; // 0x11
+ u8 tuneValue; // 0x12
+ u8 gotoCmd; // 0x13
+ u32 gotoTarget; // 0x14
+ u8 part1; // 0x18
+ u8 tuneValue2; // 0x19
+ u8 cont[2]; // 0x1A
+ u8 volCmd; // 0x1C
+ u8 volumeValue; // 0x1D
+ u8 unkCmd0D[2]; // 0x1E
+ u32 unkCmd0DParam; // 0x20
+ u8 xreleCmd[2]; // 0x24
+ u8 releaseValue; // 0x26
+ u8 panCmd;
+ u8 panValue; // 0x28
+ u8 tieCmd; // 0x29
+ u8 tieKeyValue; // 0x2A
+ u8 tieVelocityValue; // 0x2B
+ u8 unkCmd0C[2]; // 0x2C
+ u16 unkCmd0CParam; // 0x2E
+ u8 end[2]; // 0x30
+};
+
+#define MPT_FLG_VOLSET 0x01
+#define MPT_FLG_VOLCHG 0x03
+#define MPT_FLG_PITSET 0x04
+#define MPT_FLG_PITCHG 0x0C
+#define MPT_FLG_START 0x40
+#define MPT_FLG_EXIST 0x80
+
+struct MusicPlayerTrack
+{
+ u8 flags;
+ u8 wait;
+ u8 patternLevel;
+ u8 repN;
+ u8 gateTime;
+ u8 key;
+ u8 velocity;
+ u8 runningStatus;
+ u8 keyM;
+ u8 pitM;
+ s8 keyShift;
+ s8 keyShiftX;
+ s8 tune;
+ u8 pitX;
+ s8 bend;
+ u8 bendRange;
+ u8 volMR;
+ u8 volML;
+ u8 vol;
+ u8 volX;
+ s8 pan;
+ s8 panX;
+ s8 modM;
+ u8 mod;
+ u8 modT;
+ u8 lfoSpeed;
+ u8 lfoSpeedC;
+ u8 lfoDelay;
+ u8 lfoDelayC;
+ u8 priority;
+ u8 echoVolume;
+ u8 echoLength;
+ struct SoundChannel *chan;
+ struct ToneData tone;
+ u8 gap[10];
+ u16 unk_3A;
+ u32 unk_3C;
+ u8 *cmdPtr;
+ u8 *patternStack[3];
+};
+
+#define MUSICPLAYER_STATUS_TRACK 0x0000ffff
+#define MUSICPLAYER_STATUS_PAUSE 0x80000000
+
+#define MAX_MUSICPLAYER_TRACKS 16
+
+#define TEMPORARY_FADE 0x0001
+#define FADE_IN 0x0002
+#define FADE_VOL_MAX 64
+#define FADE_VOL_SHIFT 2
+
+struct MusicPlayerInfo
+{
+ struct SongHeader *songHeader;
+ u32 status;
+ u8 trackCount;
+ u8 priority;
+ u8 cmd;
+ u8 unk_B;
+ u32 clock;
+ u8 gap[8];
+ u8 *memAccArea;
+ u16 tempoD;
+ u16 tempoU;
+ u16 tempoI;
+ u16 tempoC;
+ u16 fadeOI;
+ u16 fadeOC;
+ u16 fadeOV;
+ struct MusicPlayerTrack *tracks;
+ struct ToneData *tone;
+ u32 ident;
+ u32 func;
+ u32 intp;
+};
+
+struct MusicPlayer
+{
+ struct MusicPlayerInfo *info;
+ struct MusicPlayerTrack *track;
+ u8 unk_8;
+ u16 unk_A;
+};
+
+struct Song
+{
+ struct SongHeader *header;
+ u16 ms;
+ u16 me;
+};
+
+extern const struct MusicPlayer gMPlayTable[];
+extern const struct Song gSongTable[];
+
+
+
+extern u8 gMPlayMemAccArea[];
+
+//u8 gPokemonCrySong[52];
+//u8 gPokemonCrySongs[52 * MAX_POKEMON_CRIES];
+
+#define MAX_POKEMON_CRIES 2
+
+extern struct PokemonCrySong gPokemonCrySong;
+extern struct PokemonCrySong gPokemonCrySongs[];
+
+extern struct MusicPlayerInfo gPokemonCryMusicPlayers[];
+extern struct MusicPlayerTrack gPokemonCryTracks[];
+
+extern char SoundMainRAM[];
+
+extern void *gMPlayJumpTable[];
+
+typedef void (*XcmdFunc)(struct MusicPlayerInfo *, struct MusicPlayerTrack *);
+extern const XcmdFunc gXcmdTable[];
+
+extern struct CgbChannel gCgbChans[];
+
+extern const u8 gScaleTable[];
+extern const u32 gFreqTable[];
+extern const u16 gPcmSamplesPerVBlankTable[];
+
+extern const u8 gCgbScaleTable[];
+extern const s16 gCgbFreqTable[];
+extern const u8 gNoiseTable[];
+
+extern const struct PokemonCrySong gPokemonCrySongTemplate;
+
+extern const struct ToneData voicegroup000;
+
+extern char gNumMusicPlayers[];
+extern char gMaxLines[];
+
+#define NUM_MUSIC_PLAYERS ((u16)gNumMusicPlayers)
+#define MAX_LINES ((u32)gMaxLines)
+
+u32 umul3232H32(u32 multiplier, u32 multiplicand);
+void SoundMain(void);
+void SoundMainBTM(void);
+void TrackStop(struct MusicPlayerInfo *mplayInfo, struct MusicPlayerTrack *track);
+void MPlayMain(void);
+void RealClearChain(void *x);
+
+void MPlayContinue(struct MusicPlayerInfo *mplayInfo);
+void MPlayStart(struct MusicPlayerInfo *mplayInfo, struct SongHeader *songHeader);
+void m4aMPlayStop(struct MusicPlayerInfo *mplayInfo);
+void FadeOutBody(struct MusicPlayerInfo *mplayInfo);
+void TrkVolPitSet(struct MusicPlayerInfo *mplayInfo, struct MusicPlayerTrack *track);
+void MPlayFadeOut(struct MusicPlayerInfo *mplayInfo, u16 speed);
+void ClearChain(void *x);
+void Clear64byte(void *addr);
+void SoundInit(struct SoundInfo *soundInfo);
+void MPlayExtender(struct CgbChannel *cgbChans);
+void m4aSoundMode(u32 mode);
+void MPlayOpen(struct MusicPlayerInfo *mplayInfo, struct MusicPlayerTrack *track, u8 a3);
+void CgbSound(void);
+void CgbOscOff(u8);
+u32 MidiKeyToCgbFreq(u8, u8, u8);
+void DummyFunc(void);
+void MPlayJumpTableCopy(void **mplayJumpTable);
+void SampleFreqSet(u32 freq);
+void m4aSoundVSyncOn(void);
+void m4aSoundVSyncOff(void);
+
+void m4aMPlayTempoControl(struct MusicPlayerInfo *mplayInfo, u16 tempo);
+void m4aMPlayVolumeControl(struct MusicPlayerInfo *mplayInfo, u16 trackBits, u16 volume);
+void m4aMPlayPitchControl(struct MusicPlayerInfo *mplayInfo, u16 trackBits, s16 pitch);
+void m4aMPlayPanpotControl(struct MusicPlayerInfo *mplayInfo, u16 trackBits, s8 pan);
+void ClearModM(struct MusicPlayerTrack *track);
+void m4aMPlayModDepthSet(struct MusicPlayerInfo *mplayInfo, u16 trackBits, u8 modDepth);
+void m4aMPlayLFOSpeedSet(struct MusicPlayerInfo *mplayInfo, u16 trackBits, u8 lfoSpeed);
+
+struct MusicPlayerInfo *SetPokemonCryTone(struct ToneData *tone);
+void SetPokemonCryVolume(u8 val);
+void SetPokemonCryPanpot(s8 val);
+void SetPokemonCryPitch(s16 val);
+void SetPokemonCryLength(u16 val);
+void SetPokemonCryRelease(u8 val);
+void SetPokemonCryProgress(u32 val);
+int IsPokemonCryPlaying(struct MusicPlayerInfo *mplayInfo);
+void SetPokemonCryChorus(s8 val);
+void SetPokemonCryStereo(u32 val);
+void SetPokemonCryPriority(u8 val);
+
+// sound command handler functions
+void ply_fine(struct MusicPlayerInfo *, struct MusicPlayerTrack *);
+void ply_goto(struct MusicPlayerInfo *, struct MusicPlayerTrack *);
+void ply_patt(struct MusicPlayerInfo *, struct MusicPlayerTrack *);
+void ply_pend(struct MusicPlayerInfo *, struct MusicPlayerTrack *);
+void ply_rept(struct MusicPlayerInfo *, struct MusicPlayerTrack *);
+void ply_memacc(struct MusicPlayerInfo *, struct MusicPlayerTrack *);
+void ply_prio(struct MusicPlayerInfo *, struct MusicPlayerTrack *);
+void ply_tempo(struct MusicPlayerInfo *, struct MusicPlayerTrack *);
+void ply_keysh(struct MusicPlayerInfo *, struct MusicPlayerTrack *);
+void ply_voice(struct MusicPlayerInfo *, struct MusicPlayerTrack *);
+void ply_vol(struct MusicPlayerInfo *, struct MusicPlayerTrack *);
+void ply_pan(struct MusicPlayerInfo *, struct MusicPlayerTrack *);
+void ply_bend(struct MusicPlayerInfo *, struct MusicPlayerTrack *);
+void ply_bendr(struct MusicPlayerInfo *, struct MusicPlayerTrack *);
+void ply_lfos(struct MusicPlayerInfo *, struct MusicPlayerTrack *);
+void ply_lfodl(struct MusicPlayerInfo *, struct MusicPlayerTrack *);
+void ply_mod(struct MusicPlayerInfo *, struct MusicPlayerTrack *);
+void ply_modt(struct MusicPlayerInfo *, struct MusicPlayerTrack *);
+void ply_tune(struct MusicPlayerInfo *, struct MusicPlayerTrack *);
+void ply_port(struct MusicPlayerInfo *, struct MusicPlayerTrack *);
+void ply_xcmd(struct MusicPlayerInfo *, struct MusicPlayerTrack *);
+void ply_endtie(struct MusicPlayerInfo *, struct MusicPlayerTrack *);
+void ply_note(struct MusicPlayerInfo *, struct MusicPlayerTrack *);
+
+// extended sound command handler functions
+void ply_xxx(struct MusicPlayerInfo *, struct MusicPlayerTrack *);
+void ply_xwave(struct MusicPlayerInfo *, struct MusicPlayerTrack *);
+void ply_xtype(struct MusicPlayerInfo *, struct MusicPlayerTrack *);
+void ply_xatta(struct MusicPlayerInfo *, struct MusicPlayerTrack *);
+void ply_xdeca(struct MusicPlayerInfo *, struct MusicPlayerTrack *);
+void ply_xsust(struct MusicPlayerInfo *, struct MusicPlayerTrack *);
+void ply_xrele(struct MusicPlayerInfo *, struct MusicPlayerTrack *);
+void ply_xiecv(struct MusicPlayerInfo *, struct MusicPlayerTrack *);
+void ply_xiecl(struct MusicPlayerInfo *, struct MusicPlayerTrack *);
+void ply_xleng(struct MusicPlayerInfo *, struct MusicPlayerTrack *);
+void ply_xswee(struct MusicPlayerInfo *, struct MusicPlayerTrack *);
+void ply_xcmd_0C(struct MusicPlayerInfo *, struct MusicPlayerTrack *);
+void ply_xcmd_0D(struct MusicPlayerInfo *, struct MusicPlayerTrack *);
+
+#endif // GUARD_GBA_M4A_INTERNAL_H
diff --git a/berry_fix/payload/include/gba/macro.h b/berry_fix/payload/include/gba/macro.h
new file mode 100644
index 000000000..6f9c55f2e
--- /dev/null
+++ b/berry_fix/payload/include/gba/macro.h
@@ -0,0 +1,247 @@
+#ifndef GUARD_GBA_MACRO_H
+#define GUARD_GBA_MACRO_H
+
+#define CPU_FILL(value, dest, size, bit) \
+{ \
+ vu##bit tmp = (vu##bit)(value); \
+ CpuSet((void *)&tmp, \
+ dest, \
+ CPU_SET_##bit##BIT | CPU_SET_SRC_FIXED | ((size)/(bit/8) & 0x1FFFFF)); \
+}
+
+#define CpuFill16(value, dest, size) CPU_FILL(value, dest, size, 16)
+#define CpuFill32(value, dest, size) CPU_FILL(value, dest, size, 32)
+
+#define CPU_COPY(src, dest, size, bit) CpuSet(src, dest, CPU_SET_##bit##BIT | ((size)/(bit/8) & 0x1FFFFF))
+
+#define CpuCopy16(src, dest, size) CPU_COPY(src, dest, size, 16)
+#define CpuCopy32(src, dest, size) CPU_COPY(src, dest, size, 32)
+
+#define CpuFastFill(value, dest, size) \
+{ \
+ vu32 tmp = (vu32)(value); \
+ CpuFastSet((void *)&tmp, \
+ dest, \
+ CPU_FAST_SET_SRC_FIXED | ((size)/(32/8) & 0x1FFFFF)); \
+}
+
+#define CpuFastFill16(value, dest, size) CpuFastFill(((value) << 16) | (value), (dest), (size))
+
+#define CpuFastFill8(value, dest, size) CpuFastFill(((value) << 24) | ((value) << 16) | ((value) << 8) | (value), (dest), (size))
+
+#define CpuFastCopy(src, dest, size) CpuFastSet(src, dest, ((size)/(32/8) & 0x1FFFFF))
+
+#define DmaSet(dmaNum, src, dest, control) \
+{ \
+ vu32 *dmaRegs = (vu32 *)REG_ADDR_DMA##dmaNum; \
+ dmaRegs[0] = (vu32)(src); \
+ dmaRegs[1] = (vu32)(dest); \
+ dmaRegs[2] = (vu32)(control); \
+ dmaRegs[2]; \
+}
+
+#define DMA_FILL(dmaNum, value, dest, size, bit) \
+{ \
+ vu##bit tmp = (vu##bit)(value); \
+ DmaSet(dmaNum, \
+ &tmp, \
+ dest, \
+ (DMA_ENABLE | DMA_START_NOW | DMA_##bit##BIT | DMA_SRC_FIXED | DMA_DEST_INC) << 16 \
+ | ((size)/(bit/8))); \
+}
+
+#define DmaFill16(dmaNum, value, dest, size) DMA_FILL(dmaNum, value, dest, size, 16)
+#define DmaFill32(dmaNum, value, dest, size) DMA_FILL(dmaNum, value, dest, size, 32)
+
+// Note that the DMA clear macros cause the DMA control value to be calculated
+// at runtime rather than compile time. The size is divided by the DMA transfer
+// unit size (2 or 4 bytes) and then combined with the DMA control flags using a
+// bitwise OR operation.
+
+#define DMA_CLEAR(dmaNum, dest, size, bit) \
+{ \
+ vu##bit *_dest = (vu##bit *)(dest); \
+ u32 _size = size; \
+ DmaFill##bit(dmaNum, 0, _dest, _size); \
+}
+
+#define DmaClear16(dmaNum, dest, size) DMA_CLEAR(dmaNum, dest, size, 16)
+#define DmaClear32(dmaNum, dest, size) DMA_CLEAR(dmaNum, dest, size, 32)
+
+#define DMA_COPY(dmaNum, src, dest, size, bit) \
+ DmaSet(dmaNum, \
+ src, \
+ dest, \
+ (DMA_ENABLE | DMA_START_NOW | DMA_##bit##BIT | DMA_SRC_INC | DMA_DEST_INC) << 16 \
+ | ((size)/(bit/8)))
+
+#define DmaCopy16(dmaNum, src, dest, size) DMA_COPY(dmaNum, src, dest, size, 16)
+#define DmaCopy32(dmaNum, src, dest, size) DMA_COPY(dmaNum, src, dest, size, 32)
+
+#define DmaCopyLarge(dmaNum, src, dest, size, block, bit) \
+{ \
+ const void *_src = src; \
+ void *_dest = (void *)dest; \
+ u32 _size = size; \
+ while (1) \
+ { \
+ DmaCopy##bit(dmaNum, _src, _dest, (block)); \
+ _src += (block); \
+ _dest += (block); \
+ _size -= (block); \
+ if (_size <= (block)) \
+ { \
+ DmaCopy##bit(dmaNum, _src, _dest, _size); \
+ break; \
+ } \
+ } \
+}
+
+#define DmaCopyLarge16(dmaNum, src, dest, size, block) DmaCopyLarge(dmaNum, src, dest, size, block, 16)
+
+#define DmaCopyLarge32(dmaNum, src, dest, size, block) DmaCopyLarge(dmaNum, src, dest, size, block, 32)
+
+#define DmaFillLarge(dmaNum, value, dest, size, block, bit) \
+{ \
+ void *_dest = (void *)dest; \
+ u32 _size = size; \
+ while (1) \
+ { \
+ DmaFill##bit(dmaNum, value, _dest, (block)); \
+ _dest += (block); \
+ _size -= (block); \
+ if (_size <= (block)) \
+ { \
+ DmaFill##bit(dmaNum, value, _dest, _size); \
+ break; \
+ } \
+ } \
+}
+
+#define DmaFillLarge16(dmaNum, value, dest, size, block) DmaFillLarge(dmaNum, value, dest, size, block, 16)
+
+#define DmaFillLarge32(dmaNum, value, dest, size, block) DmaFillLarge(dmaNum, value, dest, size, block, 32)
+
+#define DmaClearLarge(dmaNum, dest, size, block, bit) \
+{ \
+ void *_dest = (void *)dest; \
+ u32 _size = size; \
+ while (1) \
+ { \
+ DmaFill##bit(dmaNum, 0, _dest, (block)); \
+ _dest += (block); \
+ _size -= (block); \
+ if (_size <= (block)) \
+ { \
+ DmaFill##bit(dmaNum, 0, _dest, _size); \
+ break; \
+ } \
+ } \
+}
+
+#define DmaClearLarge16(dmaNum, dest, size, block) DmaClearLarge(dmaNum, dest, size, block, 16)
+
+#define DmaClearLarge32(dmaNum, dest, size, block) DmaClearLarge(dmaNum, dest, size, block, 32)
+
+#define DmaCopyDefvars(dmaNum, src, dest, size, bit) \
+{ \
+ const void *_src = src; \
+ void *_dest = (void *)(dest); \
+ u32 _size = size; \
+ DmaCopy##bit(dmaNum, _src, _dest, _size); \
+}
+
+#define DmaCopy16Defvars(dmaNum, src, dest, size) DmaCopyDefvars(dmaNum, src, dest, size, 16)
+#define DmaCopy32Defvars(dmaNum, src, dest, size) DmaCopyDefvars(dmaNum, src, dest, size, 32)
+
+#define DmaFillDefvars(dmaNum, value, dest, size, bit) \
+{ \
+ void *_dest = (void *)dest; \
+ u32 _size = size; \
+ DmaFill##bit(dmaNum, value, _dest, _size); \
+}
+
+#define DmaFill16Defvars(dmaNum, value, dest, size) DmaFillDefvars(dmaNum, value, dest, size, 16)
+#define DmaFill32Defvars(dmaNum, value, dest, size) DmaFillDefvars(dmaNum, value, dest, size, 32)
+
+#define DmaClearDefvars(dmaNum, dest, size, bit) \
+{ \
+ void *_dest = (void *)dest; \
+ u32 _size = size; \
+ DmaClear##bit(dmaNum, _dest, _size); \
+}
+
+#define DmaClear16Defvars(dmaNum, dest, size) DmaClearDefvars(dmaNum, dest, size, 16)
+#define DmaClear32Defvars(dmaNum, dest, size) DmaClearDefvars(dmaNum, dest, size, 32)
+
+#define DmaStop(dmaNum) \
+{ \
+ vu16 *dmaRegs = (vu16 *)REG_ADDR_DMA##dmaNum; \
+ dmaRegs[5] &= ~(DMA_START_MASK | DMA_DREQ_ON | DMA_REPEAT); \
+ dmaRegs[5] &= ~DMA_ENABLE; \
+ dmaRegs[5]; \
+}
+
+#define IntrEnable(flags) \
+{ \
+ u16 imeTemp; \
+ \
+ imeTemp = REG_IME; \
+ REG_IME = 0; \
+ REG_IE |= flags; \
+ REG_IME = imeTemp; \
+} \
+// from pokeemerald
+// Maximum amount of data we will transfer in one operation
+#define MAX_DMA_BLOCK_SIZE 0x1000
+
+#define MAX_DMA_REQUESTS 128
+
+#define DMA_REQUEST_COPY32 1
+#define DMA_REQUEST_FILL32 2
+#define DMA_REQUEST_COPY16 3
+#define DMA_REQUEST_FILL16 4
+
+#define Dma3CopyLarge_(src, dest, size, bit) \
+{ \
+ const void *_src = src; \
+ void *_dest = (void *)dest; \
+ u32 _size = size; \
+ while (1) \
+ { \
+ if (_size <= MAX_DMA_BLOCK_SIZE) \
+ { \
+ DmaCopy##bit(3, _src, _dest, _size); \
+ break; \
+ } \
+ DmaCopy##bit(3, _src, _dest, MAX_DMA_BLOCK_SIZE); \
+ _src += MAX_DMA_BLOCK_SIZE; \
+ _dest += MAX_DMA_BLOCK_SIZE; \
+ _size -= MAX_DMA_BLOCK_SIZE; \
+ } \
+}
+
+#define Dma3CopyLarge16_(src, dest, size) Dma3CopyLarge_(src, dest, size, 16)
+#define Dma3CopyLarge32_(src, dest, size) Dma3CopyLarge_(src, dest, size, 32)
+
+#define Dma3FillLarge_(value, dest, size, bit) \
+{ \
+ void *_dest = (void *)dest; \
+ u32 _size = size; \
+ while (1) \
+ { \
+ if (_size <= MAX_DMA_BLOCK_SIZE) \
+ { \
+ DmaFill##bit(3, value, _dest, _size); \
+ break; \
+ } \
+ DmaFill##bit(3, value, _dest, MAX_DMA_BLOCK_SIZE); \
+ _dest += MAX_DMA_BLOCK_SIZE; \
+ _size -= MAX_DMA_BLOCK_SIZE; \
+ } \
+}
+
+#define Dma3FillLarge16_(value, dest, size) Dma3FillLarge_(value, dest, size, 16)
+#define Dma3FillLarge32_(value, dest, size) Dma3FillLarge_(value, dest, size, 32)
+
+#endif // GUARD_GBA_MACRO_H
diff --git a/berry_fix/payload/include/gba/multiboot.h b/berry_fix/payload/include/gba/multiboot.h
new file mode 100644
index 000000000..14b6594b2
--- /dev/null
+++ b/berry_fix/payload/include/gba/multiboot.h
@@ -0,0 +1,55 @@
+#ifndef GUARD_GBA_MULTIBOOT_H
+#define GUARD_GBA_MULTIBOOT_H
+
+#define MULTIBOOT_NCHILD 3 // Maximum number of slaves
+#define MULTIBOOT_HEADER_SIZE 0xc0 // Header size
+#define MULTIBOOT_SEND_SIZE_MIN 0x100 // Minimum transmission size
+#define MULTIBOOT_SEND_SIZE_MAX 0x40000 // Maximum transmission size
+
+struct MultiBootParam
+{
+ u32 system_work[5]; // 00
+ u8 handshake_data; // 14
+ u8 padding; // 15
+ u16 handshake_timeout; // 16
+ u8 probe_count; // 18
+ u8 client_data[MULTIBOOT_NCHILD]; // 19
+ u8 palette_data; // 1c
+ u8 response_bit; // 1d
+ u8 client_bit; // 1e
+ u8 reserved1; // 1f
+ const u8 *boot_srcp; // 20
+ const u8 *boot_endp; // 24
+ const u8 *masterp;
+ u8 *reserved2[MULTIBOOT_NCHILD];
+ u32 system_work2[4];
+ u8 sendflag;
+ u8 probe_target_bit;
+ u8 check_wait;
+ u8 server_type;
+};
+
+#define MULTIBOOT_ERROR_04 0x04
+#define MULTIBOOT_ERROR_08 0x08
+#define MULTIBOOT_ERROR_0c 0x0c
+#define MULTIBOOT_ERROR_40 0x40
+#define MULTIBOOT_ERROR_44 0x44
+#define MULTIBOOT_ERROR_48 0x48
+#define MULTIBOOT_ERROR_4c 0x4c
+#define MULTIBOOT_ERROR_80 0x80
+#define MULTIBOOT_ERROR_84 0x84
+#define MULTIBOOT_ERROR_88 0x88
+#define MULTIBOOT_ERROR_8c 0x8c
+#define MULTIBOOT_ERROR_NO_PROBE_TARGET 0x50
+#define MULTIBOOT_ERROR_NO_DLREADY 0x60
+#define MULTIBOOT_ERROR_BOOT_FAILURE 0x70
+#define MULTIBOOT_ERROR_HANDSHAKE_FAILURE 0x71
+
+#define MULTIBOOT_CONNECTION_CHECK_WAIT 15
+
+#define MULTIBOOT_SERVER_TYPE_NORMAL 0
+#define MULTIBOOT_SERVER_TYPE_QUICK 1
+
+#define MULTIBOOT_HANDSHAKE_TIMEOUT 400
+
+#endif // GUARD_GBA_MULTIBOOT_H
diff --git a/berry_fix/payload/include/gba/syscall.h b/berry_fix/payload/include/gba/syscall.h
new file mode 100644
index 000000000..eb1bd4e20
--- /dev/null
+++ b/berry_fix/payload/include/gba/syscall.h
@@ -0,0 +1,57 @@
+#ifndef GUARD_GBA_SYSCALL_H
+#define GUARD_GBA_SYSCALL_H
+
+#include "gba/types.h"
+
+#define RESET_EWRAM 0x01
+#define RESET_IWRAM 0x02
+#define RESET_PALETTE 0x04
+#define RESET_VRAM 0x08
+#define RESET_OAM 0x10
+#define RESET_SIO_REGS 0x20
+#define RESET_SOUND_REGS 0x40
+#define RESET_REGS 0x80
+#define RESET_ALL 0xFF
+
+void SoftReset(u32 resetFlags);
+
+void RegisterRamReset(u32 resetFlags);
+
+void VBlankIntrWait(void);
+
+u16 Sqrt(u32 num);
+
+u16 ArcTan2(s16 x, s16 y);
+
+#define CPU_SET_SRC_FIXED 0x01000000
+#define CPU_SET_16BIT 0x00000000
+#define CPU_SET_32BIT 0x04000000
+
+void CpuSet(const void *src, void *dest, u32 control);
+
+#define CPU_FAST_SET_SRC_FIXED 0x01000000
+
+void CpuFastSet(const void *src, void *dest, u32 control);
+
+void BgAffineSet(struct BgAffineSrcData *src, struct BgAffineDstData *dest, s32 count);
+
+void ObjAffineSet(struct ObjAffineSrcData *src, void *dest, s32 count, s32 offset);
+
+void LZ77UnCompWram(const void *src, void *dest);
+
+void LZ77UnCompVram(const void *src, void *dest);
+
+void RLUnCompWram(const void *src, void *dest);
+
+void RLUnCompVram(const void *src, void *dest);
+
+int MultiBoot(struct MultiBootParam *mp);
+
+void SoundBiasReset(void);
+
+void SoundBiasSet(void);
+
+u32 Div(u32 divisor, u32 dividend);
+u32 Mod(u32 divisor, u32 dividend);
+
+#endif // GUARD_GBA_SYSCALL_H
diff --git a/berry_fix/payload/include/gba/types.h b/berry_fix/payload/include/gba/types.h
new file mode 100644
index 000000000..e919abc22
--- /dev/null
+++ b/berry_fix/payload/include/gba/types.h
@@ -0,0 +1,146 @@
+#ifndef GUARD_GBA_TYPES_H
+#define GUARD_GBA_TYPES_H
+
+#include <stdint.h>
+
+typedef uint8_t u8;
+typedef uint16_t u16;
+typedef uint32_t u32;
+typedef uint64_t u64;
+typedef int8_t s8;
+typedef int16_t s16;
+typedef int32_t s32;
+typedef int64_t s64;
+
+typedef volatile u8 vu8;
+typedef volatile u16 vu16;
+typedef volatile u32 vu32;
+typedef volatile u64 vu64;
+typedef volatile s8 vs8;
+typedef volatile s16 vs16;
+typedef volatile s32 vs32;
+typedef volatile s64 vs64;
+
+typedef float f32;
+typedef double f64;
+
+typedef u8 bool8;
+typedef u16 bool16;
+typedef u32 bool32;
+
+struct BgCnt
+{
+ u16 priority:2;
+ u16 charBaseBlock:2;
+ u16 dummy:2;
+ u16 mosaic:1;
+ u16 palettes:1;
+ u16 screenBaseBlock:5;
+ u16 areaOverflowMode:1;
+ u16 screenSize:2;
+};
+typedef volatile struct BgCnt vBgCnt;
+
+struct PlttData
+{
+ u16 r:5; // red
+ u16 g:5; // green
+ u16 b:5; // blue
+ u16 unused_15:1;
+};
+
+struct OamData
+{
+ /*0x00*/ u32 y:8;
+ /*0x01*/ u32 affineMode:2; // 0x1, 0x2 -> 0x4
+ u32 objMode:2; // 0x4, 0x8 -> 0xC
+ u32 mosaic:1; // 0x10
+ u32 bpp:1; // 0x20
+ u32 shape:2; // 0x40, 0x80 -> 0xC0
+
+ /*0x02*/ u32 x:9;
+ u32 matrixNum:5; // bits 3/4 are h-flip/v-flip if not in affine mode
+ u32 size:2;
+
+ /*0x04*/ u16 tileNum:10; // 0x3FF
+ u16 priority:2; // 0x400, 0x800 -> 0xC00
+ u16 paletteNum:4;
+ /*0x06*/ u16 affineParam;
+};
+
+#define ST_OAM_OBJ_NORMAL 0
+#define ST_OAM_OBJ_BLEND 1
+#define ST_OAM_OBJ_WINDOW 2
+
+#define ST_OAM_AFFINE_OFF 0
+#define ST_OAM_AFFINE_NORMAL 1
+#define ST_OAM_AFFINE_ERASE 2
+#define ST_OAM_AFFINE_DOUBLE 3
+
+#define ST_OAM_AFFINE_ON_MASK 1
+#define ST_OAM_AFFINE_DOUBLE_MASK 2
+
+#define ST_OAM_4BPP 0
+#define ST_OAM_8BPP 1
+
+#define ST_OAM_SQUARE 0
+#define ST_OAM_H_RECTANGLE 1
+#define ST_OAM_V_RECTANGLE 2
+
+struct BgAffineSrcData
+{
+ s32 texX;
+ s32 texY;
+ s16 scrX;
+ s16 scrY;
+ s16 sx;
+ s16 sy;
+ u16 alpha;
+};
+
+struct BgAffineDstData
+{
+ s16 pa;
+ s16 pb;
+ s16 pc;
+ s16 pd;
+ s32 dx;
+ s32 dy;
+};
+
+struct ObjAffineSrcData
+{
+ s16 xScale;
+ s16 yScale;
+ u16 rotation;
+};
+
+// Multi-player SIO Control Structure
+struct SioMultiCnt
+{
+ u16 baudRate:2; // baud rate
+ u16 si:1; // SI terminal
+ u16 sd:1; // SD terminal
+ u16 id:2; // ID
+ u16 error:1; // error flag
+ u16 enable:1; // SIO enable
+ u16 unused_11_8:4;
+ u16 mode:2; // communication mode (should equal 2)
+ u16 intrEnable:1; // IRQ enable
+ u16 unused_15:1;
+ u16 data; // data
+};
+
+#define ST_SIO_MULTI_MODE 2 // Multi-player communication mode
+
+// baud rate
+#define ST_SIO_9600_BPS 0 // 9600 bps
+#define ST_SIO_38400_BPS 1 // 38400 bps
+#define ST_SIO_57600_BPS 2 // 57600 bps
+#define ST_SIO_115200_BPS 3 // 115200 bps
+
+typedef void (*MainCallback)(void);
+typedef void (*IntrCallback)(void);
+typedef void (*IntrFunc)(void);
+
+#endif // GUARD_GBA_TYPES_H
diff --git a/berry_fix/payload/include/global.berry.h b/berry_fix/payload/include/global.berry.h
new file mode 100644
index 000000000..8f185c8f9
--- /dev/null
+++ b/berry_fix/payload/include/global.berry.h
@@ -0,0 +1,62 @@
+#ifndef GUARD_GLOBAL_BERRY_H
+#define GUARD_GLOBAL_BERRY_H
+
+struct Berry
+{
+ /*0x00*/ u8 name[7];
+ /*0x07*/ u8 firmness;
+ /*0x08*/ u16 size;
+ /*0x0A*/ u8 maxYield;
+ /*0x0B*/ u8 minYield;
+ /*0x0C*/ const u8 *description1;
+ /*0x10*/ const u8 *description2;
+ /*0x14*/ u8 stageDuration;
+ /*0x15*/ u8 spicy;
+ /*0x16*/ u8 dry;
+ /*0x17*/ u8 sweet;
+ /*0x18*/ u8 bitter;
+ /*0x19*/ u8 sour;
+ /*0x1A*/ u8 smoothness;
+};
+
+struct EnigmaBerry
+{
+ /*0x000*/ struct Berry berry;
+ /*0x01B*/ u8 pic[(6 * 6) * TILE_SIZE_4BPP];
+ /*0x49C*/ u16 palette[16];
+ /*0x4BC*/ u8 description1[45];
+ /*0x4E9*/ u8 description2[45];
+ /*0x516*/ u8 itemEffect[18];
+ /*0x528*/ u8 holdEffect;
+ /*0x529*/ u8 holdEffectParam;
+ /*0x52C*/ u32 checksum;
+};
+
+struct BattleEnigmaBerry
+{
+ /*0x00*/ u8 name[7];
+ /*0x07*/ u8 holdEffect;
+ /*0x08*/ u8 itemEffect[18];
+ /*0x1A*/ u8 holdEffectParam;
+};
+
+struct BerryTree
+{
+ /*0x00*/ u8 berry;
+ /*0x01*/ u8 stage:7;
+ /*
+ A berry sparkle is a state that a berry tree
+ can be in after growing within the player's
+ viewport.
+ */
+ /*0x01*/ bool8 growthSparkle:1;
+ /*0x02*/ u16 minutesUntilNextStage;
+ /*0x04*/ u8 berryYield;
+ /*0x05*/ u8 regrowthCount:4;
+ /*0x05*/ u8 watered1:1;
+ /*0x05*/ u8 watered2:1;
+ /*0x05*/ u8 watered3:1;
+ /*0x05*/ u8 watered4:1;
+};
+
+#endif // GUARD_GLOBAL_BERRY_H
diff --git a/berry_fix/payload/include/global.fieldmap.h b/berry_fix/payload/include/global.fieldmap.h
new file mode 100644
index 000000000..f876e5a56
--- /dev/null
+++ b/berry_fix/payload/include/global.fieldmap.h
@@ -0,0 +1,317 @@
+#ifndef GUARD_GLOBAL_FIELDMAP_H
+#define GUARD_GLOBAL_FIELDMAP_H
+
+enum
+{
+ CONNECTION_SOUTH = 1,
+ CONNECTION_NORTH,
+ CONNECTION_WEST,
+ CONNECTION_EAST,
+ CONNECTION_DIVE,
+ CONNECTION_EMERGE
+};
+
+typedef void (*TilesetCB)(void);
+
+struct Tileset
+{
+ /*0x00*/ bool8 isCompressed;
+ /*0x01*/ bool8 isSecondary;
+ /*0x04*/ void *tiles;
+ /*0x08*/ void *palettes;
+ /*0x0c*/ void *metatiles;
+ /*0x10*/ void *metatileAttributes;
+ /*0x14*/ TilesetCB callback;
+};
+
+struct MapLayout
+{
+ /*0x00*/ s32 width;
+ /*0x04*/ s32 height;
+ /*0x08*/ u16 *border;
+ /*0x0c*/ u16 *map;
+ /*0x10*/ struct Tileset *primaryTileset;
+ /*0x14*/ struct Tileset *secondaryTileset;
+};
+
+struct BackupMapLayout
+{
+ s32 width;
+ s32 height;
+ u16 *map;
+};
+
+struct EventObjectTemplate
+{
+ /*0x00*/ u8 localId;
+ /*0x01*/ u8 graphicsId;
+ /*0x02*/ u8 unk2;
+ /*0x04*/ s16 x;
+ /*0x06*/ s16 y;
+ /*0x08*/ u8 elevation;
+ /*0x09*/ u8 movementType;
+ /*0x0A*/ u8 movementRangeX:4;
+ u8 movementRangeY:4;
+ /*0x0C*/ u16 trainerType;
+ /*0x0E*/ u16 trainerRange_berryTreeId;
+ /*0x10*/ u8 *script;
+ /*0x14*/ u16 flagId;
+};
+
+struct WarpEvent
+{
+ s16 x, y;
+ u8 elevation;
+ u8 warpId;
+ u8 mapNum;
+ u8 mapGroup;
+};
+
+struct CoordEvent
+{
+ s16 x, y;
+ u8 elevation;
+ u16 trigger;
+ u16 index;
+ u8 filler_A[0x2];
+ u8 *script;
+};
+
+struct BgEvent
+{
+ /*0x00*/u16 x;
+ /*0x02*/u16 y;
+ /*0x04*/u8 elevation;
+ /*0x05*/u8 kind;
+ /*0x08*/union { // carried over from diego's FR/LG work, seems to be the same struct
+ // in gen 3, "kind" (0x3 in BgEvent struct) determines the method to read the union.
+ u8 *script;
+
+ // hidden item type
+ struct {
+ u16 item;
+ u16 hiddenItemId; // flag offset to determine flag lookup
+ } hiddenItem;
+
+ // secret base type
+ u32 secretBaseId;
+
+ } bgUnion;
+};
+
+struct MapEvents
+{
+ u8 eventObjectCount;
+ u8 warpCount;
+ u8 coordEventCount;
+ u8 bgEventCount;
+
+ struct EventObjectTemplate *eventObjects;
+ struct WarpEvent *warps;
+ struct CoordEvent *coordEvents;
+ struct BgEvent *bgEvents;
+};
+
+struct MapConnection
+{
+ /*0x00*/ u8 direction;
+ /*0x01*/ u32 offset;
+ /*0x05*/ u8 mapGroup;
+ /*0x06*/ u8 mapNum;
+};
+
+struct MapConnections
+{
+ s32 count;
+ struct MapConnection *connections;
+};
+
+struct MapHeader
+{
+ /* 0x00 */ struct MapLayout *mapLayout;
+ /* 0x04 */ struct MapEvents *events;
+ /* 0x08 */ u8 *mapScripts;
+ /* 0x0C */ struct MapConnections *connections;
+ /* 0x10 */ u16 music;
+ /* 0x12 */ u16 mapLayoutId;
+ /* 0x14 */ u8 regionMapSectionId;
+ /* 0x15 */ u8 cave;
+ /* 0x16 */ u8 weather;
+ /* 0x17 */ u8 mapType;
+ /* 0x18 */ u8 filler_18;
+ /* 0x19 */ u8 escapeRope;
+ /* 0x1A */ u8 flags;
+ /* 0x1B */ u8 battleType;
+};
+
+struct EventObject
+{
+ /*0x00*/ u32 active:1;
+ u32 singleMovementActive:1;
+ u32 triggerGroundEffectsOnMove:1;
+ u32 triggerGroundEffectsOnStop:1;
+ u32 disableCoveringGroundEffects:1; // disables ground effects that cover parts of the object's sprite
+ u32 landingJump:1;
+ u32 heldMovementActive:1;
+ u32 heldMovementFinished:1;
+ /*0x01*/ u32 frozen:1;
+ u32 facingDirectionLocked:1;
+ u32 disableAnim:1; // used to disable forced movement sliding animations (like on ice)
+ u32 enableAnim:1;
+ u32 inanimate:1;
+ u32 invisible:1;
+ u32 offScreen:1;
+ u32 trackedByCamera:1; // only set for the player object
+ /*0x02*/ u32 isPlayer:1;
+ u32 hasReflection:1;
+ u32 inShortGrass:1;
+ u32 inShallowFlowingWater:1;
+ u32 inSandPile:1;
+ u32 inHotSprings:1;
+ u32 hasShadow:1;
+ u32 spriteAnimPausedBackup:1;
+ /*0x03*/ u32 spriteAffineAnimPausedBackup:1;
+ u32 disableJumpLandingGroundEffect:1;
+ u32 fixedPriority:1;
+ /*0x04*/ u8 spriteId;
+ /*0x05*/ u8 graphicsId;
+ /*0x06*/ u8 movementType;
+ /*0x07*/ u8 trainerType;
+ /*0x08*/ u8 localId;
+ /*0x09*/ u8 mapNum;
+ /*0x0A*/ u8 mapGroup;
+ /*0x0B*/ u8 currentElevation:4;
+ u8 previousElevation:4;
+ /*0x0C*/ struct Coords16 initialCoords;
+ /*0x10*/ struct Coords16 currentCoords;
+ /*0x14*/ struct Coords16 previousCoords;
+ /*0x18*/ u8 facingDirection:4;
+ /*0x18*/ u8 movementDirection:4;
+ /*0x19*/ union __attribute__((packed)) {
+ u8 as_byte;
+ struct __attribute__((packed)) {
+ u16 x:4;
+ u16 y:4;
+ } as_nybbles;
+ } range;
+ /*0x1A*/ u8 fieldEffectSpriteId;
+ /*0x1B*/ u8 warpArrowSpriteId;
+ /*0x1C*/ u8 movementActionId;
+ /*0x1D*/ u8 trainerRange_berryTreeId;
+ /*0x1E*/ u8 currentMetatileBehavior;
+ /*0x1F*/ u8 previousMetatileBehavior;
+ /*0x20*/ u8 previousMovementDirection;
+ /*0x21*/ u8 directionSequenceIndex;
+ /*0x22*/ u8 playerCopyableMovement; // used as an index to gCopyPlayerMovementFuncs for the "copy player" movement types
+ /*size = 0x24*/
+};
+
+struct EventObjectGraphicsInfo
+{
+ /*0x00*/ u16 tileTag;
+ /*0x02*/ u16 paletteTag;
+ /*0x04*/ u16 bridgeReflectionPaletteTag;
+ /*0x06*/ u16 size;
+ /*0x08*/ s16 width;
+ /*0x0A*/ s16 height;
+ /*0x0C*/ u8 paletteSlot:4;
+ u8 shadowSize:2;
+ u8 inanimate:1;
+ u8 disableReflectionPaletteLoad:1;
+ /*0x0D*/ u8 tracks;
+ /*0x10*/ const struct OamData *oam;
+ /*0x14*/ const struct SubspriteTable *subspriteTables;
+ /*0x18*/ const union AnimCmd *const *anims;
+ /*0x1C*/ const struct SpriteFrameImage *images;
+ /*0x20*/ const union AffineAnimCmd *const *affineAnims;
+};
+
+#define PLAYER_AVATAR_FLAG_ON_FOOT (1 << 0)
+#define PLAYER_AVATAR_FLAG_MACH_BIKE (1 << 1)
+#define PLAYER_AVATAR_FLAG_ACRO_BIKE (1 << 2)
+#define PLAYER_AVATAR_FLAG_SURFING (1 << 3)
+#define PLAYER_AVATAR_FLAG_UNDERWATER (1 << 4)
+#define PLAYER_AVATAR_FLAG_5 (1 << 5)
+#define PLAYER_AVATAR_FLAG_6 (1 << 6)
+#define PLAYER_AVATAR_FLAG_DASH (1 << 7)
+
+enum
+{
+ ACRO_BIKE_NORMAL,
+ ACRO_BIKE_TURNING,
+ ACRO_BIKE_WHEELIE_STANDING,
+ ACRO_BIKE_BUNNY_HOP,
+ ACRO_BIKE_WHEELIE_MOVING,
+ ACRO_BIKE_STATE5,
+ ACRO_BIKE_STATE6,
+};
+
+enum
+{
+ DIR_NONE,
+ DIR_SOUTH,
+ DIR_NORTH,
+ DIR_WEST,
+ DIR_EAST,
+ DIR_SOUTHWEST,
+ DIR_SOUTHEAST,
+ DIR_NORTHWEST,
+ DIR_NORTHEAST,
+};
+
+enum
+{
+ COLLISION_LEDGE_JUMP = 6
+};
+
+// player running states
+enum
+{
+ NOT_MOVING,
+ TURN_DIRECTION, // not the same as turning! turns your avatar without moving. also known as a turn frame in some circles
+ MOVING,
+};
+
+// player tile transition states
+enum
+{
+ T_NOT_MOVING,
+ T_TILE_TRANSITION,
+ T_TILE_CENTER, // player is on a frame in which they are centered on a tile during which the player either stops or keeps their momentum and keeps going, changing direction if necessary.
+};
+
+struct PlayerAvatar /* 0x202E858 */
+{
+ /*0x00*/ u8 flags;
+ /*0x01*/ u8 unk1; // used to be named bike, but its definitely not that. seems to be some transition flags
+ /*0x02*/ u8 runningState; // this is a static running state. 00 is not moving, 01 is turn direction, 02 is moving.
+ /*0x03*/ u8 tileTransitionState; // this is a transition running state: 00 is not moving, 01 is transition between tiles, 02 means you are on the frame in which you have centered on a tile but are about to keep moving, even if changing directions. 2 is also used for a ledge hop, since you are transitioning.
+ /*0x04*/ u8 spriteId;
+ /*0x05*/ u8 eventObjectId;
+ /*0x06*/ bool8 preventStep;
+ /*0x07*/ u8 gender;
+ /*0x08*/ u8 acroBikeState; // 00 is normal, 01 is turning, 02 is standing wheelie, 03 is hopping wheelie
+ /*0x09*/ u8 newDirBackup; // during bike movement, the new direction as opposed to player's direction is backed up here.
+ /*0x0A*/ u8 bikeFrameCounter; // on the mach bike, when this value is 1, the bike is moving but not accelerating yet for 1 tile. on the acro bike, this acts as a timer for acro bike.
+ /*0x0B*/ u8 bikeSpeed;
+ // acro bike only
+ /*0x0C*/ u32 directionHistory; // up/down/left/right history is stored in each nybble, but using the field directions and not the io inputs.
+ /*0x10*/ u32 abStartSelectHistory; // same as above but for A + B + start + select only
+ // these two are timer history arrays which [0] is the active timer for acro bike. every element is backed up to the next element upon update.
+ /*0x14*/ u8 dirTimerHistory[8];
+ /*0x1C*/ u8 abStartSelectTimerHistory[8];
+};
+
+struct Camera
+{
+ bool8 active:1;
+ s32 x;
+ s32 y;
+};
+
+extern struct EventObject gMapObjects[];
+extern u8 gSelectedEventObject;
+extern struct MapHeader gMapHeader;
+extern struct PlayerAvatar gPlayerAvatar;
+
+#endif // GUARD_GLOBAL_FIELDMAP_H
diff --git a/berry_fix/payload/include/global.h b/berry_fix/payload/include/global.h
new file mode 100644
index 000000000..c218b5f4e
--- /dev/null
+++ b/berry_fix/payload/include/global.h
@@ -0,0 +1,875 @@
+#ifndef GUARD_GLOBAL_H
+#define GUARD_GLOBAL_H
+
+#include "gba/gba.h"
+
+// global.h from pokemon ruby
+
+// IDE support
+#if defined(__APPLE__) || defined(__CYGWIN__)
+#define _(x) x
+#define __(x) x
+#define INCBIN(x) {0}
+#define INCBIN_U8 INCBIN
+#define INCBIN_U16 INCBIN
+#define INCBIN_U32 INCBIN
+#define INCBIN_S8 INCBIN
+#define INCBIN_S16 INCBIN
+#define INCBIN_S32 INCBIN
+#endif
+
+// Prevent cross-jump optimization.
+#define BLOCK_CROSS_JUMP asm("");
+
+// to help in decompiling
+#define asm_comment(x) asm volatile("@ -- " x " -- ")
+
+#define asm_unified(x) asm(".syntax unified\n" x "\n.syntax divided\n")
+
+#define ARRAY_COUNT(array) (sizeof(array) / sizeof((array)[0]))
+
+
+#define POKEMON_SLOTS_NUMBER 412
+#define POKEMON_NAME_LENGTH 10
+#define OT_NAME_LENGTH 7
+
+#define min(a, b) ((a) < (b) ? (a) : (b))
+#define max(a, b) ((a) >= (b) ? (a) : (b))
+
+// why does GF hate 2d arrays
+#define MULTI_DIM_ARR(x, dim, y) ((x) * dim + (y))
+
+// dim access enums
+enum
+{
+ B_8 = 1,
+ B_16 = 2,
+ B_32 = 4
+};
+
+// There are many quirks in the source code which have overarching behavioral differences from
+// a number of other files. For example, diploma.c seems to declare rodata before each use while
+// other files declare out of order and must be at the beginning. There are also a number of
+// macros which differ from one file to the next due to the method of obtaining the result, such
+// as these below. Because of this, there is a theory (Two Team Theory) that states that these
+// programming projects had more than 1 "programming team" which utilized different macros for
+// each of the files that were worked on.
+#define T1_READ_8(ptr) ((ptr)[0])
+#define T1_READ_16(ptr) ((ptr)[0] | ((ptr)[1] << 8))
+#define T1_READ_32(ptr) ((ptr)[0] | ((ptr)[1] << 8) | ((ptr)[2] << 16) | ((ptr)[3] << 24))
+#define T1_READ_PTR(ptr) (u8*) T1_READ_32(ptr)
+
+// T2_READ_8 is a duplicate to remain consistent with each group.
+#define T2_READ_8(ptr) ((ptr)[0])
+#define T2_READ_16(ptr) ((ptr)[0] + ((ptr)[1] << 8))
+#define T2_READ_32(ptr) ((ptr)[0] + ((ptr)[1] << 8) + ((ptr)[2] << 16) + ((ptr)[3] << 24))
+#define T2_READ_PTR(ptr) (void*) T2_READ_32(ptr)
+
+// Credits to Made (dolphin emoji)
+#define S16TOPOSFLOAT(val) \
+({ \
+ s16 v = (val); \
+ float f = (float)v; \
+ if(v < 0) f += 65536.0f; \
+ f; \
+})
+
+enum
+{
+ VERSION_SAPPHIRE = 1,
+ VERSION_RUBY = 2,
+ VERSION_EMERALD = 3,
+};
+
+enum LanguageId
+{
+ LANGUAGE_JAPANESE = 1,
+ LANGUAGE_ENGLISH = 2,
+ LANGUAGE_GERMAN = 5,
+};
+
+// capacities of various saveblock objects
+#define DAYCARE_MON_COUNT 2
+#define POKEBLOCKS_COUNT 40
+#define PARTY_SIZE 6
+#define EVENT_OBJECTS_COUNT 16
+#define BERRY_TREES_COUNT 128
+#define FLAGS_COUNT 288
+#define VARS_COUNT 256
+#define MAIL_COUNT 16
+#define SECRET_BASES_COUNT 20
+#define TV_SHOWS_COUNT 25
+#define POKE_NEWS_COUNT 16
+#define PC_ITEMS_COUNT 50
+#define BAG_ITEMS_COUNT 20
+#define BAG_KEYITEMS_COUNT 20
+#define BAG_POKEBALLS_COUNT 16
+#define BAG_TMHM_COUNT 64
+#define BAG_BERRIES_COUNT 46
+
+enum
+{
+ MALE,
+ FEMALE
+};
+
+enum
+{
+ OPTIONS_BUTTON_MODE_NORMAL,
+ OPTIONS_BUTTON_MODE_LR,
+ OPTIONS_BUTTON_MODE_L_EQUALS_A
+};
+
+enum
+{
+ OPTIONS_TEXT_SPEED_SLOW,
+ OPTIONS_TEXT_SPEED_MID,
+ OPTIONS_TEXT_SPEED_FAST
+};
+
+enum
+{
+ OPTIONS_SOUND_MONO,
+ OPTIONS_SOUND_STEREO
+};
+
+enum
+{
+ OPTIONS_BATTLE_STYLE_SHIFT,
+ OPTIONS_BATTLE_STYLE_SET
+};
+
+enum
+{
+ BAG_ITEMS = 1,
+ BAG_POKEBALLS,
+ BAG_TMsHMs,
+ BAG_BERRIES,
+ BAG_KEYITEMS
+};
+
+struct Coords16
+{
+ s16 x;
+ s16 y;
+};
+
+struct UCoords16
+{
+ u16 x;
+ u16 y;
+};
+
+struct SecretBaseRecord
+{
+ /*0x1A08*/ u8 secretBaseId;
+ /*0x1A09*/ u8 sbr_field_1_0:4;
+ /*0x1A09*/ u8 gender:1;
+ /*0x1A09*/ u8 sbr_field_1_5:1;
+ /*0x1A09*/ u8 sbr_field_1_6:2;
+ /*0x1A0A*/ u8 playerName[OT_NAME_LENGTH];
+ /*0x1A11*/ u8 trainerId[4]; // byte 0 is used for determining trainer class
+ /*0x1A16*/ u16 sbr_field_e;
+ /*0x1A18*/ u8 sbr_field_10;
+ /*0x1A19*/ u8 sbr_field_11;
+ /*0x1A1A*/ u8 decorations[16];
+ /*0x1A2A*/ u8 decorationPos[16];
+ /*0x1A3C*/ u32 partyPersonality[6];
+ /*0x1A54*/ u16 partyMoves[6 * 4];
+ /*0x1A84*/ u16 partySpecies[6];
+ /*0x1A90*/ u16 partyHeldItems[6];
+ /*0x1A9C*/ u8 partyLevels[6];
+ /*0x1AA2*/ u8 partyEVs[6];
+};
+
+#include "constants/game_stat.h"
+#include "global.fieldmap.h"
+#include "global.berry.h"
+#include "pokemon.h"
+
+struct WarpData
+{
+ s8 mapGroup;
+ s8 mapNum;
+ s8 warpId;
+ s16 x, y;
+};
+
+struct ItemSlot
+{
+ u16 itemId;
+ u16 quantity;
+};
+
+struct Pokeblock
+{
+ u8 color;
+ u8 spicy;
+ u8 dry;
+ u8 sweet;
+ u8 bitter;
+ u8 sour;
+ u8 feel;
+};
+
+struct Roamer
+{
+ /*0x00*/ u32 ivs;
+ /*0x04*/ u32 personality;
+ /*0x08*/ u16 species;
+ /*0x0A*/ u16 hp;
+ /*0x0C*/ u8 level;
+ /*0x0D*/ u8 status;
+ /*0x0E*/ u8 cool;
+ /*0x0F*/ u8 beauty;
+ /*0x10*/ u8 cute;
+ /*0x11*/ u8 smart;
+ /*0x12*/ u8 tough;
+ /*0x13*/ bool8 active;
+ /*0x14*/ u8 filler[0x8];
+};
+
+struct RamScriptData
+{
+ u8 magic;
+ u8 mapGroup;
+ u8 mapNum;
+ u8 objectId;
+ u8 script[995];
+};
+
+struct RamScript
+{
+ u32 checksum;
+ struct RamScriptData data;
+};
+
+struct EasyChatPair
+{
+ u16 unk0_0:7;
+ u16 unk0_7:7;
+ u16 unk1_6:1;
+ u16 unk2;
+ u16 words[2];
+}; /*size = 0x8*/
+
+struct TVShowCommon
+{
+ /*0x00*/ u8 kind;
+ /*0x01*/ bool8 active;
+ /*0x02*/ u8 pad02[20];
+ /*0x16*/ u16 var16[3];
+ /*0x1C*/ u8 srcTrainerId3Lo;
+ /*0x1D*/ u8 srcTrainerId3Hi;
+ /*0x1E*/ u8 srcTrainerId2Lo;
+ /*0x1F*/ u8 srcTrainerId2Hi;
+ /*0x20*/ u8 srcTrainerIdLo;
+ /*0x21*/ u8 srcTrainerIdHi;
+ /*0x22*/ u8 trainerIdLo;
+ /*0x23*/ u8 trainerIdHi;
+};
+
+struct TVShowFanClubLetter
+{
+ /*0x00*/ u8 kind;
+ /*0x01*/ bool8 active;
+ /*0x02*/ u16 species;
+ /*0x04*/ u16 pad04[6];
+ /*0x10*/ u8 playerName[8];
+ /*0x18*/ u8 language;
+};
+
+struct TVShowRecentHappenings
+{
+ /*0x00*/ u8 kind;
+ /*0x01*/ bool8 active;
+ /*0x02*/ u16 var02;
+ /*0x04*/ u16 var04[6];
+ /*0x10*/ u8 playerName[8];
+ /*0x18*/ u8 language;
+ /*0x19*/ u8 pad19[10];
+};
+
+struct TVShowFanclubOpinions
+{
+ /*0x00*/ u8 kind;
+ /*0x01*/ bool8 active;
+ /*0x02*/ u16 var02;
+ /*0x04*/ u8 var04A:4;
+ /*0x04*/ u8 var04B:4;
+ /*0x05*/ u8 playerName[8];
+ /*0x0D*/ u8 language;
+ /*0x0E*/ u8 var0E;
+ /*0x0F*/ u8 var0F;
+ /*0x10*/ u8 var10[8];
+ /*0x18*/ u16 var18[2];
+ /*0x1C*/ u16 var1C[4];
+};
+
+struct TVShowUnknownType04
+{
+ /*0x00*/ u8 kind;
+ /*0x01*/ bool8 active;
+ /*0x02*/ u8 pad02[4];
+ /*0x06*/ u16 var06;
+};
+
+struct TVShowNameRaterShow
+{
+ /*0x00*/ u8 kind;
+ /*0x01*/ bool8 active;
+ /*0x02*/ u16 species;
+ /*0x04*/ u8 pokemonName[11];
+ /*0x0F*/ u8 trainerName[11];
+ /*0x1A*/ u8 random;
+ /*0x1B*/ u8 random2;
+ /*0x1C*/ u16 var1C;
+ /*0x1E*/ u8 language;
+ /*0x1F*/ u8 pokemonNameLanguage;
+};
+
+struct TVShowBravoTrainerPokemonProfiles
+{
+ /*0x00*/ u8 kind;
+ /*0x01*/ bool8 active;
+ /*0x02*/ u16 species;
+ /*0x04*/ u16 var04[2];
+ /*0x08*/ u8 pokemonNickname[11];
+ /*0x13*/ u8 contestCategory:3;
+ /*0x13*/ u8 contestRank:2;
+ /*0x13*/ u8 contestResult:2;
+ /*0x13*/ u8 var13_7:1;
+ /*0x14*/ u16 var14;
+ /*0x16*/ u8 playerName[8];
+ /*0x1E*/ u8 language;
+ /*0x1F*/ u8 var1f;
+};
+
+struct TVShowBravoTrainerBattleTowerSpotlight
+{
+ /*0x00*/ u8 kind;
+ /*0x01*/ bool8 active;
+ /*0x02*/ u8 trainerName[8];
+ /*0x0A*/ u16 species;
+ /*0x0C*/ u8 enemyTrainerName[8];
+ /*0x14*/ u16 defeatedSpecies;
+ /*0x16*/ u16 var16;
+ /*0x18*/ u16 var18[1];
+ /*0x1A*/ u8 btLevel;
+ /*0x1B*/ u8 var1b;
+ /*0x1C*/ u8 var1c;
+ /*0x1D*/ u8 language;
+};
+
+struct TVShowPokemonToday
+{
+ /*0x00*/ u8 kind;
+ /*0x01*/ bool8 active;
+ /*0x02*/ u8 language;
+ /*0x03*/ u8 language2;
+ /*0x04*/ u8 nickname[11];
+ /*0x0F*/ u8 ball;
+ /*0x10*/ u16 species;
+ /*0x12*/ u8 var12;
+ /*0x13*/ u8 playerName[8];
+};
+
+struct TVShowSmartShopper
+{
+ /*0x00*/ u8 kind;
+ /*0x01*/ bool8 active;
+ /*0x02*/ u8 priceReduced;
+ /*0x03*/ u8 language;
+ /*0x04*/ u8 pad04[2];
+ /*0x06*/ u16 itemIds[3];
+ /*0x0C*/ u16 itemAmounts[3];
+ /*0x12*/ u8 shopLocation;
+ /*0x13*/ u8 playerName[8];
+};
+
+struct TVShowPokemonTodayFailed
+{
+ /*0x00*/ u8 kind;
+ /*0x01*/ bool8 active;
+ /*0x02*/ u8 language;
+ /*0x03*/ u8 pad03[9];
+ /*0x0c*/ u16 species;
+ /*0x0e*/ u16 species2;
+ /*0x10*/ u8 var10;
+ /*0x11*/ u8 var11;
+ /*0x12*/ u8 var12;
+ /*0x13*/ u8 playerName[8];
+};
+
+struct TVShowPokemonAngler
+{
+ /*0x00*/ u8 kind;
+ /*0x01*/ bool8 active;
+ /*0x02*/ u8 var02;
+ /*0x03*/ u8 var03;
+ /*0x04*/ u16 var04;
+ /*0x06*/ u8 language;
+ u8 pad07[12];
+ /*0x13*/ u8 playerName[8];
+};
+
+struct TVShowWorldOfMasters
+{
+ /*0x00*/ u8 kind;
+ /*0x01*/ bool8 active;
+ /*0x02*/ u16 var02;
+ /*0x04*/ u16 var04;
+ /*0x06*/ u16 var06;
+ /*0x08*/ u16 var08;
+ /*0x0a*/ u8 var0a;
+ /*0x0b*/ u8 language;
+ u8 pad0c[7];
+ /*0x13*/ u8 playerName[8];
+};
+
+struct TVShowMassOutbreak
+{
+ /*0x00*/ u8 kind;
+ /*0x01*/ bool8 active;
+ /*0x02*/ u8 var02;
+ /*0x03*/ u8 var03;
+ /*0x04*/ u16 moves[4];
+ /*0x0C*/ u16 species;
+ /*0x0E*/ u16 var0E;
+ /*0x10*/ u8 locationMapNum;
+ /*0x11*/ u8 locationMapGroup;
+ /*0x12*/ u8 var12;
+ /*0x13*/ u8 probability;
+ /*0x14*/ u8 level;
+ /*0x15*/ u8 var15;
+ /*0x16*/ u16 daysLeft;
+ /*0x18*/ u8 language;
+ u8 pad19[11];
+};
+
+typedef union TVShow
+{
+ struct TVShowCommon common;
+ struct TVShowFanClubLetter fanclubLetter;
+ struct TVShowRecentHappenings recentHappenings;
+ struct TVShowFanclubOpinions fanclubOpinions;
+ struct TVShowUnknownType04 unkShow04;
+ struct TVShowNameRaterShow nameRaterShow;
+ struct TVShowBravoTrainerPokemonProfiles bravoTrainer;
+ struct TVShowBravoTrainerBattleTowerSpotlight bravoTrainerTower;
+ struct TVShowPokemonToday pokemonToday;
+ struct TVShowSmartShopper smartshopperShow;
+ struct TVShowPokemonTodayFailed pokemonTodayFailed;
+ struct TVShowPokemonAngler pokemonAngler;
+ struct TVShowWorldOfMasters worldOfMasters;
+ struct TVShowMassOutbreak massOutbreak;
+} TVShow;
+
+struct MailStruct
+{
+ /*0x00*/ u16 words[9];
+ /*0x12*/ u8 playerName[8];
+ /*0x1A*/ u8 trainerId[4];
+ /*0x1E*/ u16 species;
+ /*0x20*/ u16 itemId;
+};
+
+
+// Mauville Pokemon Center men
+
+struct MauvilleManCommon
+{
+ u8 id;
+};
+
+struct MauvilleManBard
+{
+ /*0x00*/ u8 id;
+ /*0x02*/ u16 songLyrics[6];
+ /*0x0E*/ u16 temporaryLyrics[6];
+ /*0x1A*/ u8 playerName[8];
+ /*0x22*/ u8 filler_2DB6[0x3];
+ /*0x25*/ u8 playerTrainerId[4];
+ /*0x29*/ bool8 hasChangedSong;
+}; /*size = 0x2C*/
+
+struct MauvilleManHipster
+{
+ u8 id;
+ bool8 alreadySpoken;
+};
+
+struct MauvilleManTrader
+{
+ u8 id;
+ u8 unk1[4];
+ u8 unk5[4][11];
+ bool8 alreadyTraded;
+};
+
+struct MauvilleManStoryteller
+{
+ u8 id;
+ bool8 alreadyRecorded;
+ u8 filler2[2];
+ u8 gameStatIDs[4];
+ u8 trainerNames[4][7];
+ u8 statValues[4][4];
+};
+
+struct MauvilleManGiddy
+{
+ /*0x00*/ u8 id;
+ /*0x01*/ u8 taleCounter;
+ /*0x02*/ u8 questionNum;
+ /*0x04*/ u16 randomWords[10];
+ /*0x18*/ u8 questionList[12];
+}; /*size = 0x2C*/
+
+
+union MauvilleMan
+{
+ struct MauvilleManCommon common;
+ struct MauvilleManBard bard;
+ struct MauvilleManHipster hipster;
+ struct MauvilleManTrader trader;
+ struct MauvilleManStoryteller storyteller;
+ struct MauvilleManGiddy giddy;
+ u8 filler[0x40]; // needed to pad out the struct
+};
+
+struct PokeNews
+{
+ u8 kind;
+ u8 state;
+ u16 days;
+};
+
+struct GabbyAndTyData
+{
+ /*2b10*/ u16 mon1;
+ /*2b12*/ u16 mon2;
+ /*2b14*/ u16 lastMove;
+ /*2b16*/ u16 quote;
+ /*2b18*/ u8 mapnum;
+ /*2b19*/ u8 battleNum;
+ /*2b1a*/ u8 valA_0:1;
+ /*2b1a*/ u8 valA_1:1;
+ /*2b1a*/ u8 valA_2:1;
+ /*2b1a*/ u8 valA_3:1;
+ /*2b1a*/ u8 valA_4:1;
+ /*2b1a*/ u8 valA_5:3;
+ /*2b1b*/ u8 valB_0:1;
+ /*2b1b*/ u8 valB_1:1;
+ /*2b1b*/ u8 valB_2:1;
+ /*2b1b*/ u8 valB_3:1;
+ /*2b1b*/ u8 valB_4:1;
+ /*2b1b*/ u8 valB_5:3;
+};
+
+struct DayCareMail
+{
+ /*0x00*/ struct MailStruct message;
+ /*0x24*/ u8 names[19];
+};
+
+struct DayCareStepCountersEtc {
+ u32 steps[DAYCARE_MON_COUNT];
+ u16 pendingEggPersonality;
+ u8 eggCycleStepsRemaining;
+};
+
+struct RecordMixingDayCareMail
+{
+ struct DayCareMail mail[DAYCARE_MON_COUNT];
+ u32 numDaycareMons;
+ u16 itemsHeld[DAYCARE_MON_COUNT]; // marks whether or not each daycare mon is currently holding an item.
+};
+
+struct DayCareMisc
+{
+ struct DayCareMail mail[DAYCARE_MON_COUNT];
+ struct DayCareStepCountersEtc countersEtc;
+};
+
+struct DayCare {
+ struct BoxPokemon mons[DAYCARE_MON_COUNT];
+ struct DayCareMisc misc;
+};
+
+struct LinkBattleRecord
+{
+ u8 name[8];
+ u16 trainerId;
+ u16 wins;
+ u16 losses;
+ u16 draws;
+};
+
+struct RecordMixingGiftData
+{
+ u8 unk0;
+ u8 quantity;
+ u16 itemId;
+ u8 filler4[8];
+};
+
+struct RecordMixingGift
+{
+ int checksum;
+ struct RecordMixingGiftData data;
+};
+
+struct ContestWinner
+{
+ /*0x00*/ u32 personality; // personality
+ /*0x04*/ u32 otId; // otId
+ /*0x08*/ u16 species; // species
+ /*0x0A*/ u8 contestCategory;
+ /*0x0B*/ u8 nickname[11];
+ /*0x16*/ u8 trainerName[8];
+};
+
+// there should be enough flags for all 412 slots
+// each slot takes up 8 flags
+// if the value is not divisible by 8, we need to account for the reminder as well
+#define DEX_FLAGS_NO ((POKEMON_SLOTS_NUMBER / 8) + ((POKEMON_SLOTS_NUMBER % 8) ? 1 : 0))
+
+struct SaveBlock1 /* 0x02025734 */
+{
+ /*0x00*/ struct Coords16 pos;
+ /*0x04*/ struct WarpData location;
+ /*0x0C*/ struct WarpData warp1;
+ /*0x14*/ struct WarpData warp2;
+ /*0x1C*/ struct WarpData lastHealLocation;
+ /*0x24*/ struct WarpData warp4;
+ /*0x2C*/ u16 savedMusic;
+ /*0x2E*/ u8 weather;
+ /*0x2F*/ u8 weatherCycleStage;
+ /*0x30*/ u8 flashLevel; // flash level on current map, 0 being normal and 4 being the darkest
+ /*0x32*/ u16 mapLayoutId;
+ /*0x34*/ u16 mapView[0x100];
+ /*0x234*/ u8 playerPartyCount;
+ /*0x238*/ struct Pokemon playerParty[6];
+ /*0x490*/ u32 money;
+ /*0x494*/ u16 coins;
+ /*0x496*/ u16 registeredItem; // registered for use with SELECT button
+ /*0x498*/ struct ItemSlot pcItems[PC_ITEMS_COUNT];
+ /*0x560*/ struct ItemSlot bagPocket_Items[BAG_ITEMS_COUNT];
+ /*0x5B0*/ struct ItemSlot bagPocket_KeyItems[BAG_KEYITEMS_COUNT];
+ /*0x600*/ struct ItemSlot bagPocket_PokeBalls[BAG_POKEBALLS_COUNT];
+ /*0x640*/ struct ItemSlot bagPocket_TMHM[BAG_TMHM_COUNT];
+ /*0x740*/ struct ItemSlot bagPocket_Berries[BAG_BERRIES_COUNT];
+ /*0x7F8*/ struct Pokeblock pokeblocks[POKEBLOCKS_COUNT];
+ /*0x938*/ u8 dexSeen2[DEX_FLAGS_NO];
+ /*0x96C*/ u16 berryBlenderRecords[3];
+ /*0x972*/ u8 filler_972[0x6];
+ /*0x978*/ u16 trainerRematchStepCounter;
+ /*0x97A*/ u8 trainerRematches[100];
+ /*0x9E0*/ struct EventObject eventObjects[EVENT_OBJECTS_COUNT];
+ /*0xC20*/ struct EventObjectTemplate eventObjectTemplates[64];
+ /*0x1220*/ u8 flags[FLAGS_COUNT];
+ /*0x1340*/ u16 vars[VARS_COUNT];
+ /*0x1540*/ u32 gameStats[NUM_GAME_STATS];
+ /*0x1608*/ struct BerryTree berryTrees[BERRY_TREES_COUNT];
+ /*0x1A08*/ struct SecretBaseRecord secretBases[SECRET_BASES_COUNT];
+ /*0x2688*/ u8 playerRoomDecor[12];
+ /*0x2694*/ u8 playerRoomDecorPos[12];
+ /*0x26A0*/ u8 decorDesk[10];
+ /*0x26AA*/ u8 decorChair[10];
+ /*0x26B4*/ u8 decorPlant[10];
+ /*0x26BE*/ u8 decorOrnament[30];
+ /*0x26DC*/ u8 decorMat[30];
+ /*0x26FA*/ u8 decorPoster[10];
+ /*0x2704*/ u8 decorDoll[40];
+ /*0x272C*/ u8 decorCushion[10];
+ /*0x2736*/ u8 padding_2736[2];
+ /*0x2738*/ TVShow tvShows[TV_SHOWS_COUNT];
+ /*0x2ABC*/ struct PokeNews pokeNews[POKE_NEWS_COUNT];
+ /*0x2AFC*/ u16 outbreakPokemonSpecies;
+ /*0x2AFE*/ u8 outbreakLocationMapNum;
+ /*0x2AFF*/ u8 outbreakLocationMapGroup;
+ /*0x2B00*/ u8 outbreakPokemonLevel;
+ /*0x2B01*/ u8 outbreakUnk1;
+ /*0x2B02*/ u16 outbreakUnk2;
+ /*0x2B04*/ u16 outbreakPokemonMoves[4];
+ /*0x2B0C*/ u8 outbreakUnk4;
+ /*0x2B0D*/ u8 outbreakPokemonProbability;
+ /*0x2B0E*/ u16 outbreakUnk5;
+ /*0x2B10*/ struct GabbyAndTyData gabbyAndTyData;
+ /*0x2B1C*/ struct {
+ /*0x2B1C*/ u16 unk2B1C[6];
+ /*0x2B28*/ u16 unk2B28[6];
+ /*0x2B34*/ u16 unk2B34[6];
+ /*0x2B40*/ u16 unk2B40[6];
+ } easyChats;
+ /*0x2B4C*/ struct MailStruct mail[MAIL_COUNT];
+ /*0x2D8C*/ u8 unk2D8C[4]; // What is this? Apparently it's supposed to be 64 bytes in size.
+ /*0x2D90*/ u8 filler_2D90[0x4];
+ /*0x2D94*/ union MauvilleMan mauvilleMan;
+ /*0x2DD4*/ struct EasyChatPair easyChatPairs[5]; //Dewford trend [0] and some other stuff
+ /*0x2DFC*/ struct ContestWinner contestWinners[8];
+ /*0x2EFC*/ struct ContestWinner museumPortraits[5];
+ /*0x2F9C*/ struct DayCare daycare;
+ /*0x30B8*/ struct LinkBattleRecord linkBattleRecords[5];
+ struct {
+ /*0x3108*/ u8 unknown1[8];
+ /*0x3110*/ u8 giftRibbons[11];
+ /*0x311B*/ u8 unknown2[8];
+ /*0x3123*/ u32 currentPokeCoupons;
+ /*0x3127*/ u32 totalEarnedPokeCoupons;
+ /*0x312B*/ u8 unknown3[6];
+ /*0x3131*/ u8 receivedWishmakerJirachi;
+ /*0x3132*/ u8 unknown4[18];
+ } __attribute__((packed)) externalReservedData;
+ /*0x3144*/ struct Roamer roamer;
+ /*0x3160*/ struct EnigmaBerry enigmaBerry;
+ /*0x3690*/ struct RamScript ramScript;
+ /*0x3A7C*/ struct RecordMixingGift recordMixingGift;
+ /*0x3A8C*/ u8 dexSeen3[DEX_FLAGS_NO];
+};
+
+extern struct SaveBlock1 gSaveBlock1;
+
+struct Time
+{
+ /*0x00*/ s16 days;
+ /*0x02*/ s8 hours;
+ /*0x03*/ s8 minutes;
+ /*0x04*/ s8 seconds;
+};
+
+struct Pokedex
+{
+ /*0x00*/ u8 order;
+ /*0x01*/ u8 unknown1;
+ /*0x02*/ u8 nationalMagic; // must equal 0xDA in order to have National mode
+ /*0x03*/ u8 unknown2;
+ /*0x04*/ u32 unownPersonality; // set when you first see Unown
+ /*0x08*/ u32 spindaPersonality; // set when you first see Spinda
+ /*0x0C*/ u32 unknown3;
+ /*0x10*/ u8 owned[DEX_FLAGS_NO];
+ /*0x44*/ u8 seen[DEX_FLAGS_NO];
+};
+
+struct BattleTowerTrainer
+{
+ /*0x00*/ u8 trainerClass;
+ /*0x01*/ u8 name[8];
+ /*0x09*/ u8 teamFlags;
+ u8 filler0A[2];
+ /*0x0C*/ u16 greeting[6];
+};
+
+struct BattleTowerRecord // record mixing
+{
+ /*0x00*/ u8 battleTowerLevelType; // 0 = level 50, 1 = level 100
+ /*0x01*/ u8 trainerClass;
+ /*0x02*/ u16 winStreak;
+ /*0x04*/ u8 name[8];
+ /*0x0C*/ u8 trainerId[4];
+ /*0x10*/ u16 greeting[6];
+ /*0x1C*/ struct BattleTowerPokemon party[3];
+ /*0xA0*/ u32 checksum;
+};
+
+struct BattleTowerEReaderTrainer
+{
+ /*0x00*/ u8 unk0;
+ /*0x01*/ u8 trainerClass;
+ /*0x02*/ u16 winStreak;
+ /*0x04*/ u8 name[8];
+ /*0x0C*/ u8 trainerId[4];
+ /*0x10*/ u16 greeting[6];
+ /*0x1C*/ u16 farewellPlayerLost[6];
+ /*0x28*/ u16 farewellPlayerWon[6];
+ /*0x34*/ struct BattleTowerPokemon party[3];
+ /*0xB8*/ u32 checksum;
+};
+
+struct BattleTowerData
+{
+ /*0x0000, 0x00A8*/ struct BattleTowerRecord playerRecord;
+ /*0x00A4, 0x014C*/ struct BattleTowerRecord records[5]; // from record mixing
+ /*0x03D8, 0x0480*/ u16 firstMonSpecies; // species of the first pokemon in the player's battle tower party
+ /*0x03DA, 0x0482*/ u16 defeatedBySpecies; // species of the pokemon that defated the player
+ /*0x03DC, 0x0484*/ u8 defeatedByTrainerName[8];
+ /*0x03E4, 0x048C*/ u8 firstMonNickname[POKEMON_NAME_LENGTH]; // nickname of the first pokemon in the player's battle tower party
+ /*0x03F0, 0x0498*/ struct BattleTowerEReaderTrainer ereaderTrainer;
+ /*0x04AC, 0x0554*/ u8 battleTowerLevelType:1; // 0 = level 50; 1 = level 100
+ /*0x04AC, 0x0554*/ u8 unk_554:1;
+ /*0x04AD, 0x0555*/ u8 battleOutcome;
+ /*0x04AE, 0x0556*/ u8 var_4AE[2];
+ /*0x04B0, 0x0558*/ u16 curChallengeBattleNum[2]; // 1-based index of battle in the current challenge. (challenges consist of 7 battles)
+ /*0x04B4, 0x055C*/ u16 curStreakChallengesNum[2]; // 1-based index of the current challenge in the current streak.
+ /*0x04B8, 0x0560*/ u16 recordWinStreaks[2];
+ /*0x04BC, 0x0564*/ u8 battleTowerTrainerId; // index for gBattleTowerTrainers table
+ /*0x04BD, 0x0565*/ u8 selectedPartyMons[0x3]; // indices of the 3 selected player party mons.
+ /*0x04C0, 0x0568*/ u16 prizeItem;
+ /*0x04C2, 0x056A*/ u8 battledTrainerIds[6];
+ /*0x04C8, 0x0570*/ u16 totalBattleTowerWins;
+ /*0x04CA, 0x0572*/ u16 bestBattleTowerWinStreak;
+ /*0x04CC, 0x0574*/ u16 currentWinStreaks[2];
+ /*0x04D0, 0x0578*/ u8 lastStreakLevelType; // 0 = level 50, 1 = level 100. level type of the last streak. Used by tv to report the level mode.
+ /*0x04D1, 0x0579*/ u8 filler_4D1[0x317];
+};
+
+struct SaveBlock2 /* 0x02024EA4 */
+{
+ /*0x00*/ u8 playerName[8];
+ /*0x08*/ u8 playerGender; // MALE, FEMALE
+ /*0x09*/ u8 specialSaveWarp;
+ /*0x0A*/ u8 playerTrainerId[4];
+ /*0x0E*/ u16 playTimeHours;
+ /*0x10*/ u8 playTimeMinutes;
+ /*0x11*/ u8 playTimeSeconds;
+ /*0x12*/ u8 playTimeVBlanks;
+ /*0x13*/ u8 optionsButtonMode; // OPTIONS_BUTTON_MODE_[NORMAL/LR/L_EQUALS_A]
+ /*0x14*/ u16 optionsTextSpeed:3; // OPTIONS_TEXT_SPEED_[SLOW/MID/FAST]
+ u16 optionsWindowFrameType:5; // Specifies one of the 20 decorative borders for text boxes
+ u16 optionsSound:1; // OPTIONS_SOUND_[MONO/STEREO]
+ u16 optionsBattleStyle:1; // OPTIONS_BATTLE_STYLE_[SHIFT/SET]
+ u16 optionsBattleSceneOff:1; // whether battle animations are disabled
+ u16 regionMapZoom:1; // whether the map is zoomed in
+ /*0x18*/ struct Pokedex pokedex;
+ /*0x90*/ u8 filler_90[0x8];
+ /*0x98*/ struct Time localTimeOffset;
+ /*0xA0*/ struct Time lastBerryTreeUpdate;
+ /*0xA8*/ struct BattleTowerData battleTower;
+};
+
+struct MapPosition
+{
+ s16 x;
+ s16 y;
+ s8 height;
+};
+
+struct UnkStruct_8054FF8
+{
+ u8 a;
+ u8 b;
+ u8 c;
+ u8 d;
+ struct MapPosition sub;
+ u16 field_C;
+};
+
+// wasnt defined so I had to define it
+struct HallOfFame
+{
+ u8 filler[0x1F00];
+};
+
+extern struct SaveBlock2 gSaveBlock2;
+
+#define RomHeaderGameTitle ((const char *)0x080000A0)
+#define RomHeaderGameCode ((const char *)0x080000AC)
+#define RomHeaderMakerCode ((const char *)0x080000B0)
+#define RomHeaderMagic ((const u8 *) 0x080000B2)
+#define RomHeaderSoftwareVersion ((const u8 *) 0x080000BC)
+
+#define LocalTimeOffset ((struct Time *)0x02028098)
+#define LastBerryTreeUpdate ((struct Time *)0x020280A0)
+
+#endif //GUARD_GLOBAL_H
diff --git a/berry_fix/payload/include/main.h b/berry_fix/payload/include/main.h
new file mode 100644
index 000000000..cb58d5982
--- /dev/null
+++ b/berry_fix/payload/include/main.h
@@ -0,0 +1,45 @@
+#ifndef GUARD_MAIN_H
+#define GUARD_MAIN_H
+
+#include "gba/gba.h"
+
+enum RomHeaderValidationResult
+{
+ SAPPHIRE_UPDATABLE = 2,
+ RUBY_UPDATABLE,
+ SAPPHIRE_NONEED,
+ RUBY_NONEED,
+ INVALID
+};
+
+enum MainCallbackState
+{
+ MAINCB_INIT = 0,
+ MAINCB_CHECK_RTC,
+ MAINCB_CHECK_FLASH,
+ MAINCB_READ_SAVE,
+ MAINCB_CHECK_TIME,
+ MAINCB_FIX_DATE,
+ MAINCB_NO_NEED_TO_FIX,
+ MAINCB_YEAR_MAKES_NO_SENSE,
+ MAINCB_FINISHED,
+ MAINCB_CHECK_PACIFIDLOG_TM,
+ MAINCB_FIX_PACIFIDLOG_TM,
+ MAINCB_ERROR
+};
+
+extern IntrFunc gIntrTable[];
+extern u16 gHeldKeys;
+extern u16 gNewKeys;
+extern u8 gIntrVector[];
+extern u32 gUpdateSuccessful;
+extern u32 gUnknown_3001194;
+extern u32 gUnknown_30011A0[];
+extern u32 gMainCallbackState;
+extern u32 gGameVersion;
+
+extern u8 gSharedMem[0x8000];
+
+extern const IntrFunc gIntrFuncPointers[];
+
+#endif //GUARD_MAIN_H
diff --git a/berry_fix/payload/include/pokemon.h b/berry_fix/payload/include/pokemon.h
new file mode 100644
index 000000000..d3a14ffff
--- /dev/null
+++ b/berry_fix/payload/include/pokemon.h
@@ -0,0 +1,154 @@
+#ifndef GUARD_POKEMON_H
+#define GUARD_POKEMON_H
+
+struct PokemonSubstruct0
+{
+ u16 species;
+ u16 heldItem;
+ u32 experience;
+ u8 ppBonuses;
+ u8 friendship;
+};
+
+struct PokemonSubstruct1
+{
+ u16 moves[4];
+ u8 pp[4];
+};
+
+struct PokemonSubstruct2
+{
+ u8 hpEV;
+ u8 attackEV;
+ u8 defenseEV;
+ u8 speedEV;
+ u8 spAttackEV;
+ u8 spDefenseEV;
+ u8 cool;
+ u8 beauty;
+ u8 cute;
+ u8 smart;
+ u8 tough;
+ u8 sheen;
+};
+
+struct PokemonSubstruct3
+{
+ /*0x00*/ u8 pokerus;
+ /*0x01*/ u8 metLocation;
+
+ /*0x02*/ u16 metLevel:7;
+ /*0x02*/ u16 metGame:4;
+ /*0x03*/ u16 pokeball:4;
+ /*0x03*/ u16 otGender:1;
+
+ /*0x04*/ u32 hpIV:5;
+ /*0x04*/ u32 attackIV:5;
+ /*0x05*/ u32 defenseIV:5;
+ /*0x05*/ u32 speedIV:5;
+ /*0x05*/ u32 spAttackIV:5;
+ /*0x06*/ u32 spDefenseIV:5;
+ /*0x07*/ u32 isEgg:1;
+ /*0x07*/ u32 altAbility:1;
+
+ /*0x08*/ u32 coolRibbon:3;
+ /*0x08*/ u32 beautyRibbon:3;
+ /*0x08*/ u32 cuteRibbon:3;
+ /*0x09*/ u32 smartRibbon:3;
+ /*0x09*/ u32 toughRibbon:3;
+ /*0x09*/ u32 championRibbon:1;
+ /*0x0A*/ u32 winningRibbon:1;
+ /*0x0A*/ u32 victoryRibbon:1;
+ /*0x0A*/ u32 artistRibbon:1;
+ /*0x0A*/ u32 effortRibbon:1;
+ /*0x0A*/ u32 giftRibbon1:1;
+ /*0x0A*/ u32 giftRibbon2:1;
+ /*0x0A*/ u32 giftRibbon3:1;
+ /*0x0A*/ u32 giftRibbon4:1;
+ /*0x0B*/ u32 giftRibbon5:1;
+ /*0x0B*/ u32 giftRibbon6:1;
+ /*0x0B*/ u32 giftRibbon7:1;
+ /*0x0B*/ u32 fatefulEncounter:5; // unused in Ruby/Sapphire, but the high bit must be set for Mew/Deoxys to obey in FR/LG/Emerald
+};
+
+union PokemonSubstruct
+{
+ struct PokemonSubstruct0 type0;
+ struct PokemonSubstruct1 type1;
+ struct PokemonSubstruct2 type2;
+ struct PokemonSubstruct3 type3;
+ u16 raw[6];
+};
+
+struct BoxPokemon
+{
+ /*0x00*/ u32 personality;
+ /*0x04*/ u32 otId;
+ /*0x08*/ u8 nickname[POKEMON_NAME_LENGTH];
+ /*0x12*/ u8 language;
+ /*0x13*/ u8 isBadEgg:1;
+ u8 hasSpecies:1;
+ u8 isEgg:1;
+ /*0x14*/ u8 otName[OT_NAME_LENGTH];
+ /*0x1B*/ u8 markings;
+ /*0x1C*/ u16 checksum;
+ /*0x1E*/ u16 unknown;
+
+ union
+ {
+ u32 raw[12];
+ union PokemonSubstruct substructs[4];
+ } secure;
+}; /*size = 0x50*/
+
+struct Pokemon
+{
+ /*0x00*/ struct BoxPokemon box;
+ /*0x50*/ u32 status;
+ /*0x54*/ u8 level;
+ /*0x55*/ u8 mail;
+ /*0x56*/ u16 hp;
+ /*0x58*/ u16 maxHP;
+ /*0x5A*/ u16 attack;
+ /*0x5C*/ u16 defense;
+ /*0x5E*/ u16 speed;
+ /*0x60*/ u16 spAttack;
+ /*0x62*/ u16 spDefense;
+};
+
+struct BattleTowerPokemon
+{
+ /*0x00*/u16 species;
+ /*0x02*/u16 heldItem;
+ /*0x04*/u16 moves[4];
+ /*0x0C*/u8 level;
+ /*0x0D*/u8 ppBonuses;
+ /*0x0E*/u8 hpEV;
+ /*0x0F*/u8 attackEV;
+ /*0x10*/u8 defenseEV;
+ /*0x11*/u8 speedEV;
+ /*0x12*/u8 spAttackEV;
+ /*0x13*/u8 spDefenseEV;
+ /*0x14*/u32 otId;
+ /*0x18*/u32 hpIV:5;
+ /*0x18*/u32 attackIV:5;
+ /*0x19*/u32 defenseIV:5;
+ /*0x19*/u32 speedIV:5;
+ /*0x1A*/u32 spAttackIV:5;
+ /*0x1A*/u32 spDefenseIV:5;
+ /*0x1B*/u32 gap:1;
+ /*0x1B*/u32 altAbility:1;
+ /*0x1C*/u32 personality;
+ /*0x20*/u8 nickname[POKEMON_NAME_LENGTH + 1];
+ /*0x2B*/u8 friendship;
+};
+
+struct PokemonStorage
+{
+ /*0x0000*/ u8 currentBox;
+ /*0x0004*/ struct BoxPokemon boxes[14][30];
+ /*0x8344*/ u8 boxNames[14][9];
+ /*0x83c2*/ u8 wallpaper[14];
+};
+
+#endif // GUARD_POKEMON_H
diff --git a/berry_fix/payload/include/rtc.h b/berry_fix/payload/include/rtc.h
new file mode 100644
index 000000000..35654d866
--- /dev/null
+++ b/berry_fix/payload/include/rtc.h
@@ -0,0 +1,15 @@
+#ifndef GUARD_RTC_H
+#define GUARD_RTC_H
+
+#include "gba/gba.h"
+#include "siirtc.h"
+#include "global.h"
+
+extern struct Time gTimeSinceBerryUpdate;
+extern struct Time gRtcUTCTime;
+
+bool32 rtc_maincb_is_rtc_working(void);
+bool32 rtc_maincb_is_time_since_last_berry_update_positive(u8 *);
+void rtc_maincb_fix_date(void);
+
+#endif //GUARD_RTC_H
diff --git a/berry_fix/payload/include/siirtc.h b/berry_fix/payload/include/siirtc.h
new file mode 100644
index 000000000..de4fd634d
--- /dev/null
+++ b/berry_fix/payload/include/siirtc.h
@@ -0,0 +1,54 @@
+#ifndef GUARD_RTC_H
+#define GUARD_RTC_H
+
+#include "gba/gba.h"
+
+#define SIIRTCINFO_INTFE 0x01 // frequency interrupt enable
+#define SIIRTCINFO_INTME 0x02 // per-minute interrupt enable
+#define SIIRTCINFO_INTAE 0x04 // alarm interrupt enable
+#define SIIRTCINFO_24HOUR 0x40 // 0: 12-hour mode, 1: 24-hour mode
+#define SIIRTCINFO_POWER 0x80 // power on or power failure occurred
+
+enum
+{
+ MONTH_JAN = 1,
+ MONTH_FEB,
+ MONTH_MAR,
+ MONTH_APR,
+ MONTH_MAY,
+ MONTH_JUN,
+ MONTH_JUL,
+ MONTH_AUG,
+ MONTH_SEP,
+ MONTH_OCT,
+ MONTH_NOV,
+ MONTH_DEC
+};
+
+struct SiiRtcInfo
+{
+ u8 year;
+ u8 month;
+ u8 day;
+ u8 dayOfWeek;
+ u8 hour;
+ u8 minute;
+ u8 second;
+ u8 status;
+ u8 alarmHour;
+ u8 alarmMinute;
+};
+
+void SiiRtcUnprotect(void);
+void SiiRtcProtect(void);
+u8 SiiRtcProbe(void);
+bool8 SiiRtcReset(void);
+bool8 SiiRtcGetStatus(struct SiiRtcInfo *rtc);
+bool8 SiiRtcSetStatus(struct SiiRtcInfo *rtc);
+bool8 SiiRtcGetDateTime(struct SiiRtcInfo *rtc);
+bool8 SiiRtcSetDateTime(struct SiiRtcInfo *rtc);
+bool8 SiiRtcGetTime(struct SiiRtcInfo *rtc);
+bool8 SiiRtcSetTime(struct SiiRtcInfo *rtc);
+bool8 SiiRtcSetAlarm(struct SiiRtcInfo *rtc);
+
+#endif // GUARD_RTC_H
diff --git a/berry_fix/payload/ld_script.sed b/berry_fix/payload/ld_script.sed
new file mode 100644
index 000000000..b91542b6f
--- /dev/null
+++ b/berry_fix/payload/ld_script.sed
@@ -0,0 +1,14 @@
+/<EWRAM>/ {
+ r sym_ewram.ld
+ d
+}
+
+/<BSS>/ {
+ r sym_bss.ld
+ d
+}
+
+/<COMMON>/ {
+ r sym_common.ld
+ d
+}
diff --git a/berry_fix/payload/ld_script.txt b/berry_fix/payload/ld_script.txt
new file mode 100644
index 000000000..d0a0af9ed
--- /dev/null
+++ b/berry_fix/payload/ld_script.txt
@@ -0,0 +1,107 @@
+ENTRY(Init)
+
+SECTIONS {
+ . = 0x2010000;
+
+ .text :
+ ALIGN(4)
+ {
+ asm/crt0.o(.text);
+ src/main.o(.text);
+ src/rtc.o(.text);
+ src/flash.o(.text);
+ } =0
+
+ lib_text :
+ ALIGN(4)
+ {
+ src/agb_flash.o(.text);
+ src/agb_flash_1m.o(.text);
+ src/agb_flash_mx.o(.text);
+ asm/libagbsyscall.o(.text);
+ src/siirtc.o(.text);
+ *libgcc.a:_call_via_rX.o(.text);
+ *libgcc.a:_modsi3.o(.text);
+ *libgcc.a:_umodsi3.o(.text);
+ *libgcc.a:_dvmd_tls.o(.text);
+ } =0
+
+ .rodata :
+ ALIGN(4)
+ {
+ src/main.o(.rodata);
+ src/rtc.o(.rodata);
+ src/flash.o(.rodata);
+ } =0
+
+ lib_rodata :
+ ALIGN(4)
+ {
+ src/agb_flash.o(.rodata);
+ src/agb_flash_1m.o(.rodata);
+ src/agb_flash_mx.o(.rodata);
+ src/agb_flash_le.o(.rodata);
+ src/siirtc.o(.rodata);
+ }
+
+ . = 0x2020000;
+
+ ewram (NOLOAD) :
+ ALIGN(4)
+ {
+<EWRAM>
+ }
+
+ . = 0x3001000;
+
+ iwram (NOLOAD) :
+ ALIGN(4)
+ {
+<BSS>
+ . = 0x40;
+<COMMON>
+ end = .;
+ }
+
+ . = 0x8000000;
+
+ RS_Rom (NOLOAD) :
+ ALIGN(4)
+ {
+ _start = .;
+ . += 4;
+ RomHeaderNintendoLogo = .;
+ . += 156;
+ RS_RomHeader = .;
+ RomHeaderGameTitle = .;
+ . += 12;
+ RomHeaderGameCode = .;
+ . += 4;
+ RomHeaderMakerCode = .;
+ . += 2;
+ RomHeaderMagic = .;
+ . += 1;
+ RomHeaderMainUnitCode = .;
+ . += 1;
+ RomHeaderDeviceType = .;
+ . += 1;
+ RomHeaderReserved1 = .;
+ . += 7;
+ RomHeaderSoftwareVersion = .;
+ . += 1;
+ RomHeaderChecksum = .;
+ . += 1;
+ RomHeaderReserved2 = .;
+ . += 6;
+ GPIOPortData = .;
+ . += 2;
+ GPIOPortDirection = .;
+ . += 2;
+ GPIOPortReadEnable = .;
+ } =0
+
+ /DISCARD/ :
+ {
+ *(*);
+ }
+}
diff --git a/berry_fix/payload/rom.sha1 b/berry_fix/payload/rom.sha1
new file mode 100644
index 000000000..92eee7e87
--- /dev/null
+++ b/berry_fix/payload/rom.sha1
@@ -0,0 +1 @@
+866991e2b5a8de02d12f53abe0ee9af03a2b6e01 payload.gba
diff --git a/berry_fix/payload/src/agb_flash.c b/berry_fix/payload/src/agb_flash.c
new file mode 100644
index 000000000..2c2c96e6e
--- /dev/null
+++ b/berry_fix/payload/src/agb_flash.c
@@ -0,0 +1,296 @@
+#include "gba/gba.h"
+#include "gba/flash_internal.h"
+
+static u8 sTimerNum;
+static u16 sTimerCount;
+static vu16 *sTimerReg;
+static u16 sSavedIme;
+
+u8 gFlashTimeoutFlag;
+u8 (*PollFlashStatus)(u8 *);
+const struct FlashType *gFlash;
+u16 gFlashNumRemainingBytes;
+const u16 *gFlashMaxTime;
+
+u16 (*ProgramFlashByte)(u16, u32, u8);
+u16 (*ProgramFlashSector)(u16, void *);
+u16 (*EraseFlashChip)(void);
+u16 (*EraseFlashSector)(u16);
+u16 (*WaitForFlashWrite)(u8, u8 *, u8);
+
+void SetReadFlash1(u16 *dest);
+
+void SwitchFlashBank(u8 bankNum)
+{
+ FLASH_WRITE(0x5555, 0xAA);
+ FLASH_WRITE(0x2AAA, 0x55);
+ FLASH_WRITE(0x5555, 0xB0);
+ FLASH_WRITE(0x0000, bankNum);
+}
+
+#define DELAY() \
+do { \
+ vu16 i; \
+ for (i = 20000; i != 0; i--) \
+ ; \
+} while (0)
+
+u16 ReadFlashId(void)
+{
+ u16 flashId;
+ u16 readFlash1Buffer[0x20];
+ u8 (*readFlash1)(u8 *);
+
+ SetReadFlash1(readFlash1Buffer);
+ readFlash1 = (u8 (*)(u8 *))((s32)readFlash1Buffer + 1);
+
+ // Enter ID mode.
+ FLASH_WRITE(0x5555, 0xAA);
+ FLASH_WRITE(0x2AAA, 0x55);
+ FLASH_WRITE(0x5555, 0x90);
+ DELAY();
+
+ flashId = readFlash1(FLASH_BASE + 1) << 8;
+ flashId |= readFlash1(FLASH_BASE);
+
+ // Leave ID mode.
+ FLASH_WRITE(0x5555, 0xAA);
+ FLASH_WRITE(0x2AAA, 0x55);
+ FLASH_WRITE(0x5555, 0xF0);
+ FLASH_WRITE(0x5555, 0xF0);
+ DELAY();
+
+ return flashId;
+}
+
+void FlashTimerIntr(void)
+{
+ if (sTimerCount != 0 && --sTimerCount == 0)
+ gFlashTimeoutFlag = 1;
+}
+
+u16 SetFlashTimerIntr(u8 timerNum, void (**intrFunc)(void))
+{
+ if (timerNum >= 4)
+ return 1;
+
+ sTimerNum = timerNum;
+ sTimerReg = &REG_TMCNT(sTimerNum);
+ *intrFunc = FlashTimerIntr;
+ return 0;
+}
+
+void StartFlashTimer(u8 phase)
+{
+ const u16 *maxTime = &gFlashMaxTime[phase * 3];
+ sSavedIme = REG_IME;
+ REG_IME = 0;
+ sTimerReg[1] = 0;
+ REG_IE |= (INTR_FLAG_TIMER0 << sTimerNum);
+ gFlashTimeoutFlag = 0;
+ sTimerCount = *maxTime++;
+ *sTimerReg++ = *maxTime++;
+ *sTimerReg-- = *maxTime++;
+ REG_IF = (INTR_FLAG_TIMER0 << sTimerNum);
+ REG_IME = 1;
+}
+
+void StopFlashTimer(void)
+{
+ REG_IME = 0;
+ *sTimerReg++ = 0;
+ *sTimerReg-- = 0;
+ REG_IE &= ~(INTR_FLAG_TIMER0 << sTimerNum);
+ REG_IME = sSavedIme;
+}
+
+u8 ReadFlash1(u8 *addr)
+{
+ return *addr;
+}
+
+void SetReadFlash1(u16 *dest)
+{
+ u16 *src;
+ u16 i;
+
+ PollFlashStatus = (u8 (*)(u8 *))((s32)dest + 1);
+
+ src = (u16 *)ReadFlash1;
+ src = (u16 *)((s32)src ^ 1);
+
+ i = ((s32)SetReadFlash1 - (s32)ReadFlash1) >> 1;
+
+ while (i != 0)
+ {
+ *dest++ = *src++;
+ i--;
+ }
+}
+
+void ReadFlash_Core(u8 *src, u8 *dest, u32 size)
+{
+ while (size-- != 0)
+ {
+ *dest++ = *src++;
+ }
+}
+
+void ReadFlash(u16 sectorNum, u32 offset, void *dest, u32 size)
+{
+ u8 *src;
+ u16 i;
+ u16 readFlash_Core_Buffer[0x40];
+ u16 *funcSrc;
+ u16 *funcDest;
+ void (*readFlash_Core)(u8 *, u8 *, u32);
+
+ REG_WAITCNT = (REG_WAITCNT & ~WAITCNT_SRAM_MASK) | WAITCNT_SRAM_8;
+
+ if (gFlash->romSize == FLASH_ROM_SIZE_1M)
+ {
+ SwitchFlashBank(sectorNum / SECTORS_PER_BANK);
+ sectorNum %= SECTORS_PER_BANK;
+ }
+
+ funcSrc = (u16 *)ReadFlash_Core;
+ funcSrc = (u16 *)((s32)funcSrc ^ 1);
+ funcDest = readFlash_Core_Buffer;
+
+ i = ((s32)ReadFlash - (s32)ReadFlash_Core) >> 1;
+
+ while (i != 0)
+ {
+ *funcDest++ = *funcSrc++;
+ i--;
+ }
+
+ readFlash_Core = (void (*)(u8 *, u8 *, u32))((s32)readFlash_Core_Buffer + 1);
+
+ src = FLASH_BASE + (sectorNum << gFlash->sector.shift) + offset;
+
+ readFlash_Core(src, dest, size);
+}
+
+u32 VerifyFlashSector_Core(u8 *src, u8 *tgt, u32 size)
+{
+ while (size-- != 0)
+ {
+ if (*tgt++ != *src++)
+ return (u32)(tgt - 1);
+ }
+
+ return 0;
+}
+
+u32 VerifyFlashSector(u16 sectorNum, u8 *src)
+{
+ u16 i;
+ u16 verifyFlashSector_Core_Buffer[0x80];
+ u16 *funcSrc;
+ u16 *funcDest;
+ u8 *tgt;
+ u16 size;
+ u32 (*verifyFlashSector_Core)(u8 *, u8 *, u32);
+
+ REG_WAITCNT = (REG_WAITCNT & ~WAITCNT_SRAM_MASK) | WAITCNT_SRAM_8;
+
+ if (gFlash->romSize == FLASH_ROM_SIZE_1M)
+ {
+ SwitchFlashBank(sectorNum / SECTORS_PER_BANK);
+ sectorNum %= SECTORS_PER_BANK;
+ }
+
+ funcSrc = (u16 *)VerifyFlashSector_Core;
+ funcSrc = (u16 *)((s32)funcSrc ^ 1);
+ funcDest = verifyFlashSector_Core_Buffer;
+
+ i = ((s32)VerifyFlashSector - (s32)VerifyFlashSector_Core) >> 1;
+
+ while (i != 0)
+ {
+ *funcDest++ = *funcSrc++;
+ i--;
+ }
+
+ verifyFlashSector_Core = (u32 (*)(u8 *, u8 *, u32))((s32)verifyFlashSector_Core_Buffer + 1);
+
+ tgt = FLASH_BASE + (sectorNum << gFlash->sector.shift);
+ size = gFlash->sector.size;
+
+ return verifyFlashSector_Core(src, tgt, size);
+}
+
+u32 VerifyFlashSectorNBytes(u16 sectorNum, u8 *src, u32 n)
+{
+ u16 i;
+ u16 verifyFlashSector_Core_Buffer[0x80];
+ u16 *funcSrc;
+ u16 *funcDest;
+ u8 *tgt;
+ u32 (*verifyFlashSector_Core)(u8 *, u8 *, u32);
+
+ if (gFlash->romSize == FLASH_ROM_SIZE_1M)
+ {
+ SwitchFlashBank(sectorNum / SECTORS_PER_BANK);
+ sectorNum %= SECTORS_PER_BANK;
+ }
+
+ REG_WAITCNT = (REG_WAITCNT & ~WAITCNT_SRAM_MASK) | WAITCNT_SRAM_8;
+
+ funcSrc = (u16 *)VerifyFlashSector_Core;
+ funcSrc = (u16 *)((s32)funcSrc ^ 1);
+ funcDest = verifyFlashSector_Core_Buffer;
+
+ i = ((s32)VerifyFlashSector - (s32)VerifyFlashSector_Core) >> 1;
+
+ while (i != 0)
+ {
+ *funcDest++ = *funcSrc++;
+ i--;
+ }
+
+ verifyFlashSector_Core = (u32 (*)(u8 *, u8 *, u32))((s32)verifyFlashSector_Core_Buffer + 1);
+
+ tgt = FLASH_BASE + (sectorNum << gFlash->sector.shift);
+
+ return verifyFlashSector_Core(src, tgt, n);
+}
+
+u32 ProgramFlashSectorAndVerify(u16 sectorNum, u8 *src)
+{
+ u8 i;
+ u32 result;
+
+ for (i = 0; i < 3; i++)
+ {
+ result = ProgramFlashSector(sectorNum, src);
+ if (result != 0)
+ continue;
+
+ result = VerifyFlashSector(sectorNum, src);
+ if (result == 0)
+ break;
+ }
+
+ return result;
+}
+
+u32 ProgramFlashSectorAndVerifyNBytes(u16 sectorNum, void *src, u32 n)
+{
+ u8 i;
+ u32 result;
+
+ for (i = 0; i < 3; i++)
+ {
+ result = ProgramFlashSector(sectorNum, src);
+ if (result != 0)
+ continue;
+
+ result = VerifyFlashSectorNBytes(sectorNum, src, n);
+ if (result == 0)
+ break;
+ }
+
+ return result;
+}
diff --git a/berry_fix/payload/src/agb_flash_1m.c b/berry_fix/payload/src/agb_flash_1m.c
new file mode 100644
index 000000000..7f8bdeb5f
--- /dev/null
+++ b/berry_fix/payload/src/agb_flash_1m.c
@@ -0,0 +1,86 @@
+#include "gba/gba.h"
+#include "gba/flash_internal.h"
+
+static const char AgbLibFlashVersion[] = "FLASH1M_V103";
+
+const struct FlashSetupInfo * const sSetupInfos[] =
+{
+ &MX29L010,
+ &LE26FV10N1TS,
+ &DefaultFlash
+};
+
+u32 IdentifyFlash(void)
+{
+ u16 result;
+ u16 flashId;
+ const struct FlashSetupInfo * const *setupInfo;
+
+ REG_WAITCNT = (REG_WAITCNT & ~WAITCNT_SRAM_MASK) | WAITCNT_SRAM_8;
+
+ flashId = ReadFlashId();
+
+ setupInfo = sSetupInfos;
+ result = 1;
+
+ for (;;)
+ {
+ if ((*setupInfo)->type.ids.separate.makerId == 0)
+ break;
+
+ if (flashId == (*setupInfo)->type.ids.joined)
+ {
+ result = 0;
+ break;
+ }
+
+ setupInfo++;
+ }
+
+ ProgramFlashByte = (*setupInfo)->programFlashByte;
+ ProgramFlashSector = (*setupInfo)->programFlashSector;
+ EraseFlashChip = (*setupInfo)->eraseFlashChip;
+ EraseFlashSector = (*setupInfo)->eraseFlashSector;
+ WaitForFlashWrite = (*setupInfo)->WaitForFlashWrite;
+ gFlashMaxTime = (*setupInfo)->maxTime;
+ gFlash = &(*setupInfo)->type;
+
+ return result;
+}
+
+u16 WaitForFlashWrite_Common(u8 phase, u8 *addr, u8 lastData)
+{
+ u16 result = 0;
+ u8 status;
+
+ StartFlashTimer(phase);
+
+ while ((status = PollFlashStatus(addr)) != lastData)
+ {
+ if (status & 0x20)
+ {
+ // The write operation exceeded the flash chip's time limit.
+
+ if (PollFlashStatus(addr) == lastData)
+ break;
+
+ FLASH_WRITE(0x5555, 0xF0);
+ result = phase | 0xA000u;
+ break;
+ }
+
+ if (gFlashTimeoutFlag)
+ {
+ if (PollFlashStatus(addr) == lastData)
+ break;
+
+ FLASH_WRITE(0x5555, 0xF0);
+ result = phase | 0xC000u;
+ break;
+ }
+ }
+
+ StopFlashTimer();
+
+ return result;
+}
diff --git a/berry_fix/payload/src/agb_flash_le.c b/berry_fix/payload/src/agb_flash_le.c
new file mode 100644
index 000000000..39d956e27
--- /dev/null
+++ b/berry_fix/payload/src/agb_flash_le.c
@@ -0,0 +1,31 @@
+#include "gba/gba.h"
+#include "gba/flash_internal.h"
+
+const u16 leMaxTime[] =
+{
+ 10, 65469, TIMER_ENABLE | TIMER_INTR_ENABLE | TIMER_256CLK,
+ 10, 65469, TIMER_ENABLE | TIMER_INTR_ENABLE | TIMER_256CLK,
+ 2000, 65469, TIMER_ENABLE | TIMER_INTR_ENABLE | TIMER_256CLK,
+ 2000, 65469, TIMER_ENABLE | TIMER_INTR_ENABLE | TIMER_256CLK,
+};
+
+const struct FlashSetupInfo LE26FV10N1TS =
+{
+ ProgramFlashByte_MX,
+ ProgramFlashSector_MX,
+ EraseFlashChip_MX,
+ EraseFlashSector_MX,
+ WaitForFlashWrite_Common,
+ leMaxTime,
+ {
+ 131072, // ROM size
+ {
+ 4096, // sector size
+ 12, // bit shift to multiply by sector size (4096 == 1 << 12)
+ 32, // number of sectors
+ 0 // appears to be unused
+ },
+ { 3, 1 }, // wait state setup data
+ { { 0x62, 0x13 } } // ID
+ }
+};
diff --git a/berry_fix/payload/src/agb_flash_mx.c b/berry_fix/payload/src/agb_flash_mx.c
new file mode 100644
index 000000000..68eb00cd8
--- /dev/null
+++ b/berry_fix/payload/src/agb_flash_mx.c
@@ -0,0 +1,193 @@
+#include "gba/gba.h"
+#include "gba/flash_internal.h"
+
+const u16 mxMaxTime[] =
+{
+ 10, 65469, TIMER_ENABLE | TIMER_INTR_ENABLE | TIMER_256CLK,
+ 10, 65469, TIMER_ENABLE | TIMER_INTR_ENABLE | TIMER_256CLK,
+ 2000, 65469, TIMER_ENABLE | TIMER_INTR_ENABLE | TIMER_256CLK,
+ 2000, 65469, TIMER_ENABLE | TIMER_INTR_ENABLE | TIMER_256CLK,
+};
+
+const struct FlashSetupInfo MX29L010 =
+{
+ ProgramFlashByte_MX,
+ ProgramFlashSector_MX,
+ EraseFlashChip_MX,
+ EraseFlashSector_MX,
+ WaitForFlashWrite_Common,
+ mxMaxTime,
+ {
+ 131072, // ROM size
+ {
+ 4096, // sector size
+ 12, // bit shift to multiply by sector size (4096 == 1 << 12)
+ 32, // number of sectors
+ 0 // appears to be unused
+ },
+ { 3, 1 }, // wait state setup data
+ { { 0xC2, 0x09 } } // ID
+ }
+};
+
+const struct FlashSetupInfo DefaultFlash =
+{
+ ProgramFlashByte_MX,
+ ProgramFlashSector_MX,
+ EraseFlashChip_MX,
+ EraseFlashSector_MX,
+ WaitForFlashWrite_Common,
+ mxMaxTime,
+ {
+ 131072, // ROM size
+ {
+ 4096, // sector size
+ 12, // bit shift to multiply by sector size (4096 == 1 << 12)
+ 32, // number of sectors
+ 0 // appears to be unused
+ },
+ { 3, 1 }, // wait state setup data
+ { { 0x00, 0x00 } } // ID of 0
+ }
+};
+
+u16 EraseFlashChip_MX(void)
+{
+ u16 result;
+ u16 readFlash1Buffer[0x20];
+
+ REG_WAITCNT = (REG_WAITCNT & ~WAITCNT_SRAM_MASK) | gFlash->wait[0];
+
+ FLASH_WRITE(0x5555, 0xAA);
+ FLASH_WRITE(0x2AAA, 0x55);
+ FLASH_WRITE(0x5555, 0x80);
+ FLASH_WRITE(0x5555, 0xAA);
+ FLASH_WRITE(0x2AAA, 0x55);
+ FLASH_WRITE(0x5555, 0x10);
+
+ SetReadFlash1(readFlash1Buffer);
+
+ result = WaitForFlashWrite(3, FLASH_BASE, 0xFF);
+
+ REG_WAITCNT = (REG_WAITCNT & ~WAITCNT_SRAM_MASK) | WAITCNT_SRAM_8;
+
+ return result;
+}
+
+u16 EraseFlashSector_MX(u16 sectorNum)
+{
+ u16 numTries;
+ u16 result;
+ u8 *addr;
+ u16 readFlash1Buffer[0x20];
+
+ if (sectorNum >= gFlash->sector.count)
+ return 0x80FF;
+
+ SwitchFlashBank(sectorNum / SECTORS_PER_BANK);
+ sectorNum %= SECTORS_PER_BANK;
+
+ numTries = 0;
+
+try_erase:
+ REG_WAITCNT = (REG_WAITCNT & ~WAITCNT_SRAM_MASK) | gFlash->wait[0];
+
+ addr = FLASH_BASE + (sectorNum << gFlash->sector.shift);
+
+ FLASH_WRITE(0x5555, 0xAA);
+ FLASH_WRITE(0x2AAA, 0x55);
+ FLASH_WRITE(0x5555, 0x80);
+ FLASH_WRITE(0x5555, 0xAA);
+ FLASH_WRITE(0x2AAA, 0x55);
+ *addr = 0x30;
+
+ SetReadFlash1(readFlash1Buffer);
+
+ result = WaitForFlashWrite(2, addr, 0xFF);
+
+ if (!(result & 0xA000) || numTries > 3)
+ goto done;
+
+ numTries++;
+
+ goto try_erase;
+
+done:
+ REG_WAITCNT = (REG_WAITCNT & ~WAITCNT_SRAM_MASK) | WAITCNT_SRAM_8;
+
+ return result;
+}
+
+u16 ProgramFlashByte_MX(u16 sectorNum, u32 offset, u8 data)
+{
+ u8 *addr;
+ u16 readFlash1Buffer[0x20];
+
+ if (offset >= gFlash->sector.size)
+ return 0x8000;
+
+ SwitchFlashBank(sectorNum / SECTORS_PER_BANK);
+ sectorNum %= SECTORS_PER_BANK;
+
+ addr = FLASH_BASE + (sectorNum << gFlash->sector.shift) + offset;
+
+ SetReadFlash1(readFlash1Buffer);
+
+ REG_WAITCNT = (REG_WAITCNT & ~WAITCNT_SRAM_MASK) | gFlash->wait[0];
+
+ FLASH_WRITE(0x5555, 0xAA);
+ FLASH_WRITE(0x2AAA, 0x55);
+ FLASH_WRITE(0x5555, 0xA0);
+ *addr = data;
+
+ return WaitForFlashWrite(1, addr, data);
+}
+
+static u16 ProgramByte(u8 *src, u8 *dest)
+{
+ FLASH_WRITE(0x5555, 0xAA);
+ FLASH_WRITE(0x2AAA, 0x55);
+ FLASH_WRITE(0x5555, 0xA0);
+ *dest = *src;
+
+ return WaitForFlashWrite(1, dest, *src);
+}
+
+u16 ProgramFlashSector_MX(u16 sectorNum, void *src)
+{
+ u16 result;
+ u8 *dest;
+ u16 readFlash1Buffer[0x20];
+
+ if (sectorNum >= gFlash->sector.count)
+ return 0x80FF;
+
+ result = EraseFlashSector_MX(sectorNum);
+
+ if (result != 0)
+ return result;
+
+ SwitchFlashBank(sectorNum / SECTORS_PER_BANK);
+ sectorNum %= SECTORS_PER_BANK;
+
+ SetReadFlash1(readFlash1Buffer);
+
+ REG_WAITCNT = (REG_WAITCNT & ~WAITCNT_SRAM_MASK) | gFlash->wait[0];
+
+ gFlashNumRemainingBytes = gFlash->sector.size;
+ dest = FLASH_BASE + (sectorNum << gFlash->sector.shift);
+
+ while (gFlashNumRemainingBytes > 0)
+ {
+ result = ProgramByte(src, dest);
+
+ if (result != 0)
+ break;
+
+ gFlashNumRemainingBytes--;
+ src++;
+ dest++;
+ }
+
+ return result;
+}
diff --git a/berry_fix/payload/src/flash.c b/berry_fix/payload/src/flash.c
new file mode 100644
index 000000000..1f09d0b8f
--- /dev/null
+++ b/berry_fix/payload/src/flash.c
@@ -0,0 +1,752 @@
+#include "gba/gba.h"
+#include "gba/flash_internal.h"
+#include "constants/vars.h"
+#include "global.h"
+#include "main.h"
+#include "flash.h"
+#include "rtc.h"
+
+struct SaveBlockChunk
+{
+ u8 * data;
+ u16 size;
+};
+
+u8 WriteSaveBlockChunks(u16 a0, const struct SaveBlockChunk * a1);
+u8 WriteSingleChunk(u16 a0, const struct SaveBlockChunk * a1);
+u8 TryWriteSector(u8, u8 *);
+u8 EraseCurrentChunk(u16 a0, const struct SaveBlockChunk * a1);
+u8 TryReadAllSaveSectorsCurrentSlot(u16 a0, const struct SaveBlockChunk * a1);
+u8 ReadAllSaveSectorsCurrentSlot(u16 a0, const struct SaveBlockChunk * a1);
+u8 GetSaveValidStatus(const struct SaveBlockChunk * a1);
+u32 DoReadFlashWholeSection(u8 a0, struct SaveSector * a1);
+u16 CalculateChecksum(const void *, u16);
+
+u16 gFirstSaveSector;
+u32 gPrevSaveCounter;
+u16 gLastKnownGoodSector;
+u32 gDamagedSaveSectors;
+u32 gSaveCounter;
+struct SaveSector * gFastSaveSection;
+u16 gCurSaveChunk;
+bool32 gFlashIdentIsValid;
+
+EWRAM_DATA struct SaveBlock2 gSaveBlock2 = {};
+EWRAM_DATA struct SaveBlock1 gSaveBlock1 = {};
+EWRAM_DATA struct PokemonStorage gPokemonStorage = {};
+
+// Each 4 KiB flash sector contains 3968 bytes of actual data followed by a 128 byte footer
+#define SECTOR_DATA_SIZE 3968
+#define SECTOR_FOOTER_SIZE 128
+
+#define SAVEBLOCK_CHUNK(structure, chunkNum) \
+{ \
+ (u8 *)&structure + chunkNum * SECTOR_DATA_SIZE, \
+ min(sizeof(structure) - chunkNum * SECTOR_DATA_SIZE, SECTOR_DATA_SIZE) \
+} \
+
+static const struct SaveBlockChunk sSaveBlockChunks[] =
+{
+ SAVEBLOCK_CHUNK(gSaveBlock2, 0),
+
+ SAVEBLOCK_CHUNK(gSaveBlock1, 0),
+ SAVEBLOCK_CHUNK(gSaveBlock1, 1),
+ SAVEBLOCK_CHUNK(gSaveBlock1, 2),
+ SAVEBLOCK_CHUNK(gSaveBlock1, 3),
+
+ SAVEBLOCK_CHUNK(gPokemonStorage, 0),
+ SAVEBLOCK_CHUNK(gPokemonStorage, 1),
+ SAVEBLOCK_CHUNK(gPokemonStorage, 2),
+ SAVEBLOCK_CHUNK(gPokemonStorage, 3),
+ SAVEBLOCK_CHUNK(gPokemonStorage, 4),
+ SAVEBLOCK_CHUNK(gPokemonStorage, 5),
+ SAVEBLOCK_CHUNK(gPokemonStorage, 6),
+ SAVEBLOCK_CHUNK(gPokemonStorage, 7),
+ SAVEBLOCK_CHUNK(gPokemonStorage, 8),
+};
+
+const u16 gInfoMessagesPal[] = INCBIN_U16("graphics/msg_box.gbapal");
+const u8 gInfoMessagesTilemap[] = INCBIN_U8("graphics/msg_box.tilemap.lz");
+const u8 gInfoMessagesGfx[] = INCBIN_U8("graphics/msg_box.4bpp.lz");
+
+bool32 flash_maincb_ident_is_valid(void)
+{
+ gFlashIdentIsValid = TRUE;
+ if (!IdentifyFlash())
+ {
+ SetFlashTimerIntr(0, &((IntrFunc *)gIntrFuncPointers)[9]);
+ return TRUE;
+ }
+ gFlashIdentIsValid = FALSE;
+ return FALSE;
+}
+
+void Call_ReadFlash(u16 sectorNum, ptrdiff_t offset, void * dest, size_t size)
+{
+ ReadFlash(sectorNum, offset, dest, size);
+}
+
+u8 Call_WriteSaveBlockChunks(u16 a0, const struct SaveBlockChunk * a1)
+{
+ return WriteSaveBlockChunks(a0, a1);
+}
+
+u8 Call_TryReadAllSaveSectorsCurrentSlot(u16 a0, const struct SaveBlockChunk * a1)
+{
+ return TryReadAllSaveSectorsCurrentSlot(a0, a1);
+}
+
+u32 * GetDamagedSaveSectorsPtr(void)
+{
+ return &gDamagedSaveSectors;
+}
+
+s32 flash_write_save_block_chunks(u8 a0)
+{
+ u8 i;
+
+ switch (a0)
+ {
+ case 0:
+ default:
+ Call_WriteSaveBlockChunks(0xFFFF, sSaveBlockChunks);
+ break;
+ case 1:
+ for (i = 0; i < 5; i++)
+ {
+ Call_WriteSaveBlockChunks(i, sSaveBlockChunks);
+ }
+ break;
+ case 2:
+ Call_WriteSaveBlockChunks(0, sSaveBlockChunks);
+ break;
+ }
+
+ return 0;
+}
+
+u8 flash_write_save_block_chunks_check_damage(u8 a0)
+{
+ flash_write_save_block_chunks(a0);
+ if (*GetDamagedSaveSectorsPtr() == 0)
+ return 1;
+ return 0xFF;
+}
+
+u8 flash_maincb_read_save(u32 unused)
+{
+ return Call_TryReadAllSaveSectorsCurrentSlot(0xFFFF, sSaveBlockChunks);
+}
+
+void msg_load_gfx(void)
+{
+ REG_DISPCNT = 0;
+ REG_BG0HOFS = 0;
+ REG_BG0VOFS = 0;
+ REG_BLDCNT = 0;
+ LZ77UnCompVram(gInfoMessagesGfx, (void *)BG_VRAM);
+ LZ77UnCompVram(gInfoMessagesTilemap, (void *)BG_SCREEN_ADDR(28));
+ CpuCopy16(gInfoMessagesPal, (void *)BG_PLTT, 0x200);
+ REG_BG0CNT = BGCNT_SCREENBASE(28) | BGCNT_TXT512x512;
+ REG_DISPCNT = DISPCNT_BG0_ON;
+}
+
+void msg_display(enum MsgBoxUpdateMessage a0)
+{
+ switch (a0)
+ {
+ case MSGBOX_WILL_NOW_UPDATE:
+ REG_BG0HOFS = 0;
+ REG_BG0VOFS = 0;
+ break;
+ case MSGBOX_HAS_BEEN_UPDATED:
+ REG_BG0HOFS = 0x100;
+ REG_BG0VOFS = 0;
+ break;
+ case MSGBOX_UNABLE_TO_UPDATE:
+ REG_BG0HOFS = 0x100;
+ REG_BG0VOFS = 0xB0;
+ break;
+ case MSGBOX_NO_NEED_TO_UPDATE:
+ REG_BG0HOFS = 0;
+ REG_BG0VOFS = 0xB0;
+ break;
+ case MSGBOX_UPDATING:
+ REG_BG0HOFS = 0;
+ REG_BG0VOFS = 0x160;
+ break;
+ }
+}
+
+void Save_EraseAllData(void)
+{
+ u16 i;
+ for (i = 0; i < 32; i++)
+ EraseFlashSector(i);
+}
+
+void Save_ResetSaveCounters(void)
+{
+ gSaveCounter = 0;
+ gFirstSaveSector = 0;
+ gDamagedSaveSectors = 0;
+}
+
+bool32 SetSectorDamagedStatus(u8 op, u8 sectorNum)
+{
+ bool32 retVal = FALSE;
+
+ switch (op)
+ {
+ case SECTOR_DAMAGED:
+ gDamagedSaveSectors |= (1 << sectorNum);
+ break;
+ case SECTOR_OK:
+ gDamagedSaveSectors &= ~(1 << sectorNum);
+ break;
+ case SECTOR_CHECK: // unused
+ if (gDamagedSaveSectors & (1 << sectorNum))
+ retVal = TRUE;
+ break;
+ }
+
+ return retVal;
+}
+
+u8 WriteSaveBlockChunks(u16 chunkId, const struct SaveBlockChunk *chunks)
+{
+ u32 retVal;
+ u16 i;
+
+ gFastSaveSection = eSaveSection;
+
+ if (chunkId != 0xFFFF) // write single chunk
+ {
+ retVal = WriteSingleChunk(chunkId, chunks);
+ }
+ else // write all chunks
+ {
+ gLastKnownGoodSector = gFirstSaveSector;
+ gPrevSaveCounter = gSaveCounter;
+ gFirstSaveSector++;
+ gFirstSaveSector %= NUM_SECTORS_PER_SAVE_SLOT;
+ gSaveCounter++;
+ retVal = SAVE_STATUS_OK;
+
+ for (i = 0; i < NUM_SECTORS_PER_SAVE_SLOT; i++)
+ WriteSingleChunk(i, chunks);
+
+ // Check for any bad sectors
+ if (gDamagedSaveSectors != 0) // skip the damaged sector.
+ {
+ retVal = SAVE_STATUS_ERROR;
+ gFirstSaveSector = gLastKnownGoodSector;
+ gSaveCounter = gPrevSaveCounter;
+ }
+ }
+
+ return retVal;
+}
+
+u8 WriteSingleChunk(u16 chunkId, const struct SaveBlockChunk * chunks)
+{
+ u16 i;
+ u16 sectorNum;
+ u8 *chunkData;
+ u16 chunkSize;
+
+ // select sector number
+ sectorNum = chunkId + gFirstSaveSector;
+ sectorNum %= NUM_SECTORS_PER_SAVE_SLOT;
+ // select save slot
+ sectorNum += NUM_SECTORS_PER_SAVE_SLOT * (gSaveCounter % 2);
+
+ chunkData = chunks[chunkId].data;
+ chunkSize = chunks[chunkId].size;
+
+ // clear save section.
+ for (i = 0; i < sizeof(struct SaveSector); i++)
+ ((u8 *)gFastSaveSection)[i] = 0;
+
+ gFastSaveSection->id = chunkId;
+ gFastSaveSection->signature = FILE_SIGNATURE;
+ gFastSaveSection->counter = gSaveCounter;
+ for (i = 0; i < chunkSize; i++)
+ gFastSaveSection->data[i] = chunkData[i];
+ gFastSaveSection->checksum = CalculateChecksum(chunkData, chunkSize);
+
+ return TryWriteSector(sectorNum, gFastSaveSection->data);
+}
+
+u8 HandleWriteSectorNBytes(u8 sectorNum, u8 *data, u16 size)
+{
+ u16 i;
+ struct SaveSector *section = eSaveSection;
+
+ for (i = 0; i < sizeof(struct SaveSector); i++)
+ ((char *)section)[i] = 0;
+
+ section->signature = FILE_SIGNATURE;
+ for (i = 0; i < size; i++)
+ section->data[i] = data[i];
+ section->id = CalculateChecksum(data, size); // though this appears to be incorrect, it might be some sector checksum instead of a whole save checksum and only appears to be relevent to HOF data, if used.
+
+ return TryWriteSector(sectorNum, section->data);
+}
+
+u8 TryWriteSector(u8 sectorNum, u8 *data)
+{
+ if (ProgramFlashSectorAndVerify(sectorNum, data) != 0) // is damaged?
+ {
+ SetSectorDamagedStatus(SECTOR_DAMAGED, sectorNum); // set damaged sector bits.
+ return SAVE_STATUS_ERROR;
+ }
+ else
+ {
+ SetSectorDamagedStatus(SECTOR_OK, sectorNum); // unset damaged sector bits. it's safe now.
+ return SAVE_STATUS_OK;
+ }
+}
+
+u32 RestoreSaveBackupVarsAndIncrement(const struct SaveBlockChunk *chunk) // chunk is unused
+{
+ gFastSaveSection = eSaveSection;
+ gLastKnownGoodSector = gFirstSaveSector;
+ gPrevSaveCounter = gSaveCounter;
+ gFirstSaveSector++;
+ gFirstSaveSector %= NUM_SECTORS_PER_SAVE_SLOT;
+ gSaveCounter++;
+ gCurSaveChunk = 0;
+ gDamagedSaveSectors = 0;
+ return 0;
+}
+
+u32 RestoreSaveBackupVars(const struct SaveBlockChunk *chunk)
+{
+ gFastSaveSection = eSaveSection;
+ gLastKnownGoodSector = gFirstSaveSector;
+ gPrevSaveCounter = gSaveCounter;
+ gCurSaveChunk = 0;
+ gDamagedSaveSectors = 0;
+ return 0;
+}
+
+u8 WriteSingleChunkAndIncrement(u16 a1, const struct SaveBlockChunk * chunk)
+{
+ u8 retVal;
+
+ if (gCurSaveChunk < a1 - 1)
+ {
+ retVal = SAVE_STATUS_OK;
+ WriteSingleChunk(gCurSaveChunk, chunk);
+ gCurSaveChunk++;
+ if (gDamagedSaveSectors)
+ {
+ retVal = SAVE_STATUS_ERROR;
+ gFirstSaveSector = gLastKnownGoodSector;
+ gSaveCounter = gPrevSaveCounter;
+ }
+ }
+ else
+ {
+ retVal = SAVE_STATUS_ERROR;
+ }
+
+ return retVal;
+}
+
+u8 ErasePreviousChunk(u16 a1, const struct SaveBlockChunk *chunk)
+{
+ u8 retVal = SAVE_STATUS_OK;
+
+ EraseCurrentChunk(a1 - 1, chunk);
+
+ if (gDamagedSaveSectors)
+ {
+ retVal = SAVE_STATUS_ERROR;
+ gFirstSaveSector = gLastKnownGoodSector;
+ gSaveCounter = gPrevSaveCounter;
+ }
+ return retVal;
+}
+
+u8 EraseCurrentChunk(u16 chunkId, const struct SaveBlockChunk *chunks)
+{
+ u16 i;
+ u16 sector;
+ u8 *data;
+ u16 size;
+ u8 status;
+
+ // select sector number
+ sector = chunkId + gFirstSaveSector;
+ sector %= NUM_SECTORS_PER_SAVE_SLOT;
+ // select save slot
+ sector += NUM_SECTORS_PER_SAVE_SLOT * (gSaveCounter % 2);
+
+ data = chunks[chunkId].data;
+ size = chunks[chunkId].size;
+
+ // clear temp save section.
+ for (i = 0; i < sizeof(struct SaveSector); i++)
+ ((char *)gFastSaveSection)[i] = 0;
+
+ gFastSaveSection->id = chunkId;
+ gFastSaveSection->signature = FILE_SIGNATURE;
+ gFastSaveSection->counter = gSaveCounter;
+
+ // set temp section's data.
+ for (i = 0; i < size; i++)
+ gFastSaveSection->data[i] = data[i];
+
+ // calculate checksum.
+ gFastSaveSection->checksum = CalculateChecksum(data, size);
+
+ EraseFlashSector(sector);
+
+ status = SAVE_STATUS_OK;
+
+ for (i = 0; i < sizeof(struct UnkSaveSection); i++)
+ {
+ if (ProgramFlashByte(sector, i, gFastSaveSection->data[i]))
+ {
+ status = SAVE_STATUS_ERROR;
+ break;
+ }
+ }
+
+ if (status == SAVE_STATUS_ERROR)
+ {
+ SetSectorDamagedStatus(SECTOR_DAMAGED, sector);
+ return SAVE_STATUS_ERROR;
+ }
+ else
+ {
+ status = SAVE_STATUS_OK;
+
+ for (i = 0; i < 7; i++)
+ {
+ if (ProgramFlashByte(sector, 0xFF9 + i, ((u8 *)gFastSaveSection)[0xFF9 + i]))
+ {
+ status = SAVE_STATUS_ERROR;
+ break;
+ }
+ }
+
+ if (status == SAVE_STATUS_ERROR)
+ {
+ SetSectorDamagedStatus(SECTOR_DAMAGED, sector);
+ return SAVE_STATUS_ERROR;
+ }
+ else
+ {
+ SetSectorDamagedStatus(SECTOR_OK, sector);
+ return SAVE_STATUS_OK;
+ }
+ }
+}
+
+u8 WriteSomeFlashByteToPrevSector(u16 a1, const struct SaveBlockChunk *chunk)
+{
+ u16 sector;
+
+ // select sector number
+ sector = a1 + gFirstSaveSector - 1;
+ sector %= NUM_SECTORS_PER_SAVE_SLOT;
+ // select save slot
+ sector += NUM_SECTORS_PER_SAVE_SLOT * (gSaveCounter % 2);
+
+ if (ProgramFlashByte(sector, sizeof(struct UnkSaveSection), ((u8 *)gFastSaveSection)[sizeof(struct UnkSaveSection)]))
+ {
+ // sector is damaged, so enable the bit in gDamagedSaveSectors and restore the last written sector and save counter.
+ SetSectorDamagedStatus(SECTOR_DAMAGED, sector);
+ gFirstSaveSector = gLastKnownGoodSector;
+ gSaveCounter = gPrevSaveCounter;
+ return SAVE_STATUS_ERROR;
+ }
+ else
+ {
+ SetSectorDamagedStatus(SECTOR_OK, sector);
+ return SAVE_STATUS_OK;
+ }
+}
+
+u8 WriteSomeFlashByte0x25ToPrevSector(u16 a1, const struct SaveBlockChunk *chunk)
+{
+ u16 sector;
+
+ sector = a1 + gFirstSaveSector - 1;
+ sector %= NUM_SECTORS_PER_SAVE_SLOT;
+ sector += NUM_SECTORS_PER_SAVE_SLOT * (gSaveCounter % 2);
+
+ if (ProgramFlashByte(sector, sizeof(struct UnkSaveSection), 0x25))
+ {
+ // sector is damaged, so enable the bit in gDamagedSaveSectors and restore the last written sector and save counter.
+ SetSectorDamagedStatus(SECTOR_DAMAGED, sector);
+ gFirstSaveSector = gLastKnownGoodSector;
+ gSaveCounter = gPrevSaveCounter;
+ return SAVE_STATUS_ERROR;
+ }
+ else
+ {
+ SetSectorDamagedStatus(SECTOR_OK, sector);
+ return SAVE_STATUS_OK;
+ }
+}
+
+u8 TryReadAllSaveSectorsCurrentSlot(u16 a1, const struct SaveBlockChunk *chunk)
+{
+ u8 retVal;
+ gFastSaveSection = eSaveSection;
+ if (a1 != 0xFFFF)
+ {
+ retVal = SAVE_STATUS_ERROR;
+ }
+ else
+ {
+ retVal = GetSaveValidStatus(chunk);
+ ReadAllSaveSectorsCurrentSlot(0xFFFF, chunk);
+ }
+
+ return retVal;
+}
+
+u8 ReadAllSaveSectorsCurrentSlot(u16 a1, const struct SaveBlockChunk *chunks)
+{
+ u16 i;
+ u16 checksum;
+ u16 sector = NUM_SECTORS_PER_SAVE_SLOT * (gSaveCounter % 2);
+ u16 id;
+
+ for (i = 0; i < NUM_SECTORS_PER_SAVE_SLOT; i++)
+ {
+ DoReadFlashWholeSection(i + sector, gFastSaveSection);
+ id = gFastSaveSection->id;
+ if (id == 0)
+ gFirstSaveSector = i;
+ checksum = CalculateChecksum(gFastSaveSection->data, chunks[id].size);
+ if (gFastSaveSection->signature == FILE_SIGNATURE
+ && gFastSaveSection->checksum == checksum)
+ {
+ u16 j;
+ for (j = 0; j < chunks[id].size; j++)
+ chunks[id].data[j] = gFastSaveSection->data[j];
+ }
+ }
+
+ return 1;
+}
+
+u8 GetSaveValidStatus(const struct SaveBlockChunk *chunks)
+{
+ u16 sector;
+ bool8 signatureValid;
+ u16 checksum;
+ u32 slot1saveCounter = 0;
+ u32 slot2saveCounter = 0;
+ u8 slot1Status;
+ u8 slot2Status;
+ u32 validSectors;
+ const u32 ALL_SECTORS = (1 << NUM_SECTORS_PER_SAVE_SLOT) - 1; // bitmask of all saveblock sectors
+
+ // check save slot 1.
+ validSectors = 0;
+ signatureValid = FALSE;
+ for (sector = 0; sector < NUM_SECTORS_PER_SAVE_SLOT; sector++)
+ {
+ DoReadFlashWholeSection(sector, gFastSaveSection);
+ if (gFastSaveSection->signature == FILE_SIGNATURE)
+ {
+ signatureValid = TRUE;
+ checksum = CalculateChecksum(gFastSaveSection->data, chunks[gFastSaveSection->id].size);
+ if (gFastSaveSection->checksum == checksum)
+ {
+ slot1saveCounter = gFastSaveSection->counter;
+ validSectors |= 1 << gFastSaveSection->id;
+ }
+ }
+ }
+
+ if (signatureValid)
+ {
+ if (validSectors == ALL_SECTORS)
+ slot1Status = SAVE_STATUS_OK;
+ else
+ slot1Status = SAVE_STATUS_ERROR;
+ }
+ else
+ {
+ slot1Status = SAVE_STATUS_EMPTY;
+ }
+
+ // check save slot 2.
+ validSectors = 0;
+ signatureValid = FALSE;
+ for (sector = 0; sector < NUM_SECTORS_PER_SAVE_SLOT; sector++)
+ {
+ DoReadFlashWholeSection(NUM_SECTORS_PER_SAVE_SLOT + sector, gFastSaveSection);
+ if (gFastSaveSection->signature == FILE_SIGNATURE)
+ {
+ signatureValid = TRUE;
+ checksum = CalculateChecksum(gFastSaveSection->data, chunks[gFastSaveSection->id].size);
+ if (gFastSaveSection->checksum == checksum)
+ {
+ slot2saveCounter = gFastSaveSection->counter;
+ validSectors |= 1 << gFastSaveSection->id;
+ }
+ }
+ }
+
+ if (signatureValid)
+ {
+ if (validSectors == ALL_SECTORS)
+ slot2Status = SAVE_STATUS_OK;
+ else
+ slot2Status = SAVE_STATUS_ERROR;
+ }
+ else
+ {
+ slot2Status = SAVE_STATUS_EMPTY;
+ }
+
+ if (slot1Status == SAVE_STATUS_OK && slot2Status == SAVE_STATUS_OK)
+ {
+ // Choose counter of the most recent save file
+ if ((slot1saveCounter == -1 && slot2saveCounter == 0) || (slot1saveCounter == 0 && slot2saveCounter == -1))
+ {
+ if ((unsigned)(slot1saveCounter + 1) < (unsigned)(slot2saveCounter + 1))
+ gSaveCounter = slot2saveCounter;
+ else
+ gSaveCounter = slot1saveCounter;
+ }
+ else
+ {
+ if (slot1saveCounter < slot2saveCounter)
+ gSaveCounter = slot2saveCounter;
+ else
+ gSaveCounter = slot1saveCounter;
+ }
+ return SAVE_STATUS_OK;
+ }
+
+ if (slot1Status == SAVE_STATUS_OK)
+ {
+ gSaveCounter = slot1saveCounter;
+ if (slot2Status == SAVE_STATUS_ERROR)
+ return SAVE_STATUS_ERROR;
+ else
+ return SAVE_STATUS_OK;
+ }
+
+ if (slot2Status == SAVE_STATUS_OK)
+ {
+ gSaveCounter = slot2saveCounter;
+ if (slot1Status == SAVE_STATUS_ERROR)
+ return SAVE_STATUS_ERROR;
+ else
+ return SAVE_STATUS_OK;
+ }
+
+ if (slot1Status == SAVE_STATUS_EMPTY && slot2Status == SAVE_STATUS_EMPTY)
+ {
+ gSaveCounter = 0;
+ gFirstSaveSector = 0;
+ return SAVE_STATUS_EMPTY;
+ }
+
+ gSaveCounter = 0;
+ gFirstSaveSector = 0;
+ return 2;
+}
+
+u8 ReadSomeUnknownSectorAndVerify(u8 sector, u8 *data, u16 size)
+{
+ u16 i;
+ struct SaveSector *section = eSaveSection;
+
+ DoReadFlashWholeSection(sector, section);
+ if (section->signature == FILE_SIGNATURE)
+ {
+ u16 checksum = CalculateChecksum(section->data, size);
+ if (section->id == checksum)
+ {
+ for (i = 0; i < size; i++)
+ data[i] = section->data[i];
+ return SAVE_STATUS_OK;
+ }
+ else
+ {
+ return 2;
+ }
+ }
+ else
+ {
+ return SAVE_STATUS_EMPTY;
+ }
+}
+
+u32 DoReadFlashWholeSection(u8 sector, struct SaveSector *section)
+{
+ ReadFlash(sector, 0, section->data, sizeof(struct SaveSector));
+ return 1;
+}
+
+u16 CalculateChecksum(const void *data, u16 size)
+{
+ u16 i;
+ u32 checksum = 0;
+
+ for (i = 0; i < (size / 4); i++)
+ {
+ checksum += *((u32 *)data);
+ data += sizeof(u32);
+ }
+
+ return ((checksum >> 16) + checksum);
+}
+
+void nullsub_0201182C()
+{
+}
+
+void nullsub_02011830()
+{
+}
+
+void nullsub_02011834()
+{
+}
+
+u16 * get_var_addr(u16 a0)
+{
+ if (a0 < VARS_START)
+ return NULL;
+ if (a0 < VAR_SPECIAL_0)
+ return &gSaveBlock1.vars[a0 - VARS_START];
+ return NULL;
+}
+
+bool32 flash_maincb_check_need_reset_pacifidlog_tm(void)
+{
+ u8 sp0;
+ u16 * data = get_var_addr(VAR_PACIFIDLOG_TM_RECEIVED_DAY);
+ rtc_maincb_is_time_since_last_berry_update_positive(&sp0);
+ if (*data <= gRtcUTCTime.days)
+ return TRUE;
+ else
+ return FALSE;
+}
+
+bool32 flash_maincb_reset_pacifidlog_tm(void)
+{
+ u8 sp0;
+ if (flash_maincb_check_need_reset_pacifidlog_tm() == TRUE)
+ return TRUE;
+ rtc_maincb_is_time_since_last_berry_update_positive(&sp0);
+ if (gRtcUTCTime.days < 0)
+ return FALSE;
+ *get_var_addr(VAR_PACIFIDLOG_TM_RECEIVED_DAY) = 1;
+ if (flash_write_save_block_chunks_check_damage(0) != TRUE)
+ return FALSE;
+ return TRUE;
+}
diff --git a/berry_fix/payload/src/main.c b/berry_fix/payload/src/main.c
new file mode 100644
index 000000000..325d3830e
--- /dev/null
+++ b/berry_fix/payload/src/main.c
@@ -0,0 +1,289 @@
+#include "gba/gba.h"
+#include "global.h"
+#include "main.h"
+#include "rtc.h"
+#include "flash.h"
+
+static s32 gInitialWaitTimer;
+IntrFunc gIntrTable[16];
+u16 gHeldKeys;
+u16 gNewKeys;
+u8 gIntrVector[0x100];
+u32 gUpdateSuccessful;
+u32 gUnknown_3001194;
+u32 gUnknown_30011A0[0x19];
+u32 gMainCallbackState;
+u32 gGameVersion;
+
+EWRAM_DATA u8 gSharedMem[0x8000] = {};
+
+void IntrMain(void);
+void ReadKeys(void);
+void dummy_intr_0(void);
+void dummy_intr_1(void);
+void main_callback(u32 *, void *, void *);
+
+
+const char gBerryFixGameCode[] = "AGBJ";
+const IntrFunc gIntrFuncPointers[] = {
+ dummy_intr_0,
+ dummy_intr_1,
+ dummy_intr_0,
+ dummy_intr_0,
+ dummy_intr_0,
+ dummy_intr_0,
+ dummy_intr_0,
+ dummy_intr_0,
+ dummy_intr_0,
+ dummy_intr_0,
+ NULL,
+ NULL,
+ NULL
+};
+const char gVersionData[][2] = {
+ {'J', 1},
+ {'E', 2},
+ {'D', 1},
+ {'F', 1},
+ {'I', 1},
+ {'S', 1}
+};
+const char gRubyTitleAndCode[] = "POKEMON RUBYAXV";
+const char gSapphireTitleAndCode[] = "POKEMON SAPPAXP";
+const u16 sDebugPals[20] = {
+ RGB(00, 00, 00),
+ RGB(31, 00, 00),
+ RGB(00, 31, 00),
+ RGB(00, 00, 31)
+};
+const u16 sDebugDigitsGfx[] = INCBIN_U16("graphics/debug_digits.4bpp");
+
+void AgbMain(void)
+{
+ RegisterRamReset(0x1E);
+ DmaCopy32(3, gIntrFuncPointers, gIntrTable, sizeof gIntrFuncPointers);
+ DmaCopy32(3, IntrMain, gIntrVector, sizeof(gIntrVector));
+ INTR_VECTOR = gIntrVector;
+ REG_IE = INTR_FLAG_VBLANK;
+ if (*RomHeaderMagic == 0x96 && *(u32 *)RomHeaderGameCode == *(u32 *)gBerryFixGameCode)
+ REG_IE |= INTR_FLAG_GAMEPAK;
+ REG_DISPSTAT = DISPSTAT_VBLANK_INTR;
+ REG_IME = INTR_FLAG_VBLANK;
+ msg_load_gfx();
+ gMainCallbackState = MAINCB_INIT;
+ gUnknown_3001194 = 0;
+ for (;;)
+ {
+ VBlankIntrWait();
+ ReadKeys();
+ main_callback(&gMainCallbackState, gUnknown_30011A0, gSharedMem);
+ }
+}
+
+void dummy_intr_1(void)
+{}
+
+void dummy_intr_0(void)
+{}
+
+void ReadKeys(void)
+{
+ u16 keyInput = REG_KEYINPUT ^ KEYS_MASK;
+ gNewKeys = keyInput & ~gHeldKeys;
+ gHeldKeys = keyInput;
+}
+
+void fill_palette(const u8 * src, u16 * dest, u8 value)
+{
+ s32 i;
+ for (i = 0; src[i] != 0; i++)
+ dest[i] = src[i] | value << 12;
+}
+
+bool32 berry_fix_memcmp(const char * src1, const char * src2, size_t size)
+{
+ s32 i;
+ for (i = 0; i < size; i++)
+ {
+ if (src1[i] != src2[i])
+ return FALSE;
+ }
+ return TRUE;
+}
+
+s32 validate_rom_header_internal(void)
+{
+ char languageCode = *(RomHeaderGameCode + 3);
+ s32 softwareVersion = *RomHeaderSoftwareVersion;
+ s32 shouldUpdate = -1;
+ s32 i;
+ for (i = 0; i < ARRAY_COUNT(gVersionData); i++)
+ {
+ if (languageCode == gVersionData[i][0])
+ {
+ if (softwareVersion >= gVersionData[i][1])
+ {
+ shouldUpdate = 0;
+ }
+ else
+ {
+ shouldUpdate = 1;
+ }
+ break;
+ }
+ }
+ if (shouldUpdate != -1)
+ {
+ if (berry_fix_memcmp(RomHeaderGameTitle, gRubyTitleAndCode, 15) == TRUE)
+ {
+ if (shouldUpdate == 0)
+ return RUBY_NONEED;
+ else
+ {
+ gGameVersion = VERSION_RUBY;
+ return RUBY_UPDATABLE;
+ }
+ }
+ else if (berry_fix_memcmp(RomHeaderGameTitle, gSapphireTitleAndCode, 15) == TRUE)
+ {
+ if (shouldUpdate == 0)
+ return SAPPHIRE_NONEED;
+ else
+ {
+ gGameVersion = VERSION_SAPPHIRE;
+ return SAPPHIRE_UPDATABLE;
+ }
+ }
+ }
+ return INVALID;
+}
+
+s32 validate_rom_header(void)
+{
+ if (*RomHeaderMakerCode == '0' && *(RomHeaderMakerCode + 1) == '1' && *RomHeaderMagic == 0x96)
+ return validate_rom_header_internal();
+ else
+ return INVALID;
+}
+
+void main_callback(u32 * state, void * unused1, void * unused2)
+{
+ u8 year;
+ switch (*state)
+ {
+ case MAINCB_INIT:
+ msg_display(MSGBOX_WILL_NOW_UPDATE);
+ if (++gInitialWaitTimer >= 180)
+ {
+ gInitialWaitTimer = 0;
+ gUpdateSuccessful = 0;
+ switch (validate_rom_header())
+ {
+ case SAPPHIRE_UPDATABLE:
+ case RUBY_UPDATABLE: // Should Update Ruby
+ ++(*state); // MAINCB_CHECK_RTC
+ break;
+ case INVALID: // Invalid header
+ *state = MAINCB_ERROR;
+ break;
+ case SAPPHIRE_NONEED: // Should not update Sapphire
+ case RUBY_NONEED: // Should not update Ruby
+ *state = MAINCB_NO_NEED_TO_FIX;
+ break;
+ }
+ }
+ break;
+ case MAINCB_CHECK_RTC:
+ if (!rtc_maincb_is_rtc_working())
+ *state = MAINCB_ERROR;
+ else
+ ++(*state); // MAINCB_CHECK_FLASH
+ break;
+ case MAINCB_CHECK_FLASH:
+ if (flash_maincb_ident_is_valid() == TRUE)
+ ++(*state); // MAINCB_READ_SAVE
+ else
+ *state = MAINCB_ERROR;
+ break;
+ case MAINCB_READ_SAVE:
+ if (flash_maincb_read_save(0) == SAVE_STATUS_OK)
+ ++(*state); // MAINCB_CHECK_TIME
+ else
+ *state = MAINCB_ERROR;
+ break;
+ case MAINCB_CHECK_TIME:
+ if (rtc_maincb_is_time_since_last_berry_update_positive(&year) == TRUE)
+ {
+ if (year == 0)
+ ++(*state); // MAINCB_FIX_DATE
+ else
+ *state = MAINCB_CHECK_PACIFIDLOG_TM;
+ }
+ else
+ {
+ if (year != 1)
+ *state = MAINCB_YEAR_MAKES_NO_SENSE;
+ else
+ ++(*state); // MAINCB_FIX_DATE
+ }
+ break;
+ case MAINCB_FIX_DATE:
+ rtc_maincb_fix_date();
+ gUpdateSuccessful |= 1;
+ *state = MAINCB_CHECK_PACIFIDLOG_TM;
+ break;
+ case MAINCB_CHECK_PACIFIDLOG_TM:
+ if (flash_maincb_check_need_reset_pacifidlog_tm() == TRUE)
+ *state = MAINCB_FINISHED;
+ else
+ *state = MAINCB_FIX_PACIFIDLOG_TM;
+ break;
+ case MAINCB_FIX_PACIFIDLOG_TM:
+ msg_display(MSGBOX_UPDATING);
+ if (flash_maincb_reset_pacifidlog_tm() == TRUE)
+ {
+ gUpdateSuccessful |= 1;
+ *state = MAINCB_FINISHED;
+ }
+ else
+ *state = MAINCB_ERROR;
+ break;
+ case MAINCB_FINISHED:
+ if (gUpdateSuccessful == 0)
+ *state = MAINCB_NO_NEED_TO_FIX;
+ else
+ msg_display(MSGBOX_HAS_BEEN_UPDATED);
+ break;
+ case MAINCB_NO_NEED_TO_FIX:
+ msg_display(MSGBOX_NO_NEED_TO_UPDATE);
+ break;
+ case MAINCB_YEAR_MAKES_NO_SENSE:
+ msg_display(MSGBOX_UNABLE_TO_UPDATE);
+ break;
+ case MAINCB_ERROR:
+ msg_display(MSGBOX_UNABLE_TO_UPDATE);
+ break;
+ }
+}
+
+void DBG_LoadDigitsPal(void)
+{
+ const u16 * src;
+ s32 i;
+ register vu16 * dest asm("r3") = (vu16 *)BG_PLTT + 1;
+ DmaFill16(3, RGB(31, 31, 31), (vu16 *)BG_PLTT, BG_PLTT_SIZE);
+ src = sDebugPals;
+ for (i = 0; i < 4; i++)
+ {
+ *dest = *src;
+ dest += 16;
+ src++;
+ }
+}
+
+void DBG_LoadDigits(void)
+{
+ DmaFill16(3, 0x1111, (void *)VRAM + 0x8420, 0x1800);
+ DmaCopy32(3, sDebugDigitsGfx, (void *)VRAM + 0x8600, 0x200);
+ DBG_LoadDigitsPal();
+}
diff --git a/berry_fix/payload/src/rtc.c b/berry_fix/payload/src/rtc.c
new file mode 100644
index 000000000..e73f522aa
--- /dev/null
+++ b/berry_fix/payload/src/rtc.c
@@ -0,0 +1,346 @@
+#include "gba/gba.h"
+#include "siirtc.h"
+#include "global.h"
+#include "main.h"
+
+struct Time gTimeSinceBerryUpdate;
+struct Time gRtcUTCTime;
+
+static u16 sRtcProbeStatus;
+static struct SiiRtcInfo sRtcInfoBuffer;
+static u8 sRtcProbeCode;
+static u16 sImeBak;
+static struct SiiRtcInfo sRtcInfoWork;
+
+const struct SiiRtcInfo sDefaultRTC = {
+ .year = 0, // 2000
+ .month = 1, // January
+ .day = 1, // 01
+ .dayOfWeek = 0,
+ .hour = 0,
+ .minute = 0,
+ .second = 0,
+ .status = 0,
+ .alarmHour = 0,
+ .alarmMinute = 0
+};
+const s32 sDaysPerMonth[] = {
+ 31,
+ 28,
+ 31,
+ 30,
+ 31,
+ 30,
+ 31,
+ 31,
+ 30,
+ 31,
+ 30,
+ 31
+};
+
+void rtc_get_status_and_datetime(struct SiiRtcInfo *);
+u16 rtc_validate_datetime(struct SiiRtcInfo *);
+
+
+void rtc_intr_disable(void)
+{
+ sImeBak = REG_IME;
+ REG_IME = 0;
+}
+
+void rtc_intr_enable(void)
+{
+ REG_IME = sImeBak;
+}
+
+s32 bcd_to_hex(u8 a0)
+{
+ if (a0 >= 0xa0 || (a0 & 0xF) >= 10)
+ return 0xFF;
+ return ((a0 >> 4) & 0xF) * 10 + (a0 & 0xF);
+}
+
+bool8 is_leap_year(u8 year)
+{
+ if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0)
+ return TRUE;
+ return FALSE;
+}
+
+u16 rtc_count_days_parameterized(u8 year, u8 month, u8 day)
+{
+ u16 numDays = 0;
+ s32 i;
+ for (i = year - 1; i > 0; i--)
+ {
+ numDays += 365;
+ if (is_leap_year(i) == TRUE)
+ numDays++;
+ }
+ for (i = 0; i < month - 1; i++)
+ numDays += sDaysPerMonth[i];
+ if (month > MONTH_FEB && is_leap_year(year) == TRUE)
+ numDays++;
+ numDays += day;
+ return numDays;
+}
+
+u16 rtc_count_days_from_info(struct SiiRtcInfo *info)
+{
+ return rtc_count_days_parameterized(bcd_to_hex(info->year), bcd_to_hex(info->month), bcd_to_hex(info->day));
+}
+
+static void rtc_probe_status(void)
+{
+ sRtcProbeStatus = 0;
+ rtc_intr_disable();
+ SiiRtcUnprotect();
+ sRtcProbeCode = SiiRtcProbe();
+ rtc_intr_enable();
+ if ((sRtcProbeCode & 0xF) != 1)
+ sRtcProbeStatus = 1;
+ else
+ {
+ if (sRtcProbeCode & 0xF0)
+ sRtcProbeStatus = 2;
+ else
+ sRtcProbeStatus = 0;
+ rtc_get_status_and_datetime(&sRtcInfoBuffer);
+ sRtcProbeStatus = rtc_validate_datetime(&sRtcInfoBuffer);
+ }
+}
+
+u16 rtc_get_probe_status(void)
+{
+ return sRtcProbeStatus;
+}
+
+void sub_020106EC(struct SiiRtcInfo * info)
+{
+ if (sRtcProbeStatus & 0xFF0)
+ *info = sDefaultRTC;
+ else
+ rtc_get_status_and_datetime(info);
+}
+
+void rtc_get_datetime(struct SiiRtcInfo * info)
+{
+ rtc_intr_disable();
+ SiiRtcGetDateTime(info);
+ rtc_intr_enable();
+}
+
+void rtc_get_status(struct SiiRtcInfo * info)
+{
+ rtc_intr_disable();
+ SiiRtcGetStatus(info);
+ rtc_intr_enable();
+}
+
+void rtc_get_status_and_datetime(struct SiiRtcInfo * info)
+{
+ rtc_get_status(info);
+ rtc_get_datetime(info);
+}
+
+u16 rtc_validate_datetime(struct SiiRtcInfo * info)
+{
+ s32 year, month, day;
+ u16 r4 = (info->status & SIIRTCINFO_POWER) ? 0x20 : 0;
+ if (!(info->status & SIIRTCINFO_24HOUR))
+ r4 |= 0x10;
+ year = bcd_to_hex(info->year);
+ if (year == 0xFF)
+ r4 |= 0x40;
+ month = bcd_to_hex(info->month);
+ if (month == 0xFF || month == 0 || month > 12)
+ r4 |= 0x80;
+ day = bcd_to_hex(info->day);
+ if (day == 0xFF)
+ r4 |= 0x100;
+ if (month == MONTH_FEB)
+ {
+ if (day > is_leap_year(year) + sDaysPerMonth[1])
+ r4 |= 0x100;
+ }
+ else
+ {
+ if (day > sDaysPerMonth[month - 1])
+ r4 |= 0x100;
+ }
+ day = bcd_to_hex(info->hour);
+ if (day > 24)
+ r4 |= 0x200;
+ day = bcd_to_hex(info->minute);
+ if (day > 60)
+ r4 |= 0x400;
+ day = bcd_to_hex(info->second);
+ if (day > 60)
+ r4 |= 0x800;
+ return r4;
+}
+
+void rtc_reset(void)
+{
+ rtc_intr_disable();
+ SiiRtcReset();
+ rtc_intr_enable();
+}
+
+void rtc_sub_time_from_datetime(struct SiiRtcInfo * datetime, struct Time * dest, struct Time * timediff)
+{
+ u16 r4 = rtc_count_days_from_info(datetime);
+ dest->seconds = bcd_to_hex(datetime->second) - timediff->seconds;
+ dest->minutes = bcd_to_hex(datetime->minute) - timediff->minutes;
+ dest->hours = bcd_to_hex(datetime->hour) - timediff->hours;
+ dest->days = r4 - timediff->days;
+ if (dest->seconds < 0)
+ {
+ dest->seconds += 60;
+ dest->minutes--;
+ }
+ if (dest->minutes < 0)
+ {
+ dest->minutes += 60;
+ dest->hours--;
+ }
+ if (dest->hours < 0)
+ {
+ dest->hours += 24;
+ dest->days--;
+ }
+}
+
+void rtc_sub_time_from_time(struct Time * dest, struct Time * diff, struct Time * src)
+{
+ dest->seconds = src->seconds - diff->seconds;
+ dest->minutes = src->minutes - diff->minutes;
+ dest->hours = src->hours - diff->hours;
+ dest->days = src->days - diff->days;
+ if (dest->seconds < 0)
+ {
+ dest->seconds += 60;
+ dest->minutes--;
+ }
+ if (dest->minutes < 0)
+ {
+ dest->minutes += 60;
+ dest->hours--;
+ }
+ if (dest->hours < 0)
+ {
+ dest->hours += 24;
+ dest->days--;
+ }
+}
+
+bool32 rtc_maincb_is_rtc_working(void)
+{
+ rtc_probe_status();
+ if (rtc_get_probe_status() & 0xFF0)
+ return FALSE;
+ return TRUE;
+}
+
+void rtc_set_datetime(struct SiiRtcInfo * info)
+{
+ vu16 imeBak = REG_IME;
+ REG_IME = 0;
+ SiiRtcSetDateTime(info);
+ REG_IME = imeBak;
+}
+
+bool32 rtc_maincb_is_time_since_last_berry_update_positive(u8 * a0)
+{
+ rtc_get_status_and_datetime(&sRtcInfoWork);
+ *a0 = bcd_to_hex(sRtcInfoWork.year);
+ rtc_sub_time_from_datetime(&sRtcInfoWork, &gRtcUTCTime, LocalTimeOffset);
+ rtc_sub_time_from_time(&gTimeSinceBerryUpdate, LastBerryTreeUpdate, &gRtcUTCTime);
+ if (gTimeSinceBerryUpdate.days * 1440 + gTimeSinceBerryUpdate.hours * 60 + gTimeSinceBerryUpdate.minutes >= 0)
+ return TRUE;
+ return FALSE;
+}
+
+u32 hex_to_bcd(u8 a0)
+{
+ u32 r4;
+ if (a0 > 99)
+ return 0xFF;
+ r4 = Div(a0, 10) << 4;
+ r4 |= Mod(a0, 10);
+ return r4;
+}
+
+void sii_rtc_inc(u8 * a0)
+{
+ *a0 = hex_to_bcd(bcd_to_hex(*a0) + 1);
+}
+
+void sii_rtc_inc_month(struct SiiRtcInfo * a0)
+{
+ sii_rtc_inc(&a0->month);
+ if (bcd_to_hex(a0->month) > 12)
+ {
+ sii_rtc_inc(&a0->year);
+ a0->month = MONTH_JAN;
+ }
+}
+
+void sii_rtc_inc_day(struct SiiRtcInfo * a0)
+{
+ sii_rtc_inc(&a0->day);
+ if (bcd_to_hex(a0->day) > sDaysPerMonth[bcd_to_hex(a0->month) - 1])
+ {
+ if (!is_leap_year(bcd_to_hex(a0->year)) || bcd_to_hex(a0->month) != MONTH_FEB || bcd_to_hex(a0->day) != 29)
+ {
+ a0->day = 1;
+ sii_rtc_inc_month(a0);
+ }
+ }
+}
+
+bool32 rtc_is_past_feb_28_2000(struct SiiRtcInfo * a0)
+{
+ if (bcd_to_hex(a0->year) == 0)
+ {
+ if (bcd_to_hex(a0->month) == MONTH_JAN)
+ return FALSE;
+ if (bcd_to_hex(a0->month) > MONTH_FEB)
+ return TRUE;
+ if (bcd_to_hex(a0->day) == 29)
+ return TRUE;
+ return FALSE;
+ }
+ if (bcd_to_hex(a0->year) == 1)
+ return TRUE;
+ return FALSE;
+}
+
+void rtc_maincb_fix_date(void)
+{
+ rtc_get_status_and_datetime(&sRtcInfoWork);
+ if (bcd_to_hex(sRtcInfoWork.year) == 0 || bcd_to_hex(sRtcInfoWork.year) == 1)
+ {
+ if (bcd_to_hex(sRtcInfoWork.year) == 1)
+ {
+ sRtcInfoWork.year = 2;
+ sRtcInfoWork.month = MONTH_JAN;
+ sRtcInfoWork.day = 2;
+ rtc_set_datetime(&sRtcInfoWork);
+ }
+ else
+ {
+ if (rtc_is_past_feb_28_2000(&sRtcInfoWork) == TRUE)
+ {
+ sii_rtc_inc_day(&sRtcInfoWork);
+ sii_rtc_inc(&sRtcInfoWork.year);
+ }
+ else
+ {
+ sii_rtc_inc(&sRtcInfoWork.year);
+ }
+ rtc_set_datetime(&sRtcInfoWork);
+ }
+ }
+}
diff --git a/berry_fix/payload/src/siirtc.c b/berry_fix/payload/src/siirtc.c
new file mode 100644
index 000000000..965a068f1
--- /dev/null
+++ b/berry_fix/payload/src/siirtc.c
@@ -0,0 +1,432 @@
+// Ruby/Sapphire/Emerald cartridges contain a Seiko Instruments Inc. (SII)
+// S-3511A real-time clock (RTC). This library ("SIIRTC_V001") is for
+// communicating with the RTC.
+
+#include "gba/gba.h"
+#include "siirtc.h"
+
+#define STATUS_INTFE 0x02 // frequency interrupt enable
+#define STATUS_INTME 0x08 // per-minute interrupt enable
+#define STATUS_INTAE 0x20 // alarm interrupt enable
+#define STATUS_24HOUR 0x40 // 0: 12-hour mode, 1: 24-hour mode
+#define STATUS_POWER 0x80 // power on or power failure occurred
+
+#define TEST_MODE 0x80 // flag in the "second" byte
+
+#define ALARM_AM 0x00
+#define ALARM_PM 0x80
+
+#define OFFSET_YEAR offsetof(struct SiiRtcInfo, year)
+#define OFFSET_MONTH offsetof(struct SiiRtcInfo, month)
+#define OFFSET_DAY offsetof(struct SiiRtcInfo, day)
+#define OFFSET_DAY_OF_WEEK offsetof(struct SiiRtcInfo, dayOfWeek)
+#define OFFSET_HOUR offsetof(struct SiiRtcInfo, hour)
+#define OFFSET_MINUTE offsetof(struct SiiRtcInfo, minute)
+#define OFFSET_SECOND offsetof(struct SiiRtcInfo, second)
+#define OFFSET_STATUS offsetof(struct SiiRtcInfo, status)
+#define OFFSET_ALARM_HOUR offsetof(struct SiiRtcInfo, alarmHour)
+#define OFFSET_ALARM_MINUTE offsetof(struct SiiRtcInfo, alarmMinute)
+
+#define INFO_BUF(info, index) (*((u8 *)(info) + (index)))
+
+#define DATETIME_BUF(info, index) INFO_BUF(info, OFFSET_YEAR + index)
+#define DATETIME_BUF_LEN (OFFSET_SECOND - OFFSET_YEAR + 1)
+
+#define TIME_BUF(info, index) INFO_BUF(info, OFFSET_HOUR + index)
+#define TIME_BUF_LEN (OFFSET_SECOND - OFFSET_HOUR + 1)
+
+#define WR 0 // command for writing data
+#define RD 1 // command for reading data
+
+#define CMD(n) (0x60 | (n << 1))
+
+#define CMD_RESET CMD(0)
+#define CMD_STATUS CMD(1)
+#define CMD_DATETIME CMD(2)
+#define CMD_TIME CMD(3)
+#define CMD_ALARM CMD(4)
+
+#define GPIO_PORT_DATA (*(vu16 *)0x80000C4)
+#define GPIO_PORT_DIRECTION (*(vu16 *)0x80000C6)
+#define GPIO_PORT_READ_ENABLE (*(vu16 *)0x80000C8)
+
+extern vu16 GPIOPortDirection;
+
+static u16 sDummy; // unused variable
+static bool8 sLocked;
+
+static int WriteCommand(u8 value);
+static int WriteData(u8 value);
+static u8 ReadData();
+static void EnableGpioPortRead();
+static void DisableGpioPortRead();
+
+static const char AgbLibRtcVersion[] = "SIIRTC_V001";
+
+void SiiRtcUnprotect()
+{
+ EnableGpioPortRead();
+ sLocked = FALSE;
+}
+
+void SiiRtcProtect()
+{
+ DisableGpioPortRead();
+ sLocked = TRUE;
+}
+
+u8 SiiRtcProbe()
+{
+ u8 errorCode;
+ struct SiiRtcInfo rtc;
+
+ if (!SiiRtcGetStatus(&rtc))
+ return 0;
+
+ errorCode = 0;
+
+ if ((rtc.status & (SIIRTCINFO_POWER | SIIRTCINFO_24HOUR)) == SIIRTCINFO_POWER
+ || (rtc.status & (SIIRTCINFO_POWER | SIIRTCINFO_24HOUR)) == 0)
+ {
+ // The RTC is in 12-hour mode. Reset it and switch to 24-hour mode.
+
+ // Note that the conditions are redundant and equivalent to simply
+ // "(rtc.status & SIIRTCINFO_24HOUR) == 0". It's possible that this
+ // was also intended to handle resetting the clock after power failure
+ // but a mistake was made.
+
+ if (!SiiRtcReset())
+ return 0;
+
+ errorCode++;
+ }
+
+ SiiRtcGetTime(&rtc);
+
+ if (rtc.second & TEST_MODE)
+ {
+ // The RTC is in test mode. Reset it to leave test mode.
+
+ if (!SiiRtcReset())
+ return (errorCode << 4) & 0xF0;
+
+ errorCode++;
+ }
+
+ return (errorCode << 4) | 1;
+}
+
+bool8 SiiRtcReset()
+{
+ u8 result;
+ struct SiiRtcInfo rtc;
+
+ if (sLocked == TRUE)
+ return FALSE;
+
+ sLocked = TRUE;
+
+ GPIO_PORT_DATA = 1;
+ GPIO_PORT_DATA = 5;
+
+ GPIO_PORT_DIRECTION = 7;
+
+ WriteCommand(CMD_RESET | WR);
+
+ GPIO_PORT_DATA = 1;
+ GPIO_PORT_DATA = 1;
+
+ sLocked = FALSE;
+
+ rtc.status = SIIRTCINFO_24HOUR;
+
+ result = SiiRtcSetStatus(&rtc);
+
+ return result;
+}
+
+bool8 SiiRtcGetStatus(struct SiiRtcInfo *rtc)
+{
+ u8 statusData;
+
+ if (sLocked == TRUE)
+ return FALSE;
+
+ sLocked = TRUE;
+
+ GPIO_PORT_DATA = 1;
+ GPIO_PORT_DATA = 5;
+
+ GPIO_PORT_DIRECTION = 7;
+
+ WriteCommand(CMD_STATUS | RD);
+
+ GPIO_PORT_DIRECTION = 5;
+
+ statusData = ReadData();
+
+ rtc->status = (statusData & (STATUS_POWER | STATUS_24HOUR))
+ | ((statusData & STATUS_INTAE) >> 3)
+ | ((statusData & STATUS_INTME) >> 2)
+ | ((statusData & STATUS_INTFE) >> 1);
+
+ GPIO_PORT_DATA = 1;
+ GPIO_PORT_DATA = 1;
+
+ sLocked = FALSE;
+
+ return TRUE;
+}
+
+bool8 SiiRtcSetStatus(struct SiiRtcInfo *rtc)
+{
+ u8 statusData;
+
+ if (sLocked == TRUE)
+ return FALSE;
+
+ sLocked = TRUE;
+
+ GPIO_PORT_DATA = 1;
+ GPIO_PORT_DATA = 5;
+
+ statusData = STATUS_24HOUR
+ | ((rtc->status & SIIRTCINFO_INTAE) << 3)
+ | ((rtc->status & SIIRTCINFO_INTME) << 2)
+ | ((rtc->status & SIIRTCINFO_INTFE) << 1);
+
+ GPIO_PORT_DIRECTION = 7;
+
+ WriteCommand(CMD_STATUS | WR);
+
+ WriteData(statusData);
+
+ GPIO_PORT_DATA = 1;
+ GPIO_PORT_DATA = 1;
+
+ sLocked = FALSE;
+
+ return TRUE;
+}
+
+bool8 SiiRtcGetDateTime(struct SiiRtcInfo *rtc)
+{
+ u8 i;
+
+ if (sLocked == TRUE)
+ return FALSE;
+
+ sLocked = TRUE;
+
+ GPIO_PORT_DATA = 1;
+ GPIO_PORT_DATA = 5;
+
+ GPIO_PORT_DIRECTION = 7;
+
+ WriteCommand(CMD_DATETIME | RD);
+
+ GPIO_PORT_DIRECTION = 5;
+
+ for (i = 0; i < DATETIME_BUF_LEN; i++)
+ DATETIME_BUF(rtc, i) = ReadData();
+
+ INFO_BUF(rtc, OFFSET_HOUR) &= 0x7F;
+
+ GPIO_PORT_DATA = 1;
+ GPIO_PORT_DATA = 1;
+
+ sLocked = FALSE;
+
+ return TRUE;
+}
+
+bool8 SiiRtcSetDateTime(struct SiiRtcInfo *rtc)
+{
+ u8 i;
+
+ if (sLocked == TRUE)
+ return FALSE;
+
+ sLocked = TRUE;
+
+ GPIO_PORT_DATA = 1;
+ GPIO_PORT_DATA = 5;
+
+ GPIO_PORT_DIRECTION = 7;
+
+ WriteCommand(CMD_DATETIME | WR);
+
+ for (i = 0; i < DATETIME_BUF_LEN; i++)
+ WriteData(DATETIME_BUF(rtc, i));
+
+ GPIO_PORT_DATA = 1;
+ GPIO_PORT_DATA = 1;
+
+ sLocked = FALSE;
+
+ return TRUE;
+}
+
+bool8 SiiRtcGetTime(struct SiiRtcInfo *rtc)
+{
+ u8 i;
+
+ if (sLocked == TRUE)
+ return FALSE;
+
+ sLocked = TRUE;
+
+ GPIO_PORT_DATA = 1;
+ GPIO_PORT_DATA = 5;
+
+ GPIO_PORT_DIRECTION = 7;
+
+ WriteCommand(CMD_TIME | RD);
+
+ GPIO_PORT_DIRECTION = 5;
+
+ for (i = 0; i < TIME_BUF_LEN; i++)
+ TIME_BUF(rtc, i) = ReadData();
+
+ INFO_BUF(rtc, OFFSET_HOUR) &= 0x7F;
+
+ GPIO_PORT_DATA = 1;
+ GPIO_PORT_DATA = 1;
+
+ sLocked = FALSE;
+
+ return TRUE;
+}
+
+bool8 SiiRtcSetTime(struct SiiRtcInfo *rtc)
+{
+ u8 i;
+
+ if (sLocked == TRUE)
+ return FALSE;
+
+ sLocked = TRUE;
+
+ GPIO_PORT_DATA = 1;
+ GPIO_PORT_DATA = 5;
+
+ GPIO_PORT_DIRECTION = 7;
+
+ WriteCommand(CMD_TIME | WR);
+
+ for (i = 0; i < TIME_BUF_LEN; i++)
+ WriteData(TIME_BUF(rtc, i));
+
+ GPIO_PORT_DATA = 1;
+ GPIO_PORT_DATA = 1;
+
+ sLocked = FALSE;
+
+ return TRUE;
+}
+
+bool8 SiiRtcSetAlarm(struct SiiRtcInfo *rtc)
+{
+ u8 i;
+ u8 alarmData[2];
+
+ if (sLocked == TRUE)
+ return FALSE;
+
+ sLocked = TRUE;
+
+ // Decode BCD.
+ alarmData[0] = (rtc->alarmHour & 0xF) + 10 * ((rtc->alarmHour >> 4) & 0xF);
+
+ // The AM/PM flag must be set correctly even in 24-hour mode.
+
+ if (alarmData[0] < 12)
+ alarmData[0] = rtc->alarmHour | ALARM_AM;
+ else
+ alarmData[0] = rtc->alarmHour | ALARM_PM;
+
+ alarmData[1] = rtc->alarmMinute;
+
+ GPIO_PORT_DATA = 1;
+ GPIO_PORT_DATA = 5;
+
+ GPIOPortDirection = 7; // Why is this the only instance that uses a symbol?
+
+ WriteCommand(CMD_ALARM | WR);
+
+ for (i = 0; i < 2; i++)
+ WriteData(alarmData[i]);
+
+ GPIO_PORT_DATA = 1;
+ GPIO_PORT_DATA = 1;
+
+ sLocked = FALSE;
+
+ return TRUE;
+}
+
+static int WriteCommand(u8 value)
+{
+ u8 i;
+ u8 temp;
+
+ for (i = 0; i < 8; i++)
+ {
+ temp = ((value >> (7 - i)) & 1);
+ GPIO_PORT_DATA = (temp << 1) | 4;
+ GPIO_PORT_DATA = (temp << 1) | 4;
+ GPIO_PORT_DATA = (temp << 1) | 4;
+ GPIO_PORT_DATA = (temp << 1) | 5;
+ }
+
+ // control reaches end of non-void function
+}
+
+static int WriteData(u8 value)
+{
+ u8 i;
+ u8 temp;
+
+ for (i = 0; i < 8; i++)
+ {
+ temp = ((value >> i) & 1);
+ GPIO_PORT_DATA = (temp << 1) | 4;
+ GPIO_PORT_DATA = (temp << 1) | 4;
+ GPIO_PORT_DATA = (temp << 1) | 4;
+ GPIO_PORT_DATA = (temp << 1) | 5;
+ }
+
+ // control reaches end of non-void function
+}
+
+static u8 ReadData()
+{
+ u8 i;
+ u8 temp;
+ u8 value;
+
+ for (i = 0; i < 8; i++)
+ {
+ GPIO_PORT_DATA = 4;
+ GPIO_PORT_DATA = 4;
+ GPIO_PORT_DATA = 4;
+ GPIO_PORT_DATA = 4;
+ GPIO_PORT_DATA = 4;
+ GPIO_PORT_DATA = 5;
+
+ temp = ((GPIO_PORT_DATA & 2) >> 1);
+ value = (value >> 1) | (temp << 7); // UB: accessing uninitialized var
+ }
+
+ return value;
+}
+
+static void EnableGpioPortRead()
+{
+ GPIO_PORT_READ_ENABLE = 1;
+}
+
+static void DisableGpioPortRead()
+{
+ GPIO_PORT_READ_ENABLE = 0;
+}
diff --git a/berry_fix/payload/sym_bss.txt b/berry_fix/payload/sym_bss.txt
new file mode 100644
index 000000000..3b1c62ae9
--- /dev/null
+++ b/berry_fix/payload/sym_bss.txt
@@ -0,0 +1,5 @@
+ .include "src/main.o"
+ .include "src/rtc.o"
+ .include "src/flash.o"
+ .include "src/agb_flash.o"
+ .include "src/siirtc.o"
diff --git a/berry_fix/payload/sym_common.txt b/berry_fix/payload/sym_common.txt
new file mode 100644
index 000000000..28b47f52e
--- /dev/null
+++ b/berry_fix/payload/sym_common.txt
@@ -0,0 +1,29 @@
+ .include "main.o"
+ .include "rtc.o"
+
+ .align 4
+gFirstSaveSector: @ 0x03001220
+ .space 0x4
+
+gPrevSaveCounter: @ 0x03001224
+ .space 0x4
+
+gLastKnownGoodSector: @ 0x03001228
+ .space 0x4
+
+gDamagedSaveSectors: @ 0x0300122C
+ .space 0x4
+
+gSaveCounter: @ 0x03001230
+ .space 0x4
+
+gFastSaveSection: @ 0x03001234
+ .space 0x4
+
+gCurSaveChunk:
+ .space 0x4
+
+gFlashIdentIsValid: @ 0x0300123C
+ .space 0x4
+
+ .include "agb_flash.o"
diff --git a/berry_fix/payload/sym_ewram.txt b/berry_fix/payload/sym_ewram.txt
new file mode 100644
index 000000000..2c61f5e7e
--- /dev/null
+++ b/berry_fix/payload/sym_ewram.txt
@@ -0,0 +1,3 @@
+ .include "src/main.o"
+ .include "src/rtc.o"
+ .include "src/flash.o"
diff --git a/berry_fix/rom.sha1 b/berry_fix/rom.sha1
new file mode 100644
index 000000000..145b083b2
--- /dev/null
+++ b/berry_fix/rom.sha1
@@ -0,0 +1 @@
+2eb0a94a913bebfb4cb59ceb57f3f965da55ef6d berry_fix.gba
diff --git a/build_tools.sh b/build_tools.sh
index b11a9a1b2..93f6065be 100755
--- a/build_tools.sh
+++ b/build_tools.sh
@@ -1,12 +1,8 @@
#!/bin/sh
-make -C tools/gbagfx CXX=${1:-g++}
-make -C tools/scaninc CXX=${1:-g++}
-make -C tools/preproc CXX=${1:-g++}
-make -C tools/bin2c CXX=${1:-g++}
-make -C tools/rsfont CXX=${1:-g++}
-make -C tools/aif2pcm CXX=${1:-g++}
-make -C tools/ramscrgen CXX=${1:-g++}
-make -C tools/gbafix CXX=${1:-g++}
-make -C tools/mid2agb CXX=${1:-g++}
-make -C tools/mapjson CXX=${1:-g++}
-make -C tools/jsonproc CXX=${1:-g++}
+
+echo "This script is deprecated. Next time, run \"make tools\" instead."
+for dname in tools/*; do
+ if [ -f ${dname}/Makefile ]; then
+ make -C ${dname} CXX=${1:-g++} --no-print-directory
+ fi
+done
diff --git a/charmap.txt b/charmap.txt
index 43ff737a0..c449d12b0 100644
--- a/charmap.txt
+++ b/charmap.txt
@@ -990,7 +990,16 @@ PH_NURSE_SOLO = 61 02
A_BUTTON = F8 00
B_BUTTON = F8 01
+L_BUTTON = F8 02
+R_BUTTON = F8 03
+START_BUTTON = F8 04
+SELECT_BUTTON = F8 05
+DPAD_UP = F8 06
+DPAD_DOWN = F8 07
+DPAD_LEFT = F8 08
+DPAD_RIGHT = F8 09
DPAD_UPDOWN = F8 0A
+DPAD_LEFTRIGHT = F8 0B
DPAD_NONE = F8 0C
UP_ARROW_2 = F9 00
diff --git a/common_syms/field_specials.txt b/common_syms/field_specials.txt
index 25d874a65..7adb3f669 100644
--- a/common_syms/field_specials.txt
+++ b/common_syms/field_specials.txt
@@ -1 +1 @@
-gUnknown_030061D0
+gScrollableMultichoice_ListMenuTemplate
diff --git a/constants/berry_constants.inc b/constants/berry_constants.inc
deleted file mode 100644
index 2ecd7ac36..000000000
--- a/constants/berry_constants.inc
+++ /dev/null
@@ -1,6 +0,0 @@
- .set BERRY_FIRMNESS_UNKNOWN, 0
- .set BERRY_FIRMNESS_VERY_SOFT, 1
- .set BERRY_FIRMNESS_SOFT, 2
- .set BERRY_FIRMNESS_HARD, 3
- .set BERRY_FIRMNESS_VERY_HARD, 4
- .set BERRY_FIRMNESS_SUPER_HARD, 5
diff --git a/constants/constants.inc b/constants/constants.inc
index 7c74c8e87..a58bf92a2 100644
--- a/constants/constants.inc
+++ b/constants/constants.inc
@@ -1,6 +1,4 @@
.include "constants/gba_constants.inc"
.include "constants/global.inc"
.include "constants/contest_constants.inc"
- .include "constants/pokemon_data_constants.inc"
- .include "constants/berry_constants.inc"
.include "constants/contest_move_effects.inc"
diff --git a/constants/pokemon_data_constants.inc b/constants/pokemon_data_constants.inc
deleted file mode 100644
index 646bd6d4c..000000000
--- a/constants/pokemon_data_constants.inc
+++ /dev/null
@@ -1,35 +0,0 @@
- .set GROWTH_MEDIUM_FAST, 0x00
- .set GROWTH_ERRATIC, 0x01
- .set GROWTH_FLUCTUATING, 0x02
- .set GROWTH_MEDIUM_SLOW, 0x03
- .set GROWTH_FAST, 0x04
- .set GROWTH_SLOW, 0x05
-
- .set BODY_COLOR_RED, 0x00
- .set BODY_COLOR_BLUE, 0x01
- .set BODY_COLOR_YELLOW, 0x02
- .set BODY_COLOR_GREEN, 0x03
- .set BODY_COLOR_BLACK, 0x04
- .set BODY_COLOR_BROWN, 0x05
- .set BODY_COLOR_PURPLE, 0x06
- .set BODY_COLOR_GRAY, 0x07
- .set BODY_COLOR_WHITE, 0x08
- .set BODY_COLOR_PINK, 0x09
-
- .set F_SUMMARY_SCREEN_FLIP_SPRITE, 0x80
-
- .set EVO_FRIENDSHIP, 0x0001 @ Pokémon levels up with friendship ≥ 220
- .set EVO_FRIENDSHIP_DAY, 0x0002 @ Pokémon levels up during the day with friendship ≥ 220
- .set EVO_FRIENDSHIP_NIGHT, 0x0003 @ Pokémon levels up at night with friendship ≥ 220
- .set EVO_LEVEL, 0x0004 @ Pokémon reaches the specified level
- .set EVO_TRADE, 0x0005 @ Pokémon is traded
- .set EVO_TRADE_ITEM, 0x0006 @ Pokémon is traded while it's holding the specified item
- .set EVO_ITEM, 0x0007 @ specified item is used on Pokémon
- .set EVO_LEVEL_ATK_GT_DEF, 0x0008 @ Pokémon reaches the specified level with attack > defense
- .set EVO_LEVEL_ATK_EQ_DEF, 0x0009 @ Pokémon reaches the specified level with attack = defense
- .set EVO_LEVEL_ATK_LT_DEF, 0x000a @ Pokémon reaches the specified level with attack < defense
- .set EVO_LEVEL_SILCOON, 0x000b @ Pokémon reaches the specified level with a Silcoon personality value
- .set EVO_LEVEL_CASCOON, 0x000c @ Pokémon reaches the specified level with a Cascoon personality value
- .set EVO_LEVEL_NINJASK, 0x000d @ Pokémon reaches the specified level (special value for Ninjask)
- .set EVO_LEVEL_SHEDINJA, 0x000e @ Pokémon reaches the specified level (special value for Shedinja)
- .set EVO_BEAUTY, 0x000f @ Pokémon levels up with beauty ≥ specified value
diff --git a/data/berry_fix.mb b/data/berry_fix.mb
deleted file mode 100644
index 0afff07f5..000000000
--- a/data/berry_fix.mb
+++ /dev/null
Binary files differ
diff --git a/data/ereader_helpers.s b/data/ereader_helpers.s
deleted file mode 100644
index 246fe749b..000000000
--- a/data/ereader_helpers.s
+++ /dev/null
@@ -1,53 +0,0 @@
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .section .rodata
-
-gUnknown_08625B6C:: @ 8625B6C
-@ apparently e-reader trainer data? idk
- .byte 0x6f, 0x57, 0x54, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x0c, 0x01, 0x00, 0x00, 0x00, 0x2e, 0x14, 0x0c, 0x0e, 0x23, 0x10, 0x47, 0x0a, 0x1f, 0x06, 0x24, 0x0e, 0x48, 0x0a, 0x0f, 0x06
- .byte 0x22, 0x27, 0x2c, 0x16, 0x07, 0x06, 0x01, 0x0c, 0x47, 0x0a, 0x06, 0x06, 0x24, 0x0e, 0x00, 0x1e, 0x19, 0x12, 0x05, 0x0c, 0x25, 0x16, 0x25, 0x10, 0x0d, 0x1c, 0x2a, 0x1c, 0x06, 0x0a, 0x06, 0x0c
- .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
- .byte 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
- .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
- .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff
- .byte 0xff, 0xff, 0xff, 0x00, 0x70, 0x01, 0xdb, 0x00, 0xbc, 0x00, 0xf7, 0x00, 0xdc, 0x00, 0x19, 0x01, 0x00, 0x00, 0x37, 0xff, 0x64, 0x00, 0x00, 0x64, 0x00, 0x00, 0x00, 0x10, 0xa5, 0x94, 0x52, 0x8a
- .byte 0x80, 0x00, 0x00, 0x00, 0x6f, 0x79, 0x69, 0xae, 0x71, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x26, 0x01, 0xb3, 0x00, 0x3e, 0x01, 0xbc, 0x00, 0xf7, 0x00, 0xca, 0x00, 0x00, 0x00, 0x00, 0xff
- .byte 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x10, 0xa5, 0x94, 0x52, 0x0a, 0x06, 0x00, 0x00, 0x00, 0x95, 0x58, 0x59, 0x52, 0x79, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7d, 0x01, 0xb7, 0x00
- .byte 0xf6, 0x00, 0x39, 0x00, 0x59, 0x00, 0x85, 0x00, 0x00, 0x00, 0x64, 0x00, 0x00, 0x00, 0x9b, 0xff, 0x00, 0x00, 0x00, 0x10, 0xa5, 0x94, 0x52, 0x0a, 0x2f, 0x00, 0x00, 0x00, 0x8d, 0xae, 0x77, 0x7e
- .byte 0x5d, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff
-
-
- .byte 0x6a, 0x79, 0x6b, 0x64, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x1b, 0x01, 0x00, 0x00, 0x00, 0x54, 0x27, 0x2b, 0x0e, 0xff, 0xff, 0x3b, 0x0a, 0x20, 0x06, 0x00, 0x0c, 0x13, 0x24, 0x2b, 0x0e
- .byte 0xff, 0xff, 0x3b, 0x0a, 0x05, 0x12, 0x00, 0x0c, 0x6b, 0x26, 0x2b, 0x0e, 0xff, 0xff, 0x3b, 0x0a, 0x0e, 0x12, 0x00, 0x0c, 0x2c, 0x24, 0x2b, 0x0e, 0xff, 0xff, 0x3b, 0x0a, 0x17, 0x12, 0x00, 0x0c
- .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
- .byte 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
- .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
- .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff
- .byte 0xff, 0xff, 0xff, 0x00, 0x59, 0x01, 0xb7, 0x00, 0xca, 0x00, 0xb9, 0x00, 0x09, 0x00, 0x4a, 0x00, 0x00, 0x00, 0x37, 0x00, 0x64, 0x00, 0xff, 0x64, 0x00, 0x00, 0x00, 0x10, 0xa5, 0x94, 0x52, 0x0a
- .byte 0x8c, 0x00, 0x00, 0x00, 0x69, 0x58, 0x60, 0x5d, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x31, 0x01, 0xb3, 0x00, 0x07, 0x01, 0x4c, 0x01, 0x62, 0x00, 0x68, 0x00, 0x00, 0x00, 0xff, 0xff
- .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0xa5, 0x94, 0x52, 0x0a, 0x80, 0x00, 0x00, 0x00, 0x55, 0x55, 0x5d, 0x96, 0x72, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x44, 0x01, 0x86, 0x00
- .byte 0x39, 0x00, 0x59, 0x00, 0x85, 0x00, 0x9c, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x10, 0xa5, 0x94, 0x52, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x65, 0x6f, 0x8e, 0x7e
- .byte 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff
- .byte 0x72, 0x52, 0x5a, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x27, 0x01, 0x00, 0x00, 0x00, 0x4a, 0x04, 0x0e, 0x02, 0x35, 0x16, 0x10, 0x10, 0xda, 0x26, 0x3e, 0x10, 0x4a, 0x04, 0x0e, 0x02
- .byte 0x47, 0x0a, 0xd9, 0x26, 0x21, 0x16, 0x3e, 0x10, 0x14, 0x1e, 0x07, 0x1e, 0x30, 0x06, 0x23, 0x16, 0x24, 0x0e, 0x06, 0x0c, 0x18, 0x14, 0x2f, 0x14, 0x1a, 0x08, 0x27, 0x1c, 0x00, 0x0c, 0xff, 0xff
- .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
- .byte 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
- .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
- .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff
- .byte 0xff, 0xff, 0xff, 0x00, 0x3c, 0x01, 0x8d, 0x00, 0x2f, 0x00, 0x22, 0x00, 0xf7, 0x00, 0xe7, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0xa5, 0x94, 0x52, 0x0a
- .byte 0x03, 0x00, 0x00, 0x00, 0x54, 0x68, 0x5a, 0x7b, 0x7b, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x6b, 0x01, 0xc8, 0x00, 0xca, 0x00, 0x40, 0x01, 0x5c, 0x00, 0x49, 0x00, 0x00, 0x00, 0xff, 0x00
- .byte 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x10, 0xa5, 0x94, 0x52, 0x8a, 0x06, 0x00, 0x00, 0x00, 0x7b, 0x8f, 0x78, 0x51, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x24, 0x01, 0xb3, 0x00
- .byte 0x3e, 0x01, 0x4c, 0x01, 0xd5, 0x00, 0x5e, 0x00, 0x00, 0x00, 0x64, 0xc8, 0x00, 0x00, 0xc8, 0x00, 0x00, 0x00, 0x00, 0x10, 0xa5, 0x94, 0x52, 0x0a, 0x06, 0x00, 0x00, 0x00, 0x51, 0x8a, 0x6a, 0x7e
- .byte 0x64, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff
- .byte 0x9c, 0x54, 0xae, 0x79, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x20, 0x01, 0x00, 0x00, 0x00, 0x46, 0x0a, 0x02, 0x06, 0x20, 0x06, 0x0a, 0x0a, 0x23, 0x10, 0x00, 0x0c, 0x28, 0x0c, 0x14, 0x18
- .byte 0x32, 0x14, 0x02, 0x16, 0x05, 0x10, 0xff, 0xff, 0x0c, 0x1e, 0x0a, 0x0a, 0x34, 0x12, 0x11, 0x1e, 0x1a, 0x08, 0x05, 0x0c, 0x1e, 0x0a, 0x02, 0x06, 0x20, 0x06, 0x22, 0x0a, 0x15, 0x10, 0x01, 0x0c
- .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
- .byte 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
- .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
- .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff
- .byte 0xff, 0xff, 0xff, 0x00, 0x63, 0x01, 0xb3, 0x00, 0xf2, 0x00, 0x35, 0x00, 0x09, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x64, 0x00, 0xff, 0x9b, 0x00, 0x00, 0x00, 0x10, 0xa5, 0x94, 0x52, 0x8a
- .byte 0x00, 0x00, 0x00, 0x00, 0x58, 0x61, 0xae, 0x64, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x4b, 0x01, 0xc6, 0x00, 0x39, 0x00, 0xf2, 0x00, 0x26, 0x00, 0x59, 0x00, 0x00, 0x00, 0xff, 0x00
- .byte 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x10, 0xa5, 0x94, 0x52, 0x0a, 0x96, 0x00, 0x00, 0x00, 0x5b, 0x72, 0x6a, 0x91, 0xae, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7a, 0x01, 0x8d, 0x00
- .byte 0x5e, 0x00, 0xf7, 0x00, 0x55, 0x00, 0x05, 0x01, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x10, 0xa5, 0x94, 0x52, 0x0a, 0x96, 0x00, 0x00, 0x00, 0x8d, 0x85, 0x9e, 0xa0
- .byte 0x60, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff
diff --git a/data/ereader_screen.s b/data/ereader_screen.s
deleted file mode 100755
index 3d6572a49..000000000
--- a/data/ereader_screen.s
+++ /dev/null
@@ -1,7 +0,0 @@
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .section .rodata
-
-gUnknown_0862609C:: @ 862609C
- .incbin "data/unknown_jp_62609C.bin"
diff --git a/data/event_scripts.s b/data/event_scripts.s
index 191fe5d60..1ed8581f9 100644
--- a/data/event_scripts.s
+++ b/data/event_scripts.s
@@ -1,26 +1,35 @@
#include "constants/global.h"
+#include "constants/battle.h"
#include "constants/battle_frontier.h"
#include "constants/battle_setup.h"
+#include "constants/berry.h"
+#include "constants/contest.h"
+#include "constants/daycare.h"
+#include "constants/decorations.h"
#include "constants/easy_chat.h"
#include "constants/event_objects.h"
#include "constants/event_object_movement_constants.h"
#include "constants/field_effects.h"
+#include "constants/field_specials.h"
#include "constants/flags.h"
-#include "constants/decorations.h"
+#include "constants/game_stat.h"
+#include "constants/item.h"
#include "constants/items.h"
#include "constants/heal_locations.h"
#include "constants/layouts.h"
+#include "constants/lilycove_lady.h"
#include "constants/map_scripts.h"
#include "constants/maps.h"
+#include "constants/metatile_labels.h"
#include "constants/moves.h"
+#include "constants/pokemon.h"
+#include "constants/script_menu.h"
#include "constants/songs.h"
#include "constants/species.h"
+#include "constants/trainer_hill.h"
#include "constants/trainers.h"
#include "constants/vars.h"
#include "constants/weather.h"
-#include "constants/trainer_hill.h"
-#include "constants/battle.h"
-#include "constants/metatile_labels.h"
.include "asm/macros.inc"
.include "asm/macros/event.inc"
.include "constants/constants.inc"
@@ -466,22 +475,22 @@ gUnknown_0823B4E8:: @ 823B4E8 ;EventScript_SecretBasePCCancel?
end
EventScript_SecretBasePCMainMenuChoice:: @ 823B4EF
- multichoice 0, 0, 6, 0
+ multichoice 0, 0, MULTI_DECOR_REGISTRY, 0
switch VAR_RESULT
case 0, EventScript_23B581
case 1, EventScript_23B568
case 2, EventScript_23B585
case 3, EventScript_23B66E
- case 127, EventScript_23B66E
+ case MULTI_B_PRESSED, EventScript_23B66E
end
EventScript_23B531:: @ 823B531
- multichoice 0, 0, 5, 0
+ multichoice 0, 0, MULTI_DECOR_NOREGISTRY, 0
switch VAR_RESULT
case 0, EventScript_23B581
case 1, EventScript_23B568
case 2, EventScript_23B66E
- case 127, EventScript_23B66E
+ case MULTI_B_PRESSED, EventScript_23B66E
end
EventScript_23B568:: @ 823B568
@@ -516,13 +525,13 @@ EventScript_RecordMixingSecretBasePC:: @ 823B589
EventScript_23B5A1:: @ 823B5A1
message Text_SecretBasePCStartMenu
waitmessage
- multichoice 0, 0, 7, 0
+ multichoice 0, 0, MULTI_REGISTER_MENU, 0
switch VAR_RESULT
case 0, EventScript_23B5F0
case 1, EventScript_23B585
case 2, EventScript_23B660
case 3, EventScript_23B66E
- case 127, EventScript_23B66E
+ case MULTI_B_PRESSED, EventScript_23B66E
end
gUnknown_0823B5E9:: @ 823B5E9
@@ -849,86 +858,86 @@ Std_MsgboxAutoclose:: @ 8271494
return
EventScript_ResetAllBerries:: @ 827149D
- setberrytree 2, ITEM_TO_BERRY(ITEM_ORAN_BERRY), 5
- setberrytree 1, ITEM_TO_BERRY(ITEM_PECHA_BERRY), 5
- setberrytree 11, ITEM_TO_BERRY(ITEM_ORAN_BERRY), 5
- setberrytree 13, ITEM_TO_BERRY(ITEM_PECHA_BERRY), 5
- setberrytree 4, ITEM_TO_BERRY(ITEM_ORAN_BERRY), 5
- setberrytree 76, ITEM_TO_BERRY(ITEM_CHERI_BERRY), 5
- setberrytree 8, ITEM_TO_BERRY(ITEM_CHERI_BERRY), 5
- setberrytree 10, ITEM_TO_BERRY(ITEM_LEPPA_BERRY), 5
- setberrytree 25, ITEM_TO_BERRY(ITEM_PINAP_BERRY), 5
- setberrytree 26, ITEM_TO_BERRY(ITEM_CHESTO_BERRY), 5
- setberrytree 66, ITEM_TO_BERRY(ITEM_CHESTO_BERRY), 5
- setberrytree 67, ITEM_TO_BERRY(ITEM_PINAP_BERRY), 5
- setberrytree 69, ITEM_TO_BERRY(ITEM_KELPSY_BERRY), 5
- setberrytree 70, ITEM_TO_BERRY(ITEM_KELPSY_BERRY), 5
- setberrytree 71, ITEM_TO_BERRY(ITEM_KELPSY_BERRY), 5
- setberrytree 55, ITEM_TO_BERRY(ITEM_BLUK_BERRY), 5
- setberrytree 56, ITEM_TO_BERRY(ITEM_BLUK_BERRY), 5
- setberrytree 5, ITEM_TO_BERRY(ITEM_CHERI_BERRY), 5
- setberrytree 6, ITEM_TO_BERRY(ITEM_LEPPA_BERRY), 5
- setberrytree 7, ITEM_TO_BERRY(ITEM_CHERI_BERRY), 5
- setberrytree 16, ITEM_TO_BERRY(ITEM_NANAB_BERRY), 5
- setberrytree 17, ITEM_TO_BERRY(ITEM_NANAB_BERRY), 5
- setberrytree 18, ITEM_TO_BERRY(ITEM_NANAB_BERRY), 5
- setberrytree 29, ITEM_TO_BERRY(ITEM_WEPEAR_BERRY), 5
- setberrytree 28, ITEM_TO_BERRY(ITEM_WEPEAR_BERRY), 5
- setberrytree 27, ITEM_TO_BERRY(ITEM_WEPEAR_BERRY), 5
- setberrytree 24, ITEM_TO_BERRY(ITEM_RAWST_BERRY), 5
- setberrytree 23, ITEM_TO_BERRY(ITEM_PECHA_BERRY), 5
- setberrytree 22, ITEM_TO_BERRY(ITEM_PECHA_BERRY), 5
- setberrytree 21, ITEM_TO_BERRY(ITEM_RAWST_BERRY), 5
- setberrytree 19, ITEM_TO_BERRY(ITEM_RAZZ_BERRY), 5
- setberrytree 20, ITEM_TO_BERRY(ITEM_RAZZ_BERRY), 5
- setberrytree 80, ITEM_TO_BERRY(ITEM_ORAN_BERRY), 5
- setberrytree 81, ITEM_TO_BERRY(ITEM_ORAN_BERRY), 5
- setberrytree 77, ITEM_TO_BERRY(ITEM_PERSIM_BERRY), 5
- setberrytree 78, ITEM_TO_BERRY(ITEM_PERSIM_BERRY), 5
- setberrytree 68, ITEM_TO_BERRY(ITEM_PERSIM_BERRY), 5
- setberrytree 31, ITEM_TO_BERRY(ITEM_SITRUS_BERRY), 5
- setberrytree 33, ITEM_TO_BERRY(ITEM_SITRUS_BERRY), 5
- setberrytree 34, ITEM_TO_BERRY(ITEM_POMEG_BERRY), 5
- setberrytree 35, ITEM_TO_BERRY(ITEM_POMEG_BERRY), 5
- setberrytree 36, ITEM_TO_BERRY(ITEM_POMEG_BERRY), 5
- setberrytree 83, ITEM_TO_BERRY(ITEM_HONDEW_BERRY), 5
- setberrytree 84, ITEM_TO_BERRY(ITEM_HONDEW_BERRY), 5
- setberrytree 85, ITEM_TO_BERRY(ITEM_SITRUS_BERRY), 5
- setberrytree 86, ITEM_TO_BERRY(ITEM_LEPPA_BERRY), 5
- setberrytree 37, ITEM_TO_BERRY(ITEM_ASPEAR_BERRY), 5
- setberrytree 38, ITEM_TO_BERRY(ITEM_ASPEAR_BERRY), 5
- setberrytree 39, ITEM_TO_BERRY(ITEM_ASPEAR_BERRY), 5
- setberrytree 40, ITEM_TO_BERRY(ITEM_PECHA_BERRY), 5
- setberrytree 41, ITEM_TO_BERRY(ITEM_PECHA_BERRY), 5
- setberrytree 42, ITEM_TO_BERRY(ITEM_PECHA_BERRY), 5
- setberrytree 46, ITEM_TO_BERRY(ITEM_WEPEAR_BERRY), 5
- setberrytree 45, ITEM_TO_BERRY(ITEM_PINAP_BERRY), 5
- setberrytree 44, ITEM_TO_BERRY(ITEM_NANAB_BERRY), 5
- setberrytree 43, ITEM_TO_BERRY(ITEM_RAZZ_BERRY), 5
- setberrytree 47, ITEM_TO_BERRY(ITEM_PERSIM_BERRY), 5
- setberrytree 48, ITEM_TO_BERRY(ITEM_ASPEAR_BERRY), 5
- setberrytree 49, ITEM_TO_BERRY(ITEM_RAWST_BERRY), 5
- setberrytree 50, ITEM_TO_BERRY(ITEM_CHESTO_BERRY), 5
- setberrytree 52, ITEM_TO_BERRY(ITEM_NANAB_BERRY), 5
- setberrytree 53, ITEM_TO_BERRY(ITEM_NANAB_BERRY), 5
- setberrytree 62, ITEM_TO_BERRY(ITEM_LEPPA_BERRY), 5
- setberrytree 64, ITEM_TO_BERRY(ITEM_LEPPA_BERRY), 5
- setberrytree 58, ITEM_TO_BERRY(ITEM_POMEG_BERRY), 5
- setberrytree 59, ITEM_TO_BERRY(ITEM_POMEG_BERRY), 5
- setberrytree 60, ITEM_TO_BERRY(ITEM_GREPA_BERRY), 5
- setberrytree 61, ITEM_TO_BERRY(ITEM_GREPA_BERRY), 5
- setberrytree 79, ITEM_TO_BERRY(ITEM_QUALOT_BERRY), 5
- setberrytree 14, ITEM_TO_BERRY(ITEM_QUALOT_BERRY), 5
- setberrytree 15, ITEM_TO_BERRY(ITEM_POMEG_BERRY), 5
- setberrytree 30, ITEM_TO_BERRY(ITEM_POMEG_BERRY), 5
- setberrytree 65, ITEM_TO_BERRY(ITEM_GREPA_BERRY), 5
- setberrytree 72, ITEM_TO_BERRY(ITEM_GREPA_BERRY), 5
- setberrytree 73, ITEM_TO_BERRY(ITEM_QUALOT_BERRY), 5
- setberrytree 74, ITEM_TO_BERRY(ITEM_QUALOT_BERRY), 5
- setberrytree 87, ITEM_TO_BERRY(ITEM_PECHA_BERRY), 5
- setberrytree 88, ITEM_TO_BERRY(ITEM_SITRUS_BERRY), 5
- setberrytree 89, ITEM_TO_BERRY(ITEM_RAWST_BERRY), 5
- setberrytree 82, ITEM_TO_BERRY(ITEM_LIECHI_BERRY), 5
+ setberrytree 2, ITEM_TO_BERRY(ITEM_ORAN_BERRY), BERRY_STAGE_BERRIES
+ setberrytree 1, ITEM_TO_BERRY(ITEM_PECHA_BERRY), BERRY_STAGE_BERRIES
+ setberrytree 11, ITEM_TO_BERRY(ITEM_ORAN_BERRY), BERRY_STAGE_BERRIES
+ setberrytree 13, ITEM_TO_BERRY(ITEM_PECHA_BERRY), BERRY_STAGE_BERRIES
+ setberrytree 4, ITEM_TO_BERRY(ITEM_ORAN_BERRY), BERRY_STAGE_BERRIES
+ setberrytree 76, ITEM_TO_BERRY(ITEM_CHERI_BERRY), BERRY_STAGE_BERRIES
+ setberrytree 8, ITEM_TO_BERRY(ITEM_CHERI_BERRY), BERRY_STAGE_BERRIES
+ setberrytree 10, ITEM_TO_BERRY(ITEM_LEPPA_BERRY), BERRY_STAGE_BERRIES
+ setberrytree 25, ITEM_TO_BERRY(ITEM_PINAP_BERRY), BERRY_STAGE_BERRIES
+ setberrytree 26, ITEM_TO_BERRY(ITEM_CHESTO_BERRY), BERRY_STAGE_BERRIES
+ setberrytree 66, ITEM_TO_BERRY(ITEM_CHESTO_BERRY), BERRY_STAGE_BERRIES
+ setberrytree 67, ITEM_TO_BERRY(ITEM_PINAP_BERRY), BERRY_STAGE_BERRIES
+ setberrytree 69, ITEM_TO_BERRY(ITEM_KELPSY_BERRY), BERRY_STAGE_BERRIES
+ setberrytree 70, ITEM_TO_BERRY(ITEM_KELPSY_BERRY), BERRY_STAGE_BERRIES
+ setberrytree 71, ITEM_TO_BERRY(ITEM_KELPSY_BERRY), BERRY_STAGE_BERRIES
+ setberrytree 55, ITEM_TO_BERRY(ITEM_BLUK_BERRY), BERRY_STAGE_BERRIES
+ setberrytree 56, ITEM_TO_BERRY(ITEM_BLUK_BERRY), BERRY_STAGE_BERRIES
+ setberrytree 5, ITEM_TO_BERRY(ITEM_CHERI_BERRY), BERRY_STAGE_BERRIES
+ setberrytree 6, ITEM_TO_BERRY(ITEM_LEPPA_BERRY), BERRY_STAGE_BERRIES
+ setberrytree 7, ITEM_TO_BERRY(ITEM_CHERI_BERRY), BERRY_STAGE_BERRIES
+ setberrytree 16, ITEM_TO_BERRY(ITEM_NANAB_BERRY), BERRY_STAGE_BERRIES
+ setberrytree 17, ITEM_TO_BERRY(ITEM_NANAB_BERRY), BERRY_STAGE_BERRIES
+ setberrytree 18, ITEM_TO_BERRY(ITEM_NANAB_BERRY), BERRY_STAGE_BERRIES
+ setberrytree 29, ITEM_TO_BERRY(ITEM_WEPEAR_BERRY), BERRY_STAGE_BERRIES
+ setberrytree 28, ITEM_TO_BERRY(ITEM_WEPEAR_BERRY), BERRY_STAGE_BERRIES
+ setberrytree 27, ITEM_TO_BERRY(ITEM_WEPEAR_BERRY), BERRY_STAGE_BERRIES
+ setberrytree 24, ITEM_TO_BERRY(ITEM_RAWST_BERRY), BERRY_STAGE_BERRIES
+ setberrytree 23, ITEM_TO_BERRY(ITEM_PECHA_BERRY), BERRY_STAGE_BERRIES
+ setberrytree 22, ITEM_TO_BERRY(ITEM_PECHA_BERRY), BERRY_STAGE_BERRIES
+ setberrytree 21, ITEM_TO_BERRY(ITEM_RAWST_BERRY), BERRY_STAGE_BERRIES
+ setberrytree 19, ITEM_TO_BERRY(ITEM_RAZZ_BERRY), BERRY_STAGE_BERRIES
+ setberrytree 20, ITEM_TO_BERRY(ITEM_RAZZ_BERRY), BERRY_STAGE_BERRIES
+ setberrytree 80, ITEM_TO_BERRY(ITEM_ORAN_BERRY), BERRY_STAGE_BERRIES
+ setberrytree 81, ITEM_TO_BERRY(ITEM_ORAN_BERRY), BERRY_STAGE_BERRIES
+ setberrytree 77, ITEM_TO_BERRY(ITEM_PERSIM_BERRY), BERRY_STAGE_BERRIES
+ setberrytree 78, ITEM_TO_BERRY(ITEM_PERSIM_BERRY), BERRY_STAGE_BERRIES
+ setberrytree 68, ITEM_TO_BERRY(ITEM_PERSIM_BERRY), BERRY_STAGE_BERRIES
+ setberrytree 31, ITEM_TO_BERRY(ITEM_SITRUS_BERRY), BERRY_STAGE_BERRIES
+ setberrytree 33, ITEM_TO_BERRY(ITEM_SITRUS_BERRY), BERRY_STAGE_BERRIES
+ setberrytree 34, ITEM_TO_BERRY(ITEM_POMEG_BERRY), BERRY_STAGE_BERRIES
+ setberrytree 35, ITEM_TO_BERRY(ITEM_POMEG_BERRY), BERRY_STAGE_BERRIES
+ setberrytree 36, ITEM_TO_BERRY(ITEM_POMEG_BERRY), BERRY_STAGE_BERRIES
+ setberrytree 83, ITEM_TO_BERRY(ITEM_HONDEW_BERRY), BERRY_STAGE_BERRIES
+ setberrytree 84, ITEM_TO_BERRY(ITEM_HONDEW_BERRY), BERRY_STAGE_BERRIES
+ setberrytree 85, ITEM_TO_BERRY(ITEM_SITRUS_BERRY), BERRY_STAGE_BERRIES
+ setberrytree 86, ITEM_TO_BERRY(ITEM_LEPPA_BERRY), BERRY_STAGE_BERRIES
+ setberrytree 37, ITEM_TO_BERRY(ITEM_ASPEAR_BERRY), BERRY_STAGE_BERRIES
+ setberrytree 38, ITEM_TO_BERRY(ITEM_ASPEAR_BERRY), BERRY_STAGE_BERRIES
+ setberrytree 39, ITEM_TO_BERRY(ITEM_ASPEAR_BERRY), BERRY_STAGE_BERRIES
+ setberrytree 40, ITEM_TO_BERRY(ITEM_PECHA_BERRY), BERRY_STAGE_BERRIES
+ setberrytree 41, ITEM_TO_BERRY(ITEM_PECHA_BERRY), BERRY_STAGE_BERRIES
+ setberrytree 42, ITEM_TO_BERRY(ITEM_PECHA_BERRY), BERRY_STAGE_BERRIES
+ setberrytree 46, ITEM_TO_BERRY(ITEM_WEPEAR_BERRY), BERRY_STAGE_BERRIES
+ setberrytree 45, ITEM_TO_BERRY(ITEM_PINAP_BERRY), BERRY_STAGE_BERRIES
+ setberrytree 44, ITEM_TO_BERRY(ITEM_NANAB_BERRY), BERRY_STAGE_BERRIES
+ setberrytree 43, ITEM_TO_BERRY(ITEM_RAZZ_BERRY), BERRY_STAGE_BERRIES
+ setberrytree 47, ITEM_TO_BERRY(ITEM_PERSIM_BERRY), BERRY_STAGE_BERRIES
+ setberrytree 48, ITEM_TO_BERRY(ITEM_ASPEAR_BERRY), BERRY_STAGE_BERRIES
+ setberrytree 49, ITEM_TO_BERRY(ITEM_RAWST_BERRY), BERRY_STAGE_BERRIES
+ setberrytree 50, ITEM_TO_BERRY(ITEM_CHESTO_BERRY), BERRY_STAGE_BERRIES
+ setberrytree 52, ITEM_TO_BERRY(ITEM_NANAB_BERRY), BERRY_STAGE_BERRIES
+ setberrytree 53, ITEM_TO_BERRY(ITEM_NANAB_BERRY), BERRY_STAGE_BERRIES
+ setberrytree 62, ITEM_TO_BERRY(ITEM_LEPPA_BERRY), BERRY_STAGE_BERRIES
+ setberrytree 64, ITEM_TO_BERRY(ITEM_LEPPA_BERRY), BERRY_STAGE_BERRIES
+ setberrytree 58, ITEM_TO_BERRY(ITEM_POMEG_BERRY), BERRY_STAGE_BERRIES
+ setberrytree 59, ITEM_TO_BERRY(ITEM_POMEG_BERRY), BERRY_STAGE_BERRIES
+ setberrytree 60, ITEM_TO_BERRY(ITEM_GREPA_BERRY), BERRY_STAGE_BERRIES
+ setberrytree 61, ITEM_TO_BERRY(ITEM_GREPA_BERRY), BERRY_STAGE_BERRIES
+ setberrytree 79, ITEM_TO_BERRY(ITEM_QUALOT_BERRY), BERRY_STAGE_BERRIES
+ setberrytree 14, ITEM_TO_BERRY(ITEM_QUALOT_BERRY), BERRY_STAGE_BERRIES
+ setberrytree 15, ITEM_TO_BERRY(ITEM_POMEG_BERRY), BERRY_STAGE_BERRIES
+ setberrytree 30, ITEM_TO_BERRY(ITEM_POMEG_BERRY), BERRY_STAGE_BERRIES
+ setberrytree 65, ITEM_TO_BERRY(ITEM_GREPA_BERRY), BERRY_STAGE_BERRIES
+ setberrytree 72, ITEM_TO_BERRY(ITEM_GREPA_BERRY), BERRY_STAGE_BERRIES
+ setberrytree 73, ITEM_TO_BERRY(ITEM_QUALOT_BERRY), BERRY_STAGE_BERRIES
+ setberrytree 74, ITEM_TO_BERRY(ITEM_QUALOT_BERRY), BERRY_STAGE_BERRIES
+ setberrytree 87, ITEM_TO_BERRY(ITEM_PECHA_BERRY), BERRY_STAGE_BERRIES
+ setberrytree 88, ITEM_TO_BERRY(ITEM_SITRUS_BERRY), BERRY_STAGE_BERRIES
+ setberrytree 89, ITEM_TO_BERRY(ITEM_RAWST_BERRY), BERRY_STAGE_BERRIES
+ setberrytree 82, ITEM_TO_BERRY(ITEM_LIECHI_BERRY), BERRY_STAGE_BERRIES
return
EventScript_ResetAllMapFlags:: @ 82715DE
@@ -1036,7 +1045,7 @@ EventScript_ResetAllMapFlags:: @ 82715DE
setflag FLAG_HIDE_ROUTE_101_BIRCH
setflag FLAG_HIDE_ROUTE_103_BIRCH
setflag FLAG_HIDE_LILYCOVE_HARBOR_FERRY_SAILOR
- setflag FLAG_HIDE_LILYCOVE_HARBOR_EON_TICKET_TAKER
+ setflag FLAG_HIDE_LILYCOVE_HARBOR_EVENT_TICKET_TAKER
setflag FLAG_HIDE_SOUTHERN_ISLAND_EON_STONE
setflag FLAG_HIDE_SOUTHERN_ISLAND_UNCHOSEN_EON_DUO_MON
setflag FLAG_UNKNOWN_0x393
@@ -1390,50 +1399,50 @@ Std_ObtainItem:: @ 8271AD3
EventScript_271AE3:: @ 8271AE3
bufferitemnameplural 1, VAR_0x8000, VAR_0x8001
checkitemtype VAR_0x8000
- call EventScript_271B08
+ call EventScript_BufferStdString
compare VAR_0x8007, 1
call_if_eq EventScript_271B95
compare VAR_0x8007, 0
call_if_eq EventScript_271BA9
return
-EventScript_271B08:: @ 8271B08
+EventScript_BufferStdString:: @ 8271B08
switch VAR_RESULT
- case 1, EventScript_271B45
- case 5, EventScript_271B55
- case 2, EventScript_271B65
- case 3, EventScript_271B75
- case 4, EventScript_271B85
+ case POCKET_ITEMS, EventScript_StdStringItem
+ case POCKET_KEY_ITEMS, EventScript_StdStringKeyItems
+ case POCKET_POKE_BALLS, EventScript_StdStringPokeballs
+ case POCKET_TM_HM, EventScript_StdStringTMHMS
+ case POCKET_BERRIES, EventScript_StdStringBerries
end
-EventScript_271B45:: @ 8271B45
- bufferstdstring 2, 14
+EventScript_StdStringItem:: @ 8271B45
+ bufferstdstring 2, STDSTRING_ITEMS
compare VAR_0x8007, 1
- call_if_eq EventScript_271BAF
+ call_if_eq EventScript_PlayFanfare4
return
-EventScript_271B55:: @ 8271B55
- bufferstdstring 2, 15
+EventScript_StdStringKeyItems:: @ 8271B55
+ bufferstdstring 2, STDSTRING_KEYITEMS
compare VAR_0x8007, 1
- call_if_eq EventScript_271BAF
+ call_if_eq EventScript_PlayFanfare4
return
-EventScript_271B65:: @ 8271B65
- bufferstdstring 2, 16
+EventScript_StdStringPokeballs:: @ 8271B65
+ bufferstdstring 2, STDSTRING_POKEBALLS
compare VAR_0x8007, 1
- call_if_eq EventScript_271BAF
+ call_if_eq EventScript_PlayFanfare4
return
-EventScript_271B75:: @ 8271B75
- bufferstdstring 2, 17
+EventScript_StdStringTMHMS:: @ 8271B75
+ bufferstdstring 2, STDSTRING_TMHMS
compare VAR_0x8007, 1
call_if_eq EventScript_271BB3
return
-EventScript_271B85:: @ 8271B85
- bufferstdstring 2, 18
+EventScript_StdStringBerries:: @ 8271B85
+ bufferstdstring 2, STDSTRING_BERRIES
compare VAR_0x8007, 1
- call_if_eq EventScript_271BAF
+ call_if_eq EventScript_PlayFanfare4
return
EventScript_271B95:: @ 8271B95
@@ -1447,7 +1456,7 @@ EventScript_271BA9:: @ 8271BA9
setvar VAR_RESULT, 0
return
-EventScript_271BAF:: @ 8271BAF
+EventScript_PlayFanfare4:: @ 8271BAF
playfanfare MUS_FANFA4
return
@@ -1491,7 +1500,7 @@ Std_FindItem:: @ 8271BFD
copyvar VAR_0x8007, VAR_RESULT
bufferitemnameplural 1, VAR_0x8000, VAR_0x8001
checkitemtype VAR_0x8000
- call EventScript_271B08
+ call EventScript_BufferStdString
compare VAR_0x8007, 1
call_if_eq EventScript_PickItemUp
compare VAR_0x8007, 0
@@ -1502,7 +1511,7 @@ Std_FindItem:: @ 8271BFD
EventScript_PickItemUp:: @ 8271C3A
removeobject VAR_LAST_TALKED
giveitem VAR_0x8004, VAR_0x8005
- specialvar VAR_RESULT, sub_81398C0
+ specialvar VAR_RESULT, BufferTMHMMoveName
copyvar VAR_0x8008, VAR_RESULT
compare VAR_0x8008, 1
call_if_eq EventScript_271C8F
@@ -1544,7 +1553,7 @@ EventScript_HiddenItemScript:: @ 8271CB7
copyvar VAR_0x8007, VAR_RESULT
bufferitemnameplural 1, VAR_0x8005, 1
checkitemtype VAR_0x8005
- call EventScript_271B08
+ call EventScript_BufferStdString
compare VAR_0x8007, 1
goto_if_eq EventScript_271CE8
compare VAR_0x8007, 0
@@ -1554,7 +1563,7 @@ EventScript_HiddenItemScript:: @ 8271CB7
EventScript_271CE8:: @ 8271CE8
copyvar VAR_0x8008, VAR_0x8004
copyvar VAR_0x8004, VAR_0x8005
- specialvar VAR_RESULT, sub_81398C0
+ specialvar VAR_RESULT, BufferTMHMMoveName
compare VAR_RESULT, 1
goto_if_eq EventScript_271D0E
compare VAR_RESULT, 0
@@ -1625,7 +1634,7 @@ EventScript_PC:: @ 8271D92
EventScript_271DAC:: @ 8271DAC
message gText_WhichPCShouldBeAccessed
waitmessage
- special ScrSpecial_CreatePCMenu
+ special ScriptMenu_CreatePCMultichoice
waitstate
goto EventScript_271DBC
end
@@ -1636,7 +1645,7 @@ EventScript_271DBC:: @ 8271DBC
case 1, EventScript_271DF9
case 2, EventScript_271E54
case 3, EventScript_271E47
- case 127, EventScript_271E47
+ case MULTI_B_PRESSED, EventScript_271E47
end
EventScript_271DF9:: @ 8271DF9
@@ -2036,15 +2045,13 @@ Route101_EventScript_272184:: @ 8272184
msgbox gUnknown_082A633D, MSGBOX_DEFAULT
return
-BattleFrontier_OutsideWest_EventScript_2721E2:: @ 82721E2
-LilycoveCity_Harbor_EventScript_2721E2:: @ 82721E2
-SlateportCity_Harbor_EventScript_2721E2:: @ 82721E2
+Common_EventScript_FerryDepart:: @ 82721E2
delay 60
- applymovement VAR_0x8004, SlateportCity_Harbor_Movement_2721F0
+ applymovement VAR_0x8004, Movement_FerryDepart
waitmovement 0
return
-SlateportCity_Harbor_Movement_2721F0: @ 82721F0
+Movement_FerryDepart: @ 82721F0
walk_slow_right
walk_slow_right
walk_slow_right
@@ -2101,7 +2108,7 @@ SouthernIsland_Exterior_EventScript_272250:: @ 8272250
call_if_eq BattleFrontier_OutsideWest_EventScript_242A2C
delay 30
hideobjectat 255, MAP_PETALBURG_CITY
- call BattleFrontier_OutsideWest_EventScript_2721E2
+ call Common_EventScript_FerryDepart
return
EventScript_272274:: @ 8272274
@@ -2556,7 +2563,7 @@ gUnknown_08272A3F:: @ 8272A3F
.string "Please come again!$"
gUnknown_08272A52:: @ 8272A52
- .string "{PLAYER}{STRING 5}, welcome!\pWhat can I do for you?$"
+ .string "{PLAYER}{KUN}, welcome!\pWhat can I do for you?$"
gUnknown_08272A78:: @ 8272A78
.string "Obtained the {STR_VAR_2}!$"
@@ -2893,34 +2900,34 @@ LittlerootTown_ProfessorBirchsLab_EventScript_2737A0:: @ 82737A0
MossdeepCity_StevensHouse_EventScript_2737A0:: @ 82737A0
Route119_WeatherInstitute_2F_EventScript_2737A0:: @ 82737A0
RustboroCity_DevonCorp_2F_EventScript_2737A0:: @ 82737A0
- bufferboxname 0, VAR_STORAGE_UNKNOWN
+ bufferboxname 0, VAR_PC_BOX_TO_SEND_MON
bufferspeciesname 1, VAR_TEMP_1
call_if_unset FLAG_SYS_PC_LANETTE, LittlerootTown_ProfessorBirchsLab_EventScript_2737BB
call_if_set FLAG_SYS_PC_LANETTE, LittlerootTown_ProfessorBirchsLab_EventScript_2737E6
return
LittlerootTown_ProfessorBirchsLab_EventScript_2737BB:: @ 82737BB
- specialvar VAR_RESULT, sub_813B21C
+ specialvar VAR_RESULT, ShouldShowBoxWasFullMessage
compare VAR_RESULT, 1
goto_if_eq LittlerootTown_ProfessorBirchsLab_EventScript_2737D4
msgbox gText_PkmnTransferredSomeonesPC, MSGBOX_DEFAULT
return
LittlerootTown_ProfessorBirchsLab_EventScript_2737D4:: @ 82737D4
- specialvar VAR_RESULT, get_unknown_box_id
+ specialvar VAR_RESULT, GetPCBoxToSendMon
bufferboxname 2, VAR_RESULT
msgbox gText_PkmnBoxSomeonesPCFull, MSGBOX_DEFAULT
return
LittlerootTown_ProfessorBirchsLab_EventScript_2737E6:: @ 82737E6
- specialvar VAR_RESULT, sub_813B21C
+ specialvar VAR_RESULT, ShouldShowBoxWasFullMessage
compare VAR_RESULT, 1
goto_if_eq LittlerootTown_ProfessorBirchsLab_EventScript_2737FF
msgbox gText_PkmnTransferredLanettesPC, MSGBOX_DEFAULT
return
LittlerootTown_ProfessorBirchsLab_EventScript_2737FF:: @ 82737FF
- specialvar VAR_RESULT, get_unknown_box_id
+ specialvar VAR_RESULT, GetPCBoxToSendMon
bufferboxname 2, VAR_RESULT
msgbox gText_PkmnBoxLanettesPCFull, MSGBOX_DEFAULT
return
@@ -2942,7 +2949,7 @@ EventScript_Questionnaire:: @ 827381B
call Common_ShowEasyChatScreen
lock
faceplayer
- specialvar VAR_0x8008, sub_813B490
+ specialvar VAR_0x8008, GetMartEmployeeObjectEventId
compare VAR_0x8004, 1
goto_if_eq EventScript_27386D
compare VAR_0x8004, 2
@@ -3593,139 +3600,139 @@ gContestPaintingTough3::
.string "The mighty tough\n"
.string "hyper POKéMON {STR_VAR_1}$"
-gUnknown_0827ECBC:: @ 27ECBC
+gTrickHouse_Mechadoll_Oddish:: @ 27ECBC
.string "ODDISH$"
-gUnknown_0827ECC3:: @ 27ECC3
+gTrickHouse_Mechadoll_Poochyena:: @ 27ECC3
.string "POOCHYENA$"
-gUnknown_0827ECCD:: @ 27ECCD
+gTrickHouse_Mechadoll_Taillow:: @ 27ECCD
.string "TAILLOW$"
-gUnknown_0827ECD5:: @ 27ECD5
+gTrickHouse_Mechadoll_Azurill:: @ 27ECD5
.string "AZURILL$"
-gUnknown_0827ECDD:: @ 27ECDD
+gTrickHouse_Mechadoll_Lotad:: @ 27ECDD
.string "LOTAD$"
-gUnknown_0827ECE3:: @ 27ECE3
+gTrickHouse_Mechadoll_Wingull:: @ 27ECE3
.string "WINGULL$"
-gUnknown_0827ECEB:: @ 27ECEB
+gTrickHouse_Mechadoll_Dustox:: @ 27ECEB
.string "DUSTOX$"
-gUnknown_0827ECF2:: @ 27ECF2
+gTrickHouse_Mechadoll_Zubat:: @ 27ECF2
.string "ZUBAT$"
-gUnknown_0827ECF8:: @ 27ECF8
+gTrickHouse_Mechadoll_Nincada:: @ 27ECF8
.string "NINCADA$"
-gUnknown_0827ED00:: @ 27ED00
+gTrickHouse_Mechadoll_Ralts:: @ 27ED00
.string "RALTS$"
-gUnknown_0827ED06:: @ 27ED06
+gTrickHouse_Mechadoll_Zigzagoon:: @ 27ED06
.string "ZIGZAGOON$"
-gUnknown_0827ED10:: @ 27ED10
+gTrickHouse_Mechadoll_Slakoth:: @ 27ED10
.string "SLAKOTH$"
-gUnknown_0827ED18:: @ 27ED18
+gTrickHouse_Mechadoll_Poochyena2:: @ 27ED18
.string "POOCHYENA$"
-gUnknown_0827ED22:: @ 27ED22
+gTrickHouse_Mechadoll_Shroomish:: @ 27ED22
.string "SHROOMISH$"
-gUnknown_0827ED2C:: @ 27ED2C
+gTrickHouse_Mechadoll_Zigzagoon2:: @ 27ED2C
.string "ZIGZAGOON$"
-gUnknown_0827ED36:: @ 27ED36
+gTrickHouse_Mechadoll_Poochyena3:: @ 27ED36
.string "POOCHYENA$"
-gUnknown_0827ED40:: @ 27ED40
+gTrickHouse_Mechadoll_Zubat2:: @ 27ED40
.string "ZUBAT$"
-gUnknown_0827ED46:: @ 27ED46
+gTrickHouse_Mechadoll_Carvanha:: @ 27ED46
.string "CARVANHA$"
-gUnknown_0827ED4F:: @ 27ED4F
+gTrickHouse_Mechadoll_BurnHeal:: @ 27ED4F
.string "BURN HEAL$"
-gUnknown_0827ED59:: @ 27ED59
+gTrickHouse_Mechadoll_HarborMail:: @ 27ED59
.string "HARBOR MAIL$"
-gUnknown_0827ED65:: @ 27ED65
+gTrickHouse_Mechadoll_SamePrice:: @ 27ED65
.string "Same price$"
-gUnknown_0827ED70:: @ 27ED70
+gTrickHouse_Mechadoll_60Yen:: @ 27ED70
.string "¥60$"
-gUnknown_0827ED74:: @ 27ED74
+gTrickHouse_Mechadoll_55Yen:: @ 27ED74
.string "¥55$"
-gUnknown_0827ED78:: @ 27ED78
+gTrickHouse_Mechadoll_Nothing:: @ 27ED78
.string "Nothing$"
-gUnknown_0827ED80:: @ 27ED80
+gTrickHouse_Mechadoll_CostMore:: @ 27ED80
.string "They will cost more.$"
-gUnknown_0827ED95:: @ 27ED95
+gTrickHouse_Mechadoll_CostLess:: @ 27ED95
.string "They will cost less.$"
-gUnknown_0827EDAA:: @ 27EDAA
+gTrickHouse_Mechadoll_SamePrice2:: @ 27EDAA
.string "Same price$"
-gUnknown_0827EDB5:: @ 27EDB5
+gTrickHouse_Mechadoll_Male:: @ 27EDB5
.string "Male$"
-gUnknown_0827EDBA:: @ 27EDBA
+gTrickHouse_Mechadoll_Female:: @ 27EDBA
.string "Female$"
-gUnknown_0827EDC1:: @ 27EDC1
+gTrickHouse_Mechadoll_Neither:: @ 27EDC1
.string "Neither$"
-gUnknown_0827EDC9:: @ 27EDC9
+gTrickHouse_Mechadoll_ElderlyMen:: @ 27EDC9
.string "Elderly men$"
-gUnknown_0827EDD5:: @ 27EDD5
+gTrickHouse_Mechadoll_ElderlyLadies:: @ 27EDD5
.string "Elderly ladies$"
-gUnknown_0827EDE4:: @ 27EDE4
+gTrickHouse_Mechadoll_SameNumber:: @ 27EDE4
.string "Same number$"
-gUnknown_0827EDF0:: @ 27EDF0
+gTrickHouse_Mechadoll_None:: @ 27EDF0
.string "None$"
-gUnknown_0827EDF5:: @ 27EDF5
+gTrickHouse_Mechadoll_One:: @ 27EDF5
.string "1$"
-gUnknown_0827EDF7:: @ 27EDF7
+gTrickHouse_Mechadoll_Two:: @ 27EDF7
.string "2$"
-gUnknown_0827EDF9:: @ 27EDF9
+gTrickHouse_Mechadoll_Two2:: @ 27EDF9
.string "2$"
-gUnknown_0827EDFB:: @ 27EDFB
+gTrickHouse_Mechadoll_Three:: @ 27EDFB
.string "3$"
-gUnknown_0827EDFD:: @ 27EDFD
+gTrickHouse_Mechadoll_Four:: @ 27EDFD
.string "4$"
-gUnknown_0827EDFF:: @ 27EDFF
+gTrickHouse_Mechadoll_Six:: @ 27EDFF
.string "6$"
-gUnknown_0827EE01:: @ 27EE01
+gTrickHouse_Mechadoll_Seven:: @ 27EE01
.string "7$"
-gUnknown_0827EE03:: @ 27EE03
+gTrickHouse_Mechadoll_Eight:: @ 27EE03
.string "8$"
-gUnknown_0827EE05:: @ 27EE05
+gTrickHouse_Mechadoll_Six2:: @ 27EE05
.string "6$"
-gUnknown_0827EE07:: @ 27EE07
+gTrickHouse_Mechadoll_Seven2:: @ 27EE07
.string "7$"
-gUnknown_0827EE09:: @ 27EE09
+gTrickHouse_Mechadoll_Eight2:: @ 27EE09
.string "8$"
.include "data/scripts/tv.inc"
@@ -4013,7 +4020,7 @@ BattleFrontier_BattleTowerLobby_EventScript_28CB96:: @ 828CB96
BattleFrontier_BattleTowerLobby_EventScript_28CBD8:: @ 828CBD8
message BattleFrontier_BattleTowerLobby_Text_27F7BA
waitmessage
- multichoice 20, 8, 45, 1
+ multichoice 20, 8, MULTI_SATISFACTION, 1
copyvar VAR_0x8008, VAR_RESULT
compare VAR_RESULT, 0
call_if_eq BattleFrontier_BattleTowerLobby_EventScript_28CC38
@@ -4205,7 +4212,7 @@ MauvilleCity_GameCorner_EventScript_2A5B0D:: @ 82A5B0D
.include "data/text/roulette.inc"
.include "data/text/pokedex_rating.inc"
.include "data/text/lottery_corner.inc"
- .include "data/text/eon_ticket.inc"
+ .include "data/text/event_ticket_1.inc"
.include "data/text/braille.inc"
.include "data/text/berries.inc"
.include "data/text/shoal_cave.inc"
@@ -4281,23 +4288,23 @@ GraniteCave_B1F_Movement_2A8369: @ 82A8369
step_end
LilycoveCity_PokemonCenter_1F_EventScript_2A836B:: @ 82A836B
- special sub_818DAEC
+ special Script_GetLilycoveLadyId
switch VAR_RESULT
- case 0, LilycoveCity_PokemonCenter_1F_EventScript_2A8554
- case 1, LilycoveCity_PokemonCenter_1F_EventScript_2A8395
- case 2, LilycoveCity_PokemonCenter_1F_EventScript_2A882A
+ case LILYCOVE_LADY_QUIZ, LilycoveCity_PokemonCenter_1F_EventScript_2A8554
+ case LILYCOVE_LADY_FAVOR, LilycoveCity_PokemonCenter_1F_EventScript_2A8395
+ case LILYCOVE_LADY_CONTEST, LilycoveCity_PokemonCenter_1F_EventScript_2A882A
end
LilycoveCity_PokemonCenter_1F_EventScript_2A8395:: @ 82A8395
lock
faceplayer
msgbox LilycoveCity_PokemonCenter_1F_Text_2A8A69, MSGBOX_DEFAULT
- specialvar VAR_RESULT, sub_818DBE8
- compare VAR_RESULT, 0
+ specialvar VAR_RESULT, GetFavorLadyState
+ compare VAR_RESULT, LILYCOVE_LADY_STATE_READY
goto_if_eq LilycoveCity_PokemonCenter_1F_EventScript_2A83D0
- compare VAR_RESULT, 1
+ compare VAR_RESULT, LILYCOVE_LADY_STATE_COMPLETED
goto_if_eq LilycoveCity_PokemonCenter_1F_EventScript_2A83C6
- compare VAR_RESULT, 2
+ compare VAR_RESULT, LILYCOVE_LADY_STATE_PRIZE
goto_if_eq LilycoveCity_PokemonCenter_1F_EventScript_2A8510
end
@@ -4307,9 +4314,9 @@ LilycoveCity_PokemonCenter_1F_EventScript_2A83C6:: @ 82A83C6
end
LilycoveCity_PokemonCenter_1F_EventScript_2A83D0:: @ 82A83D0
- special sub_818DC2C
+ special BufferFavorLadyRequest
msgbox LilycoveCity_PokemonCenter_1F_Text_2A8A7D, MSGBOX_DEFAULT
- specialvar VAR_RESULT, sub_818DC60
+ specialvar VAR_RESULT, HasAnotherPlayerGivenFavorLadyItem
compare VAR_RESULT, 0
goto_if_eq LilycoveCity_PokemonCenter_1F_EventScript_2A8435
compare VAR_RESULT, 1
@@ -4317,9 +4324,9 @@ LilycoveCity_PokemonCenter_1F_EventScript_2A83D0:: @ 82A83D0
end
LilycoveCity_PokemonCenter_1F_EventScript_2A83F7:: @ 82A83F7
- special sub_818DCC8
- special sub_818DD14
- specialvar VAR_RESULT, sub_818DD54
+ special BufferFavorLadyItemName
+ special BufferFavorLadyPlayerName
+ specialvar VAR_RESULT, DidFavorLadyLikeItem
compare VAR_RESULT, 0
goto_if_eq LilycoveCity_PokemonCenter_1F_EventScript_2A8419
compare VAR_RESULT, 1
@@ -4357,7 +4364,7 @@ LilycoveCity_PokemonCenter_1F_EventScript_2A845E:: @ 82A845E
LilycoveCity_PokemonCenter_1F_EventScript_2A846C:: @ 82A846C
fadescreen 1
setvar VAR_RESULT, 0
- special sub_818DD78
+ special Script_FavorLadyOpenBagMenu
waitstate
compare VAR_RESULT, 0
goto_if_eq LilycoveCity_PokemonCenter_1F_EventScript_2A848E
@@ -4374,7 +4381,7 @@ LilycoveCity_PokemonCenter_1F_EventScript_2A848E:: @ 82A848E
end
LilycoveCity_PokemonCenter_1F_EventScript_2A84AD:: @ 82A84AD
- specialvar VAR_RESULT, sub_818DE44
+ specialvar VAR_RESULT, Script_DoesFavorLadyLikeItem
compare VAR_RESULT, 0
goto_if_eq LilycoveCity_PokemonCenter_1F_EventScript_2A84C9
compare VAR_RESULT, 1
@@ -4382,13 +4389,13 @@ LilycoveCity_PokemonCenter_1F_EventScript_2A84AD:: @ 82A84AD
end
LilycoveCity_PokemonCenter_1F_EventScript_2A84C9:: @ 82A84C9
- special sub_818DC2C
+ special BufferFavorLadyRequest
msgbox LilycoveCity_PokemonCenter_1F_Text_2A8C0F, MSGBOX_DEFAULT
release
end
LilycoveCity_PokemonCenter_1F_EventScript_2A84D6:: @ 82A84D6
- specialvar VAR_RESULT, sub_818DE5C
+ specialvar VAR_RESULT, IsFavorLadyThresholdMet
compare VAR_RESULT, 0
goto_if_eq LilycoveCity_PokemonCenter_1F_EventScript_2A84F2
compare VAR_RESULT, 1
@@ -4396,20 +4403,20 @@ LilycoveCity_PokemonCenter_1F_EventScript_2A84D6:: @ 82A84D6
end
LilycoveCity_PokemonCenter_1F_EventScript_2A84F2:: @ 82A84F2
- special sub_818DC2C
+ special BufferFavorLadyRequest
msgbox LilycoveCity_PokemonCenter_1F_Text_2A8C6F, MSGBOX_DEFAULT
release
end
LilycoveCity_PokemonCenter_1F_EventScript_2A84FF:: @ 82A84FF
- special sub_818DC2C
+ special BufferFavorLadyRequest
msgbox LilycoveCity_PokemonCenter_1F_Text_2A8CC8, MSGBOX_DEFAULT
goto LilycoveCity_PokemonCenter_1F_EventScript_2A8510
end
LilycoveCity_PokemonCenter_1F_EventScript_2A8510:: @ 82A8510
setvar VAR_0x8004, 0
- specialvar VAR_0x8004, sub_818DEA0
+ specialvar VAR_0x8004, FavorLadyGetPrize
msgbox LilycoveCity_PokemonCenter_1F_Text_2A8D5D, MSGBOX_DEFAULT
giveitem_std VAR_0x8004
compare VAR_RESULT, 0
@@ -4424,7 +4431,7 @@ LilycoveCity_PokemonCenter_1F_EventScript_2A8545:: @ 82A8545
end
LilycoveCity_PokemonCenter_1F_EventScript_2A854F:: @ 82A854F
- special sub_818DEDC
+ special SetFavorLadyState_Complete
release
end
@@ -4432,27 +4439,27 @@ LilycoveCity_PokemonCenter_1F_EventScript_2A8554:: @ 82A8554
lock
faceplayer
msgbox LilycoveCity_PokemonCenter_1F_Text_2A8E2B, MSGBOX_DEFAULT
- specialvar VAR_RESULT, sub_818E038
- compare VAR_RESULT, 0
+ specialvar VAR_RESULT, GetQuizLadyState
+ compare VAR_RESULT, LILYCOVE_LADY_STATE_READY
goto_if_eq LilycoveCity_PokemonCenter_1F_EventScript_2A8585
- compare VAR_RESULT, 1
+ compare VAR_RESULT, LILYCOVE_LADY_STATE_COMPLETED
goto_if_eq LilycoveCity_PokemonCenter_1F_EventScript_2A85AC
- compare VAR_RESULT, 2
+ compare VAR_RESULT, LILYCOVE_LADY_STATE_PRIZE
goto_if_eq LilycoveCity_PokemonCenter_1F_EventScript_2A86EC
end
LilycoveCity_PokemonCenter_1F_EventScript_2A8585:: @ 82A8585
- specialvar VAR_RESULT, sub_818E06C
- compare VAR_RESULT, 0
+ specialvar VAR_RESULT, GetQuizAuthor
+ compare VAR_RESULT, QUIZ_AUTHOR_PLAYER
goto_if_eq LilycoveCity_PokemonCenter_1F_EventScript_2A85C8
- compare VAR_RESULT, 1
+ compare VAR_RESULT, QUIZ_AUTHOR_OTHER_PLAYER
goto_if_eq LilycoveCity_PokemonCenter_1F_EventScript_2A85D2
- compare VAR_RESULT, 2
+ compare VAR_RESULT, QUIZ_AUTHOR_LADY
goto_if_eq LilycoveCity_PokemonCenter_1F_EventScript_2A85E0
end
LilycoveCity_PokemonCenter_1F_EventScript_2A85AC:: @ 82A85AC
- specialvar VAR_RESULT, sub_818E2D8
+ specialvar VAR_RESULT, IsQuizLadyWaitingForChallenger
compare VAR_RESULT, 0
goto_if_eq LilycoveCity_PokemonCenter_1F_EventScript_2A8759
compare VAR_RESULT, 1
@@ -4489,7 +4496,7 @@ LilycoveCity_PokemonCenter_1F_EventScript_2A8612:: @ 82A8612
end
LilycoveCity_PokemonCenter_1F_EventScript_2A861C:: @ 82A861C
- special sub_818E3BC
+ special ClearQuizLadyPlayerAnswer
compare VAR_0x8004, 0
goto_if_eq LilycoveCity_PokemonCenter_1F_EventScript_2A864C
compare VAR_0x8004, EASY_CHAT_TYPE_QUIZ_ANSWER
@@ -4503,13 +4510,13 @@ LilycoveCity_PokemonCenter_1F_EventScript_2A8635:: @ 82A8635
end
LilycoveCity_PokemonCenter_1F_EventScript_2A864C:: @ 82A864C
- special sub_811A858
+ special QuizLadyShowQuizQuestion
waitstate
goto LilycoveCity_PokemonCenter_1F_EventScript_2A8635
end
LilycoveCity_PokemonCenter_1F_EventScript_2A8656:: @ 82A8656
- special sub_818E2FC
+ special QuizLadyGetPlayerAnswer
waitstate
goto LilycoveCity_PokemonCenter_1F_EventScript_2A8635
end
@@ -4528,9 +4535,9 @@ LilycoveCity_PokemonCenter_1F_EventScript_2A867F:: @ 82A867F
end
LilycoveCity_PokemonCenter_1F_EventScript_2A8689:: @ 82A8689
- special sub_818E37C
+ special SetQuizLadyState_Complete
msgbox LilycoveCity_PokemonCenter_1F_Text_2A8F4D, MSGBOX_DEFAULT
- specialvar VAR_RESULT, sub_818E308
+ specialvar VAR_RESULT, IsQuizAnswerCorrect
compare VAR_RESULT, 0
goto_if_eq LilycoveCity_PokemonCenter_1F_EventScript_2A86C7
compare VAR_RESULT, 1
@@ -4546,8 +4553,8 @@ LilycoveCity_PokemonCenter_1F_EventScript_2A86B0:: @ 82A86B0
end
LilycoveCity_PokemonCenter_1F_EventScript_2A86C7:: @ 82A86C7
- special sub_818E538
- special sub_818E274
+ special BufferQuizCorrectAnswer
+ special BufferQuizPrizeName
playse SE_HAZURE
delay 10
playse SE_HAZURE
@@ -4556,8 +4563,9 @@ LilycoveCity_PokemonCenter_1F_EventScript_2A86C7:: @ 82A86C7
goto LilycoveCity_PokemonCenter_1F_EventScript_2A8759
end
+@ VAR_RESULT is essentially ignored, both jumps are identical
LilycoveCity_PokemonCenter_1F_EventScript_2A86EC:: @ 82A86EC
- specialvar VAR_RESULT, sub_818E298
+ specialvar VAR_RESULT, BufferQuizAuthorNameAndCheckIfLady
compare VAR_RESULT, 1
goto_if_eq LilycoveCity_PokemonCenter_1F_EventScript_2A8708
compare VAR_RESULT, 0
@@ -4576,8 +4584,8 @@ LilycoveCity_PokemonCenter_1F_EventScript_2A8716:: @ 82A8716
LilycoveCity_PokemonCenter_1F_EventScript_2A8724:: @ 82A8724
setvar VAR_0x8005, 0
- special sub_818E358
- special sub_818E37C
+ special BufferQuizPrizeItem
+ special SetQuizLadyState_Complete
giveitem_std VAR_0x8005
compare VAR_RESULT, 0
goto_if_eq LilycoveCity_PokemonCenter_1F_EventScript_2A874C
@@ -4586,7 +4594,7 @@ LilycoveCity_PokemonCenter_1F_EventScript_2A8724:: @ 82A8724
LilycoveCity_PokemonCenter_1F_EventScript_2A874C:: @ 82A874C
msgbox LilycoveCity_PokemonCenter_1F_Text_2A906A, MSGBOX_DEFAULT
- special sub_818E39C
+ special SetQuizLadyState_GivePrize
release
end
@@ -4599,7 +4607,7 @@ LilycoveCity_PokemonCenter_1F_EventScript_2A8759:: @ 82A8759
end
LilycoveCity_PokemonCenter_1F_EventScript_2A8778:: @ 82A8778
- special sub_818E3EC
+ special QuizLadyPickNewQuestion
msgbox LilycoveCity_PokemonCenter_1F_Text_2A9131, MSGBOX_DEFAULT
release
end
@@ -4610,7 +4618,7 @@ LilycoveCity_PokemonCenter_1F_EventScript_2A8785:: @ 82A8785
LilycoveCity_PokemonCenter_1F_EventScript_2A878D:: @ 82A878D
fadescreen 1
setvar VAR_RESULT, 0
- special sub_818E3E0
+ special Script_QuizLadyOpenBagMenu
waitstate
compare VAR_RESULT, 0
goto_if_eq LilycoveCity_PokemonCenter_1F_EventScript_2A87AF
@@ -4628,13 +4636,13 @@ LilycoveCity_PokemonCenter_1F_EventScript_2A87AF:: @ 82A87AF
LilycoveCity_PokemonCenter_1F_EventScript_2A87CE:: @ 82A87CE
msgbox LilycoveCity_PokemonCenter_1F_Text_2A9270, MSGBOX_DEFAULT
- special sub_818E430
- special sub_818E3BC
- setvar VAR_0x8004, 16
+ special ClearQuizLadyQuestionAndAnswer
+ special ClearQuizLadyPlayerAnswer
+ setvar VAR_0x8004, EASY_CHAT_TYPE_QUIZ_QUESTION
LilycoveCity_PokemonCenter_1F_EventScript_2A87E1:: @ 82A87E1
fadescreen 1
- special sub_818E47C
+ special QuizLadySetCustomQuestion
waitstate
compare VAR_RESULT, 0
goto_if_eq LilycoveCity_PokemonCenter_1F_EventScript_2A87F8
@@ -4650,9 +4658,9 @@ LilycoveCity_PokemonCenter_1F_EventScript_2A87F8:: @ 82A87F8
end
LilycoveCity_PokemonCenter_1F_EventScript_2A8817:: @ 82A8817
- special sub_818E490
- special sub_818E4A4
- special sub_818E510
+ special QuizLadyTakePrizeForCustomQuiz
+ special QuizLadyRecordCustomQuizData
+ special QuizLadySetWaitingForChallenger
msgbox LilycoveCity_PokemonCenter_1F_Text_2A9336, MSGBOX_DEFAULT
release
end
@@ -4661,15 +4669,16 @@ LilycoveCity_PokemonCenter_1F_EventScript_2A882A:: @ 82A882A
lock
faceplayer
msgbox LilycoveCity_PokemonCenter_1F_Text_2A93A7, MSGBOX_DEFAULT
- specialvar VAR_RESULT, sub_818E8B4
+ specialvar VAR_RESULT, HasPlayerGivenContestLadyPokeblock
compare VAR_RESULT, 0
goto_if_eq LilycoveCity_PokemonCenter_1F_EventScript_2A8850
compare VAR_RESULT, 1
goto_if_eq LilycoveCity_PokemonCenter_1F_EventScript_2A886C
end
+@ Redundant with above script, VAR_RESULT will always be 0 here
LilycoveCity_PokemonCenter_1F_EventScript_2A8850:: @ 82A8850
- specialvar VAR_RESULT, sub_818E8E0
+ specialvar VAR_RESULT, ShouldContestLadyShowGoOnAir
compare VAR_RESULT, 0
goto_if_eq LilycoveCity_PokemonCenter_1F_EventScript_2A8876
compare VAR_RESULT, 1
@@ -4682,7 +4691,7 @@ LilycoveCity_PokemonCenter_1F_EventScript_2A886C:: @ 82A886C
end
LilycoveCity_PokemonCenter_1F_EventScript_2A8876:: @ 82A8876
- special sub_818E914
+ special Script_BufferContestLadyCategoryAndMonName
msgbox LilycoveCity_PokemonCenter_1F_Text_2A93F4, MSGBOX_DEFAULT
checkitem ITEM_POKEBLOCK_CASE, 1
compare VAR_RESULT, 0
@@ -4701,7 +4710,7 @@ LilycoveCity_PokemonCenter_1F_EventScript_2A88B0:: @ 82A88B0
LilycoveCity_PokemonCenter_1F_EventScript_2A88BA:: @ 82A88BA
fadescreen 1
- special sub_818E92C
+ special OpenPokeblockCaseForContestLady
waitstate
compare VAR_RESULT, 65535
goto_if_eq LilycoveCity_PokemonCenter_1F_EventScript_2A88D7
@@ -4719,11 +4728,12 @@ LilycoveCity_PokemonCenter_1F_EventScript_2A88D7:: @ 82A88D7
LilycoveCity_PokemonCenter_1F_EventScript_2A88F6:: @ 82A88F6
msgbox LilycoveCity_PokemonCenter_1F_Text_2A9571, MSGBOX_DEFAULT
- special sub_818E940
- special sub_818E960
+ special SetContestLadyGivenPokeblock
+ special GetContestLadyMonSpecies
goto LilycoveCity_PokemonCenter_1F_EventScript_2A890A
end
+@ VAR_0x8004 here is the return value from GivePokeblockToContestLady
LilycoveCity_PokemonCenter_1F_EventScript_2A890A:: @ 82A890A
applymovement 4, LilycoveCity_PokemonCenter_1F_Movement_2A89B8
waitmovement 0
@@ -4745,6 +4755,7 @@ LilycoveCity_PokemonCenter_1F_EventScript_2A893F:: @ 82A893F
waitmovement 0
delay 60
+@ VAR_0x8004 here is the return value from GivePokeblockToContestLady
LilycoveCity_PokemonCenter_1F_EventScript_2A894C:: @ 82A894C
applymovement 4, LilycoveCity_PokemonCenter_1F_Movement_2A89C0
waitmovement 0
@@ -4761,13 +4772,13 @@ LilycoveCity_PokemonCenter_1F_EventScript_2A8970:: @ 82A8970
end
LilycoveCity_PokemonCenter_1F_EventScript_2A897E:: @ 82A897E
- special sub_818E914
+ special Script_BufferContestLadyCategoryAndMonName
msgbox LilycoveCity_PokemonCenter_1F_Text_2A9605, MSGBOX_DEFAULT
goto LilycoveCity_PokemonCenter_1F_EventScript_2A898F
end
LilycoveCity_PokemonCenter_1F_EventScript_2A898F:: @ 82A898F
- specialvar VAR_RESULT, sub_818E8E0
+ specialvar VAR_RESULT, ShouldContestLadyShowGoOnAir
compare VAR_RESULT, 1
goto_if_eq LilycoveCity_PokemonCenter_1F_EventScript_2A89A1
release
@@ -4810,18 +4821,18 @@ LilycoveCity_PokemonCenter_1F_Movement_2A89C2: @ 82A89C2
step_end
LilycoveCity_PokemonCenter_1F_EventScript_2A89C7:: @ 82A89C7
- specialvar VAR_RESULT, sub_818E990
- special sub_818E914
- special sub_818E960
- compare VAR_RESULT, 0
+ specialvar VAR_RESULT, GetContestLadyCategory
+ special Script_BufferContestLadyCategoryAndMonName
+ special GetContestLadyMonSpecies
+ compare VAR_RESULT, CONTEST_CATEGORY_COOL
goto_if_eq LilycoveCity_PokemonCenter_1F_EventScript_2A8A0A
- compare VAR_RESULT, 1
+ compare VAR_RESULT, CONTEST_CATEGORY_BEAUTY
goto_if_eq LilycoveCity_PokemonCenter_1F_EventScript_2A8A1D
- compare VAR_RESULT, 2
+ compare VAR_RESULT, CONTEST_CATEGORY_CUTE
goto_if_eq LilycoveCity_PokemonCenter_1F_EventScript_2A8A30
- compare VAR_RESULT, 3
+ compare VAR_RESULT, CONTEST_CATEGORY_SMART
goto_if_eq LilycoveCity_PokemonCenter_1F_EventScript_2A8A43
- compare VAR_RESULT, 4
+ compare VAR_RESULT, CONTEST_CATEGORY_TOUGH
goto_if_eq LilycoveCity_PokemonCenter_1F_EventScript_2A8A56
end
@@ -5542,17 +5553,17 @@ BattleFrontier_BattlePikeRandomRoom1_EventScript_2C3EE8:: @ 82C3EE8
goto_if_eq BattleFrontier_BattlePikeRandomRoom1_EventScript_2C3F3F
hideobjectat 2, MAP_BATTLE_FRONTIER_BATTLE_PIKE_RANDOM_ROOM1
setvar VAR_TEMP_4, 1
- turnobject 255, 2
+ turnobject EVENT_OBJ_ID_PLAYER, DIR_NORTH
end
BattleFrontier_BattlePikeRandomRoom1_EventScript_2C3F35:: @ 82C3F35
setvar VAR_TEMP_4, 1
- turnobject 255, 2
+ turnobject EVENT_OBJ_ID_PLAYER, DIR_NORTH
end
BattleFrontier_BattlePikeRandomRoom1_EventScript_2C3F3F:: @ 82C3F3F
setvar VAR_TEMP_4, 1
- turnobject 255, 2
+ turnobject EVENT_OBJ_ID_PLAYER, DIR_NORTH
hideobjectat 1, MAP_BATTLE_FRONTIER_BATTLE_PIKE_RANDOM_ROOM1
end
@@ -6296,77 +6307,7 @@ VerdanturfTown_BattleTentLobby_Text_2C6878: @ 82C6878
.string "The VERDANTURF BATTLE TENT\n"
.string "rules are listed.$"
-LilycoveCity_Harbor_Text_2C68A5: @ 82C68A5
- .string "What's up, youngster?\p"
- .string "What, it's you who's supposed to have\n"
- .string "a tattered old map?\p"
- .string "Let's have a look.\n"
- .string "… … … … … …\p"
- .string "Boy, this is quite a ways away.\n"
- .string "I'm afraid I can't help you…$"
-
-LilycoveCity_Harbor_Text_2C6951: @ 82C6951
- .string "BRINEY: Hold on a second!\p"
- .string "What's the idea of turning down\n"
- .string "someone that I owe so much to?$"
-
-LilycoveCity_Harbor_Text_2C69AA: @ 82C69AA
- .string "{PLAYER}{KUN}, I'm terribly sorry.\p"
- .string "You came to me seeking my help,\n"
- .string "and we almost turned you away.\p"
- .string "Well, let me make things right.\p"
- .string "We'll sail right away, of course!\p"
- .string "Let's find this island on\n"
- .string "this OLD SEA MAP!$"
-
-LilycoveCity_Harbor_Text_2C6A71: @ 82C6A71
- .string "Is it you who brought that odd\n"
- .string "ticket?\p"
- .string "Where you're trying to go is an island\n"
- .string "that's far, far away.\p"
- .string "No one knows what awaits there…\p"
- .string "The very thought excites my blood\n"
- .string "as a sailing man!\p"
- .string "Get on board, youngster!$"
-
-FarawayIsland_Entrance_Text_2C6B42: @ 82C6B42
- .string "CAPT. BRINEY can be so maddeningly\n"
- .string "fickle…\p"
- .string "Do you want to return to LILYCOVE?$"
-
-BirthIsland_Harbor_Text_2C6B90: @ 82C6B90
- .string "What an oddly shaped island, eh?\n"
- .string "Do you want to return to LILYCOVE?$"
-
-LilycoveCity_Harbor_Text_2C6BD4: @ 82C6BD4
- .string "Is it you who brought those\n"
- .string "odd tickets?\p"
- .string "… … …Hm.\p"
- .string "These tickets will get you to islands\n"
- .string "that are far, far away.\p"
- .string "No one knows what awaits there,\n"
- .string "or what may happen there.\p"
- .string "The very thought excites my blood\n"
- .string "as a sailing man!\p"
- .string "Get on board, youngster!\n"
- .string "Where shall we sail first?$"
-
-NavelRock_Harbor_Text_2C6CE6: @ 82C6CE6
- .string "Did… Did you hear that?\n"
- .string "That low growling from deep in there.\p"
- .string "Are you sure it's safe?\n"
- .string "Do you think we should leave?$"
-
-FarawayIsland_Entrance_Text_2C6D5A: @ 82C6D5A
- .string "The writing is fading as if it was\n"
- .string "written a long time ago…\p"
- .string "“…ber, 6th day\n"
- .string "If any human…sets foot here…\l"
- .string "again…et it be a kindhearted pers…\l"
- .string "…ith that hope, I depar…”$"
-
-FarawayIsland_Interior_Text_2C6DFF: @ 82C6DFF
- .string "Myuu…$"
+ .include "data/text/event_ticket_2.inc"
MauvilleCity_Text_2C6E05: @ 82C6E05
.string "This move can be learned only\n"
diff --git a/data/maps/BattleFrontier_BattleArenaBattleRoom/scripts.inc b/data/maps/BattleFrontier_BattleArenaBattleRoom/scripts.inc
index f3a0ecfb4..205ee0e71 100644
--- a/data/maps/BattleFrontier_BattleArenaBattleRoom/scripts.inc
+++ b/data/maps/BattleFrontier_BattleArenaBattleRoom/scripts.inc
@@ -169,30 +169,30 @@ BattleFrontier_BattleArenaBattleRoom_EventScript_2576B0:: @ 82576B0
call BattleFrontier_BattleArenaBattleRoom_EventScript_23E8E0
compare VAR_RESULT, 1
goto_if_eq BattleFrontier_BattleArenaBattleRoom_EventScript_257768
- multichoice 19, 4, 103, 1
+ multichoice 19, 4, MULTI_GO_ON_RECORD_REST_RETIRE, 1
switch VAR_RESULT
case 0, BattleFrontier_BattleArenaBattleRoom_EventScript_25783A
case 1, BattleFrontier_BattleArenaBattleRoom_EventScript_25779E
case 2, BattleFrontier_BattleArenaBattleRoom_EventScript_2577DA
case 3, BattleFrontier_BattleArenaBattleRoom_EventScript_257808
- case 127, BattleFrontier_BattleArenaBattleRoom_EventScript_2576B0
+ case MULTI_B_PRESSED, BattleFrontier_BattleArenaBattleRoom_EventScript_2576B0
BattleFrontier_BattleArenaBattleRoom_EventScript_257768:: @ 8257768
- multichoice 20, 6, 104, 1
+ multichoice 20, 6, MULTI_GO_ON_REST_RETIRE, 1
switch VAR_RESULT
case 0, BattleFrontier_BattleArenaBattleRoom_EventScript_25783A
case 1, BattleFrontier_BattleArenaBattleRoom_EventScript_2577DA
case 2, BattleFrontier_BattleArenaBattleRoom_EventScript_257808
- case 127, BattleFrontier_BattleArenaBattleRoom_EventScript_2576B0
+ case MULTI_B_PRESSED, BattleFrontier_BattleArenaBattleRoom_EventScript_2576B0
BattleFrontier_BattleArenaBattleRoom_EventScript_25779E:: @ 825779E
message BattleFrontier_BattleArenaBattleRoom_Text_257F04
waitmessage
- multichoicedefault 20, 8, 94, 1, 0
+ multichoicedefault 20, 8, MULTI_YESNO, 1, 0
switch VAR_RESULT
case 1, BattleFrontier_BattleArenaBattleRoom_EventScript_2576B0
case 0, BattleFrontier_BattleArenaBattleRoom_EventScript_2577D0
- case 127, BattleFrontier_BattleArenaBattleRoom_EventScript_2576B0
+ case MULTI_B_PRESSED, BattleFrontier_BattleArenaBattleRoom_EventScript_2576B0
BattleFrontier_BattleArenaBattleRoom_EventScript_2577D0:: @ 82577D0
call BattleFrontier_BattleArenaBattleRoom_EventScript_23E8B4
@@ -208,11 +208,11 @@ BattleFrontier_BattleArenaBattleRoom_EventScript_2577DA:: @ 82577DA
BattleFrontier_BattleArenaBattleRoom_EventScript_257808:: @ 8257808
message BattleFrontier_BattleArenaBattleRoom_Text_257E9E
waitmessage
- multichoicedefault 20, 8, 94, 1, 0
+ multichoicedefault 20, 8, MULTI_YESNO, 1, 0
switch VAR_RESULT
case 1, BattleFrontier_BattleArenaBattleRoom_EventScript_2576B0
case 0, BattleFrontier_BattleArenaBattleRoom_EventScript_257615
- case 127, BattleFrontier_BattleArenaBattleRoom_EventScript_2576B0
+ case MULTI_B_PRESSED, BattleFrontier_BattleArenaBattleRoom_EventScript_2576B0
BattleFrontier_BattleArenaBattleRoom_EventScript_25783A:: @ 825783A
closemessage
@@ -286,21 +286,21 @@ BattleFrontier_BattleArenaBattleRoom_EventScript_2578D4:: @ 82578D4
call BattleFrontier_BattleArenaBattleRoom_EventScript_23E8E0
compare VAR_RESULT, 1
goto_if_eq BattleFrontier_BattleArenaBattleRoom_EventScript_25792B
- multichoice 19, 4, 103, 1
+ multichoice 19, 4, MULTI_GO_ON_RECORD_REST_RETIRE, 1
switch VAR_RESULT
case 0, BattleFrontier_BattleArenaBattleRoom_EventScript_257961
case 1, BattleFrontier_BattleArenaBattleRoom_EventScript_25779E
case 2, BattleFrontier_BattleArenaBattleRoom_EventScript_2577DA
case 3, BattleFrontier_BattleArenaBattleRoom_EventScript_257808
- case 127, BattleFrontier_BattleArenaBattleRoom_EventScript_2578D4
+ case MULTI_B_PRESSED, BattleFrontier_BattleArenaBattleRoom_EventScript_2578D4
BattleFrontier_BattleArenaBattleRoom_EventScript_25792B:: @ 825792B
- multichoice 20, 6, 104, 1
+ multichoice 20, 6, MULTI_GO_ON_REST_RETIRE, 1
switch VAR_RESULT
case 0, BattleFrontier_BattleArenaBattleRoom_EventScript_257961
case 1, BattleFrontier_BattleArenaBattleRoom_EventScript_2577DA
case 2, BattleFrontier_BattleArenaBattleRoom_EventScript_257808
- case 127, BattleFrontier_BattleArenaBattleRoom_EventScript_2578D4
+ case MULTI_B_PRESSED, BattleFrontier_BattleArenaBattleRoom_EventScript_2578D4
BattleFrontier_BattleArenaBattleRoom_EventScript_257961:: @ 8257961
call BattleFrontier_BattleArenaBattleRoom_EventScript_242170
diff --git a/data/maps/BattleFrontier_BattleArenaLobby/scripts.inc b/data/maps/BattleFrontier_BattleArenaLobby/scripts.inc
index 5df47aed1..0c55e9917 100644
--- a/data/maps/BattleFrontier_BattleArenaLobby/scripts.inc
+++ b/data/maps/BattleFrontier_BattleArenaLobby/scripts.inc
@@ -9,7 +9,7 @@ BattleFrontier_BattleArenaLobby_MapScript2_255C41: @ 8255C41
BattleFrontier_BattleArenaLobby_EventScript_255C4B:: @ 8255C4B
setvar VAR_TEMP_1, 1
- turnobject EVENT_OBJ_ID_PLAYER, 2
+ turnobject EVENT_OBJ_ID_PLAYER, DIR_NORTH
end
BattleFrontier_BattleArenaLobby_MapScript2_255C55: @ 8255C55
@@ -101,11 +101,11 @@ BattleFrontier_BattleArenaLobby_EventScript_255D59:: @ 8255D59
goto_if_eq BattleFrontier_BattleArenaLobby_EventScript_255DBF
message BattleFrontier_BattleArenaLobby_Text_256B19
waitmessage
- multichoicedefault 20, 8, 94, 1, 0
+ multichoicedefault 20, 8, MULTI_YESNO, 1, 0
switch VAR_RESULT
case 1, BattleFrontier_BattleArenaLobby_EventScript_255DBF
case 0, BattleFrontier_BattleArenaLobby_EventScript_255DBA
- case 127, BattleFrontier_BattleArenaLobby_EventScript_255DBF
+ case MULTI_B_PRESSED, BattleFrontier_BattleArenaLobby_EventScript_255DBF
BattleFrontier_BattleArenaLobby_EventScript_255DBA:: @ 8255DBA
call BattleFrontier_BattleArenaLobby_EventScript_23E8B4
@@ -140,20 +140,20 @@ BattleFrontier_BattleArenaLobby_EventScript_255DF4:: @ 8255DF4
BattleFrontier_BattleArenaLobby_EventScript_255E0B:: @ 8255E0B
message BattleFrontier_BattleArenaLobby_Text_2561EA
waitmessage
- multichoice 17, 6, 23, 0
+ multichoice 17, 6, MULTI_CHALLENGEINFO, 0
switch VAR_RESULT
case 0, BattleFrontier_BattleArenaLobby_EventScript_255E47
case 1, BattleFrontier_BattleArenaLobby_EventScript_255F9F
case 2, BattleFrontier_BattleArenaLobby_EventScript_255FFB
- case 127, BattleFrontier_BattleArenaLobby_EventScript_255FFB
+ case MULTI_B_PRESSED, BattleFrontier_BattleArenaLobby_EventScript_255FFB
BattleFrontier_BattleArenaLobby_EventScript_255E47:: @ 8255E47
message BattleFrontier_BattleArenaLobby_Text_256513
waitmessage
- multichoice 17, 6, 24, 0
+ multichoice 17, 6, MULTI_LEVEL_MODE, 0
switch VAR_RESULT
case 2, BattleFrontier_BattleArenaLobby_EventScript_255FFB
- case 127, BattleFrontier_BattleArenaLobby_EventScript_255FFB
+ case MULTI_B_PRESSED, BattleFrontier_BattleArenaLobby_EventScript_255FFB
setvar VAR_0x8004, 15
special CallFrontierUtilFunc
compare VAR_0x8004, 1
@@ -377,14 +377,14 @@ BattleFrontier_BattleArenaLobby_EventScript_2560CA:: @ 82560CA
BattleFrontier_BattleArenaLobby_EventScript_2560D9:: @ 82560D9
message BattleFrontier_BattleArenaLobby_Text_256DDF
waitmessage
- multichoice 17, 2, 96, 0
+ multichoice 17, 2, MULTI_BATTLE_ARENA_RULES, 0
switch VAR_RESULT
case 0, BattleFrontier_BattleArenaLobby_EventScript_25612C
case 1, BattleFrontier_BattleArenaLobby_EventScript_25613A
case 2, BattleFrontier_BattleArenaLobby_EventScript_256148
case 3, BattleFrontier_BattleArenaLobby_EventScript_256156
case 4, BattleFrontier_BattleArenaLobby_EventScript_256164
- case 127, BattleFrontier_BattleArenaLobby_EventScript_256164
+ case MULTI_B_PRESSED, BattleFrontier_BattleArenaLobby_EventScript_256164
end
BattleFrontier_BattleArenaLobby_EventScript_25612C:: @ 825612C
diff --git a/data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.inc b/data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.inc
index 96e9f86f5..a44b51ef5 100644
--- a/data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.inc
+++ b/data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.inc
@@ -595,76 +595,76 @@ BattleFrontier_BattleDomeBattleRoom_EventScript_24C52F:: @ 824C52F
return
BattleFrontier_BattleDomeBattleRoom_EventScript_24C530:: @ 824C530
- createvobject EVENT_OBJ_GFX_SCIENTIST_1, 1, 3, 0, 3, 1
- createvobject EVENT_OBJ_GFX_EXPERT_F, 4, 6, 0, 3, 1
- createvobject EVENT_OBJ_GFX_NINJA_BOY, 6, 8, 0, 3, 1
- createvobject EVENT_OBJ_GFX_LITTLE_GIRL, 9, 11, 0, 3, 1
- createvobject EVENT_OBJ_GFX_SCIENTIST_1, 11, 13, 0, 3, 1
- createvobject EVENT_OBJ_GFX_MAN_5, 13, 15, 0, 3, 1
- createvobject EVENT_OBJ_GFX_BEAUTY, 19, 7, 1, 3, 1
- createvobject EVENT_OBJ_GFX_WOMAN_5, 22, 11, 1, 3, 1
- createvobject EVENT_OBJ_GFX_LITTLE_BOY, 25, 15, 1, 3, 1
- createvobject EVENT_OBJ_GFX_YOUNGSTER, 26, 2, 2, 3, 1
- createvobject EVENT_OBJ_GFX_SCHOOL_KID_M, 29, 5, 1, 3, 1
+ createvobject EVENT_OBJ_GFX_SCIENTIST_1, 1, 3, 0, 3, DIR_SOUTH
+ createvobject EVENT_OBJ_GFX_EXPERT_F, 4, 6, 0, 3, DIR_SOUTH
+ createvobject EVENT_OBJ_GFX_NINJA_BOY, 6, 8, 0, 3, DIR_SOUTH
+ createvobject EVENT_OBJ_GFX_LITTLE_GIRL, 9, 11, 0, 3, DIR_SOUTH
+ createvobject EVENT_OBJ_GFX_SCIENTIST_1, 11, 13, 0, 3, DIR_SOUTH
+ createvobject EVENT_OBJ_GFX_MAN_5, 13, 15, 0, 3, DIR_SOUTH
+ createvobject EVENT_OBJ_GFX_BEAUTY, 19, 7, 1, 3, DIR_SOUTH
+ createvobject EVENT_OBJ_GFX_WOMAN_5, 22, 11, 1, 3, DIR_SOUTH
+ createvobject EVENT_OBJ_GFX_LITTLE_BOY, 25, 15, 1, 3, DIR_SOUTH
+ createvobject EVENT_OBJ_GFX_YOUNGSTER, 26, 2, 2, 3, DIR_SOUTH
+ createvobject EVENT_OBJ_GFX_SCHOOL_KID_M, 29, 5, 1, 3, DIR_SOUTH
return
BattleFrontier_BattleDomeBattleRoom_EventScript_24C594:: @ 824C594
- createvobject EVENT_OBJ_GFX_SCIENTIST_1, 1, 3, 0, 3, 1
- createvobject EVENT_OBJ_GFX_EXPERT_F, 4, 6, 0, 3, 1
- createvobject EVENT_OBJ_GFX_NINJA_BOY, 6, 8, 0, 3, 1
- createvobject EVENT_OBJ_GFX_WOMAN_2, 7, 9, 0, 3, 1
- createvobject EVENT_OBJ_GFX_LITTLE_GIRL, 9, 11, 0, 3, 1
- createvobject EVENT_OBJ_GFX_LASS, 10, 12, 0, 3, 1
- createvobject EVENT_OBJ_GFX_SCIENTIST_1, 11, 13, 0, 3, 1
- createvobject EVENT_OBJ_GFX_MAN_5, 13, 15, 0, 3, 1
- createvobject EVENT_OBJ_GFX_GENTLEMAN, 15, 2, 1, 3, 1
- createvobject EVENT_OBJ_GFX_NINJA_BOY, 16, 3, 1, 3, 1
- createvobject EVENT_OBJ_GFX_WOMAN_2, 17, 4, 1, 3, 1
- createvobject EVENT_OBJ_GFX_BEAUTY, 19, 7, 1, 3, 1
- createvobject EVENT_OBJ_GFX_EXPERT_F, 20, 9, 1, 3, 1
- createvobject EVENT_OBJ_GFX_WOMAN_5, 22, 11, 1, 3, 1
- createvobject EVENT_OBJ_GFX_SCIENTIST_1, 23, 13, 1, 3, 1
- createvobject EVENT_OBJ_GFX_LITTLE_BOY, 25, 15, 1, 3, 1
- createvobject EVENT_OBJ_GFX_YOUNGSTER, 26, 2, 2, 3, 1
- createvobject EVENT_OBJ_GFX_HEX_MANIAC, 28, 5, 2, 3, 1
- createvobject EVENT_OBJ_GFX_SCHOOL_KID_M, 29, 5, 1, 3, 1
- createvobject EVENT_OBJ_GFX_MART_EMPLOYEE, 30, 6, 2, 3, 1
+ createvobject EVENT_OBJ_GFX_SCIENTIST_1, 1, 3, 0, 3, DIR_SOUTH
+ createvobject EVENT_OBJ_GFX_EXPERT_F, 4, 6, 0, 3, DIR_SOUTH
+ createvobject EVENT_OBJ_GFX_NINJA_BOY, 6, 8, 0, 3, DIR_SOUTH
+ createvobject EVENT_OBJ_GFX_WOMAN_2, 7, 9, 0, 3, DIR_SOUTH
+ createvobject EVENT_OBJ_GFX_LITTLE_GIRL, 9, 11, 0, 3, DIR_SOUTH
+ createvobject EVENT_OBJ_GFX_LASS, 10, 12, 0, 3, DIR_SOUTH
+ createvobject EVENT_OBJ_GFX_SCIENTIST_1, 11, 13, 0, 3, DIR_SOUTH
+ createvobject EVENT_OBJ_GFX_MAN_5, 13, 15, 0, 3, DIR_SOUTH
+ createvobject EVENT_OBJ_GFX_GENTLEMAN, 15, 2, 1, 3, DIR_SOUTH
+ createvobject EVENT_OBJ_GFX_NINJA_BOY, 16, 3, 1, 3, DIR_SOUTH
+ createvobject EVENT_OBJ_GFX_WOMAN_2, 17, 4, 1, 3, DIR_SOUTH
+ createvobject EVENT_OBJ_GFX_BEAUTY, 19, 7, 1, 3, DIR_SOUTH
+ createvobject EVENT_OBJ_GFX_EXPERT_F, 20, 9, 1, 3, DIR_SOUTH
+ createvobject EVENT_OBJ_GFX_WOMAN_5, 22, 11, 1, 3, DIR_SOUTH
+ createvobject EVENT_OBJ_GFX_SCIENTIST_1, 23, 13, 1, 3, DIR_SOUTH
+ createvobject EVENT_OBJ_GFX_LITTLE_BOY, 25, 15, 1, 3, DIR_SOUTH
+ createvobject EVENT_OBJ_GFX_YOUNGSTER, 26, 2, 2, 3, DIR_SOUTH
+ createvobject EVENT_OBJ_GFX_HEX_MANIAC, 28, 5, 2, 3, DIR_SOUTH
+ createvobject EVENT_OBJ_GFX_SCHOOL_KID_M, 29, 5, 1, 3, DIR_SOUTH
+ createvobject EVENT_OBJ_GFX_MART_EMPLOYEE, 30, 6, 2, 3, DIR_SOUTH
createvobject EVENT_OBJ_GFX_WOMAN_5, 31, 8, 2, 3, 1
return
BattleFrontier_BattleDomeBattleRoom_EventScript_24C652:: @ 824C652
- createvobject EVENT_OBJ_GFX_NINJA_BOY, 0, 2, 0, 3, 1
- createvobject EVENT_OBJ_GFX_SCIENTIST_1, 1, 3, 0, 3, 1
- createvobject EVENT_OBJ_GFX_BEAUTY, 2, 15, 0, 3, 1
- createvobject EVENT_OBJ_GFX_MAN_5, 3, 5, 0, 3, 1
- createvobject EVENT_OBJ_GFX_EXPERT_F, 4, 6, 0, 3, 1
- createvobject EVENT_OBJ_GFX_SCIENTIST_1, 5, 7, 0, 3, 1
- createvobject EVENT_OBJ_GFX_NINJA_BOY, 6, 8, 0, 3, 1
- createvobject EVENT_OBJ_GFX_WOMAN_2, 7, 9, 0, 3, 1
- createvobject EVENT_OBJ_GFX_WOMAN_3, 8, 10, 0, 3, 1
- createvobject EVENT_OBJ_GFX_LITTLE_GIRL, 9, 11, 0, 3, 1
- createvobject EVENT_OBJ_GFX_LASS, 10, 12, 0, 3, 1
- createvobject EVENT_OBJ_GFX_SCIENTIST_1, 11, 13, 0, 3, 1
- createvobject EVENT_OBJ_GFX_BEAUTY, 12, 14, 0, 3, 1
- createvobject EVENT_OBJ_GFX_MAN_5, 13, 15, 2, 3, 1
- createvobject EVENT_OBJ_GFX_HIKER, 14, 12, 2, 3, 1
- createvobject EVENT_OBJ_GFX_GENTLEMAN, 15, 2, 1, 3, 1
- createvobject EVENT_OBJ_GFX_NINJA_BOY, 16, 3, 1, 3, 1
- createvobject EVENT_OBJ_GFX_WOMAN_2, 17, 4, 1, 3, 1
- createvobject EVENT_OBJ_GFX_WOMAN_3, 18, 6, 1, 3, 1
- createvobject EVENT_OBJ_GFX_BEAUTY, 19, 7, 1, 3, 1
- createvobject EVENT_OBJ_GFX_EXPERT_F, 20, 9, 1, 3, 1
- createvobject EVENT_OBJ_GFX_MAN_2, 21, 10, 1, 3, 1
- createvobject EVENT_OBJ_GFX_WOMAN_5, 22, 11, 1, 3, 1
- createvobject EVENT_OBJ_GFX_SCIENTIST_1, 23, 13, 1, 3, 1
- createvobject EVENT_OBJ_GFX_GENTLEMAN, 24, 14, 1, 3, 1
- createvobject EVENT_OBJ_GFX_LITTLE_BOY, 25, 15, 1, 3, 1
- createvobject EVENT_OBJ_GFX_YOUNGSTER, 26, 2, 2, 3, 1
- createvobject EVENT_OBJ_GFX_FAT_MAN, 27, 3, 2, 3, 1
- createvobject EVENT_OBJ_GFX_HEX_MANIAC, 28, 5, 2, 3, 1
- createvobject EVENT_OBJ_GFX_SCHOOL_KID_M, 29, 5, 1, 3, 1
- createvobject EVENT_OBJ_GFX_MART_EMPLOYEE, 30, 6, 2, 3, 1
- createvobject EVENT_OBJ_GFX_WOMAN_5, 31, 8, 2, 3, 1
+ createvobject EVENT_OBJ_GFX_NINJA_BOY, 0, 2, 0, 3, DIR_SOUTH
+ createvobject EVENT_OBJ_GFX_SCIENTIST_1, 1, 3, 0, 3, DIR_SOUTH
+ createvobject EVENT_OBJ_GFX_BEAUTY, 2, 15, 0, 3, DIR_SOUTH
+ createvobject EVENT_OBJ_GFX_MAN_5, 3, 5, 0, 3, DIR_SOUTH
+ createvobject EVENT_OBJ_GFX_EXPERT_F, 4, 6, 0, 3, DIR_SOUTH
+ createvobject EVENT_OBJ_GFX_SCIENTIST_1, 5, 7, 0, 3, DIR_SOUTH
+ createvobject EVENT_OBJ_GFX_NINJA_BOY, 6, 8, 0, 3, DIR_SOUTH
+ createvobject EVENT_OBJ_GFX_WOMAN_2, 7, 9, 0, 3, DIR_SOUTH
+ createvobject EVENT_OBJ_GFX_WOMAN_3, 8, 10, 0, 3, DIR_SOUTH
+ createvobject EVENT_OBJ_GFX_LITTLE_GIRL, 9, 11, 0, 3, DIR_SOUTH
+ createvobject EVENT_OBJ_GFX_LASS, 10, 12, 0, 3, DIR_SOUTH
+ createvobject EVENT_OBJ_GFX_SCIENTIST_1, 11, 13, 0, 3, DIR_SOUTH
+ createvobject EVENT_OBJ_GFX_BEAUTY, 12, 14, 0, 3, DIR_SOUTH
+ createvobject EVENT_OBJ_GFX_MAN_5, 13, 15, 2, 3, DIR_SOUTH
+ createvobject EVENT_OBJ_GFX_HIKER, 14, 12, 2, 3, DIR_SOUTH
+ createvobject EVENT_OBJ_GFX_GENTLEMAN, 15, 2, 1, 3, DIR_SOUTH
+ createvobject EVENT_OBJ_GFX_NINJA_BOY, 16, 3, 1, 3, DIR_SOUTH
+ createvobject EVENT_OBJ_GFX_WOMAN_2, 17, 4, 1, 3, DIR_SOUTH
+ createvobject EVENT_OBJ_GFX_WOMAN_3, 18, 6, 1, 3, DIR_SOUTH
+ createvobject EVENT_OBJ_GFX_BEAUTY, 19, 7, 1, 3, DIR_SOUTH
+ createvobject EVENT_OBJ_GFX_EXPERT_F, 20, 9, 1, 3, DIR_SOUTH
+ createvobject EVENT_OBJ_GFX_MAN_2, 21, 10, 1, 3, DIR_SOUTH
+ createvobject EVENT_OBJ_GFX_WOMAN_5, 22, 11, 1, 3, DIR_SOUTH
+ createvobject EVENT_OBJ_GFX_SCIENTIST_1, 23, 13, 1, 3, DIR_SOUTH
+ createvobject EVENT_OBJ_GFX_GENTLEMAN, 24, 14, 1, 3, DIR_SOUTH
+ createvobject EVENT_OBJ_GFX_LITTLE_BOY, 25, 15, 1, 3, DIR_SOUTH
+ createvobject EVENT_OBJ_GFX_YOUNGSTER, 26, 2, 2, 3, DIR_SOUTH
+ createvobject EVENT_OBJ_GFX_FAT_MAN, 27, 3, 2, 3, DIR_SOUTH
+ createvobject EVENT_OBJ_GFX_HEX_MANIAC, 28, 5, 2, 3, DIR_SOUTH
+ createvobject EVENT_OBJ_GFX_SCHOOL_KID_M, 29, 5, 1, 3, DIR_SOUTH
+ createvobject EVENT_OBJ_GFX_MART_EMPLOYEE, 30, 6, 2, 3, DIR_SOUTH
+ createvobject EVENT_OBJ_GFX_WOMAN_5, 31, 8, 2, 3, DIR_SOUTH
return
BattleFrontier_BattleArenaBattleRoom_Movement_24C773: @ 824C773
@@ -880,71 +880,71 @@ BattleFrontier_BattleDomeBattleRoom_Movement_24C82B: @ 824C82B
step_end
BattleFrontier_BattleDomeBattleRoom_EventScript_24C82E:: @ 824C82E
- turnvobject 0, 4
- turnvobject 2, 4
- turnvobject 4, 4
- turnvobject 6, 4
- turnvobject 8, 4
- turnvobject 10, 3
- turnvobject 12, 3
- turnvobject 14, 3
- turnvobject 16, 3
- turnvobject 18, 3
- turnvobject 20, 4
- turnvobject 22, 4
- turnvobject 24, 4
- turnvobject 26, 4
- turnvobject 28, 4
- turnvobject 30, 4
+ turnvobject 0, DIR_EAST
+ turnvobject 2, DIR_EAST
+ turnvobject 4, DIR_EAST
+ turnvobject 6, DIR_EAST
+ turnvobject 8, DIR_EAST
+ turnvobject 10, DIR_WEST
+ turnvobject 12, DIR_WEST
+ turnvobject 14, DIR_WEST
+ turnvobject 16, DIR_WEST
+ turnvobject 18, DIR_WEST
+ turnvobject 20, DIR_EAST
+ turnvobject 22, DIR_EAST
+ turnvobject 24, DIR_EAST
+ turnvobject 26, DIR_EAST
+ turnvobject 28, DIR_EAST
+ turnvobject 30, DIR_EAST
delay 20
- turnvobject 0, 1
- turnvobject 2, 1
- turnvobject 4, 1
- turnvobject 6, 1
- turnvobject 8, 1
- turnvobject 10, 1
- turnvobject 12, 1
- turnvobject 14, 1
- turnvobject 16, 1
- turnvobject 18, 1
- turnvobject 20, 1
- turnvobject 22, 1
- turnvobject 24, 1
- turnvobject 26, 1
- turnvobject 28, 1
- turnvobject 30, 1
+ turnvobject 0, DIR_SOUTH
+ turnvobject 2, DIR_SOUTH
+ turnvobject 4, DIR_SOUTH
+ turnvobject 6, DIR_SOUTH
+ turnvobject 8, DIR_SOUTH
+ turnvobject 10, DIR_SOUTH
+ turnvobject 12, DIR_SOUTH
+ turnvobject 14, DIR_SOUTH
+ turnvobject 16, DIR_SOUTH
+ turnvobject 18, DIR_SOUTH
+ turnvobject 20, DIR_SOUTH
+ turnvobject 22, DIR_SOUTH
+ turnvobject 24, DIR_SOUTH
+ turnvobject 26, DIR_SOUTH
+ turnvobject 28, DIR_SOUTH
+ turnvobject 30, DIR_SOUTH
delay 20
- turnvobject 1, 4
- turnvobject 3, 4
- turnvobject 5, 4
- turnvobject 7, 4
- turnvobject 9, 4
- turnvobject 11, 3
- turnvobject 13, 3
- turnvobject 15, 3
- turnvobject 17, 3
- turnvobject 19, 3
- turnvobject 21, 4
- turnvobject 23, 4
- turnvobject 25, 4
- turnvobject 27, 3
- turnvobject 31, 3
+ turnvobject 1, DIR_EAST
+ turnvobject 3, DIR_EAST
+ turnvobject 5, DIR_EAST
+ turnvobject 7, DIR_EAST
+ turnvobject 9, DIR_EAST
+ turnvobject 11, DIR_WEST
+ turnvobject 13, DIR_WEST
+ turnvobject 15, DIR_WEST
+ turnvobject 17, DIR_WEST
+ turnvobject 19, DIR_WEST
+ turnvobject 21, DIR_EAST
+ turnvobject 23, DIR_EAST
+ turnvobject 25, DIR_EAST
+ turnvobject 27, DIR_WEST
+ turnvobject 31, DIR_WEST
delay 20
- turnvobject 1, 1
- turnvobject 3, 1
- turnvobject 5, 1
- turnvobject 7, 1
- turnvobject 9, 1
- turnvobject 11, 1
- turnvobject 13, 1
- turnvobject 15, 1
- turnvobject 17, 1
- turnvobject 19, 1
- turnvobject 21, 1
- turnvobject 23, 1
- turnvobject 25, 1
- turnvobject 27, 1
- turnvobject 31, 1
+ turnvobject 1, DIR_SOUTH
+ turnvobject 3, DIR_SOUTH
+ turnvobject 5, DIR_SOUTH
+ turnvobject 7, DIR_SOUTH
+ turnvobject 9, DIR_SOUTH
+ turnvobject 11, DIR_SOUTH
+ turnvobject 13, DIR_SOUTH
+ turnvobject 15, DIR_SOUTH
+ turnvobject 17, DIR_SOUTH
+ turnvobject 19, DIR_SOUTH
+ turnvobject 21, DIR_SOUTH
+ turnvobject 23, DIR_SOUTH
+ turnvobject 25, DIR_SOUTH
+ turnvobject 27, DIR_SOUTH
+ turnvobject 31, DIR_SOUTH
delay 20
return
diff --git a/data/maps/BattleFrontier_BattleDomeLobby/scripts.inc b/data/maps/BattleFrontier_BattleDomeLobby/scripts.inc
index 68ecf802b..4ba6db967 100644
--- a/data/maps/BattleFrontier_BattleDomeLobby/scripts.inc
+++ b/data/maps/BattleFrontier_BattleDomeLobby/scripts.inc
@@ -16,7 +16,7 @@ BattleFrontier_BattlePyramidLobby_MapScript2_2497FB: @ 82497FB
BattleFrontier_BattleDomeLobby_EventScript_249805:: @ 8249805
setvar VAR_TEMP_1, 1
- turnobject EVENT_OBJ_ID_PLAYER, 2
+ turnobject EVENT_OBJ_ID_PLAYER, DIR_NORTH
end
BattleFrontier_BattleDomeLobby_MapScript2_24980F: @ 824980F
@@ -131,11 +131,11 @@ BattleFrontier_BattleDomeLobby_EventScript_249991:: @ 8249991
goto_if_eq BattleFrontier_BattleDomeLobby_EventScript_2499E9
message BattleFrontier_BattleDomeLobby_Text_24AE17
waitmessage
- multichoicedefault 20, 8, 94, 1, 0
+ multichoicedefault 20, 8, MULTI_YESNO, 1, 0
switch VAR_RESULT
case 1, BattleFrontier_BattleDomeLobby_EventScript_2499E9
case 0, BattleFrontier_BattleDomeLobby_EventScript_2499E4
- case 127, BattleFrontier_BattleDomeLobby_EventScript_2499E9
+ case MULTI_B_PRESSED, BattleFrontier_BattleDomeLobby_EventScript_2499E9
BattleFrontier_BattleDomeLobby_EventScript_2499E4:: @ 82499E4
call BattleFrontier_BattleDomeLobby_EventScript_23E8B4
@@ -193,20 +193,20 @@ BattleFrontier_BattleDomeLobby_EventScript_249A72:: @ 8249A72
compare VAR_FRONTIER_BATTLE_MODE, 1
call_if_eq BattleFrontier_BattleDomeLobby_EventScript_249D15
waitmessage
- multichoice 17, 6, 23, 0
+ multichoice 17, 6, MULTI_CHALLENGEINFO, 0
switch VAR_RESULT
case 0, BattleFrontier_BattleDomeLobby_EventScript_249ABF
case 1, BattleFrontier_BattleDomeLobby_EventScript_249BFA
case 2, BattleFrontier_BattleDomeLobby_EventScript_249C64
- case 127, BattleFrontier_BattleDomeLobby_EventScript_249C64
+ case MULTI_B_PRESSED, BattleFrontier_BattleDomeLobby_EventScript_249C64
BattleFrontier_BattleDomeLobby_EventScript_249ABF:: @ 8249ABF
message BattleFrontier_BattleDomeLobby_Text_24A210
waitmessage
- multichoice 17, 6, 24, 0
+ multichoice 17, 6, MULTI_LEVEL_MODE, 0
switch VAR_RESULT
case 2, BattleFrontier_BattleDomeLobby_EventScript_249C64
- case 127, BattleFrontier_BattleDomeLobby_EventScript_249C64
+ case MULTI_B_PRESSED, BattleFrontier_BattleDomeLobby_EventScript_249C64
setvar VAR_0x8004, 15
special CallFrontierUtilFunc
compare VAR_0x8004, 1
@@ -503,13 +503,13 @@ BattleFrontier_BattleDomeLobby_EventScript_249E34:: @ 8249E34
BattleFrontier_BattleDomeLobby_EventScript_249E43:: @ 8249E43
message BattleFrontier_BattleDomeLobby_Text_24AE8B
waitmessage
- multichoice 17, 4, 98, 0
+ multichoice 17, 4, MULTI_BATTLE_DOME_RULES, 0
switch VAR_RESULT
case 0, BattleFrontier_BattleDomeLobby_EventScript_249E8B
case 1, BattleFrontier_BattleDomeLobby_EventScript_249E99
case 2, BattleFrontier_BattleDomeLobby_EventScript_249EA7
case 3, BattleFrontier_BattleDomeLobby_EventScript_249EB5
- case 127, BattleFrontier_BattleDomeLobby_EventScript_249EB5
+ case MULTI_B_PRESSED, BattleFrontier_BattleDomeLobby_EventScript_249EB5
end
BattleFrontier_BattleDomeLobby_EventScript_249E8B:: @ 8249E8B
diff --git a/data/maps/BattleFrontier_BattleDomePreBattleRoom/scripts.inc b/data/maps/BattleFrontier_BattleDomePreBattleRoom/scripts.inc
index 3901201bb..3f5d53ac1 100644
--- a/data/maps/BattleFrontier_BattleDomePreBattleRoom/scripts.inc
+++ b/data/maps/BattleFrontier_BattleDomePreBattleRoom/scripts.inc
@@ -9,7 +9,7 @@ BattleFrontier_BattleDomePreBattleRoom_MapScript2_24B204: @ 824B204
BattleFrontier_BattleDomePreBattleRoom_EventScript_24B20E:: @ 824B20E
setvar VAR_TEMP_1, 1
- turnobject EVENT_OBJ_ID_PLAYER, 2
+ turnobject EVENT_OBJ_ID_PLAYER, DIR_NORTH
end
BattleFrontier_BattleDomePreBattleRoom_MapScript2_24B218: @ 824B218
@@ -35,7 +35,7 @@ BattleFrontier_BattleDomePreBattleRoom_EventScript_24B24F:: @ 824B24F
call BattleFrontier_BattleDomePreBattleRoom_EventScript_23E8E0
compare VAR_RESULT, 1
goto_if_eq BattleFrontier_BattleDomePreBattleRoom_EventScript_24B2C1
- multichoice 16, 0, 73, 1
+ multichoice 16, 0, MULTI_TOURNEY_WITH_RECORD, 1
switch VAR_RESULT
case 0, BattleFrontier_BattleDomePreBattleRoom_EventScript_24B3DD
case 1, BattleFrontier_BattleDomePreBattleRoom_EventScript_24B3F5
@@ -43,26 +43,26 @@ BattleFrontier_BattleDomePreBattleRoom_EventScript_24B24F:: @ 824B24F
case 3, BattleFrontier_BattleDomePreBattleRoom_EventScript_24B30D
case 4, BattleFrontier_BattleDomePreBattleRoom_EventScript_24B349
case 5, BattleFrontier_BattleDomePreBattleRoom_EventScript_24B377
- case 127, BattleFrontier_BattleDomePreBattleRoom_EventScript_24B24F
+ case MULTI_B_PRESSED, BattleFrontier_BattleDomePreBattleRoom_EventScript_24B24F
BattleFrontier_BattleDomePreBattleRoom_EventScript_24B2C1:: @ 824B2C1
- multichoice 16, 2, 107, 1
+ multichoice 16, 2, MULTI_TOURNEY_NO_RECORD, 1
switch VAR_RESULT
case 0, BattleFrontier_BattleDomePreBattleRoom_EventScript_24B3DD
case 1, BattleFrontier_BattleDomePreBattleRoom_EventScript_24B3F5
case 2, BattleFrontier_BattleDomePreBattleRoom_EventScript_24B46D
case 3, BattleFrontier_BattleDomePreBattleRoom_EventScript_24B349
case 4, BattleFrontier_BattleDomePreBattleRoom_EventScript_24B377
- case 127, BattleFrontier_BattleDomePreBattleRoom_EventScript_24B24F
+ case MULTI_B_PRESSED, BattleFrontier_BattleDomePreBattleRoom_EventScript_24B24F
BattleFrontier_BattleDomePreBattleRoom_EventScript_24B30D:: @ 824B30D
message BattleFrontier_BattleDomePreBattleRoom_Text_24BAF7
waitmessage
- multichoicedefault 20, 8, 94, 1, 0
+ multichoicedefault 20, 8, MULTI_YESNO, 1, 0
switch VAR_RESULT
case 1, BattleFrontier_BattleDomePreBattleRoom_EventScript_24B24F
case 0, BattleFrontier_BattleDomePreBattleRoom_EventScript_24B33F
- case 127, BattleFrontier_BattleDomePreBattleRoom_EventScript_24B24F
+ case MULTI_B_PRESSED, BattleFrontier_BattleDomePreBattleRoom_EventScript_24B24F
BattleFrontier_BattleDomePreBattleRoom_EventScript_24B33F:: @ 824B33F
call BattleFrontier_BattleDomePreBattleRoom_EventScript_23E8B4
@@ -78,11 +78,11 @@ BattleFrontier_BattleDomePreBattleRoom_EventScript_24B349:: @ 824B349
BattleFrontier_BattleDomePreBattleRoom_EventScript_24B377:: @ 824B377
message BattleFrontier_BattleDomePreBattleRoom_Text_24BA93
waitmessage
- multichoicedefault 20, 8, 94, 1, 0
+ multichoicedefault 20, 8, MULTI_YESNO, 1, 0
switch VAR_RESULT
case 1, BattleFrontier_BattleDomePreBattleRoom_EventScript_24B24F
case 0, BattleFrontier_BattleDomePreBattleRoom_EventScript_24B3A9
- case 127, BattleFrontier_BattleDomePreBattleRoom_EventScript_24B24F
+ case MULTI_B_PRESSED, BattleFrontier_BattleDomePreBattleRoom_EventScript_24B24F
BattleFrontier_BattleDomePreBattleRoom_EventScript_24B3A9:: @ 824B3A9
setvar VAR_0x8004, 12
diff --git a/data/maps/BattleFrontier_BattleFactoryLobby/scripts.inc b/data/maps/BattleFrontier_BattleFactoryLobby/scripts.inc
index a9e57dde6..9569d23ca 100644
--- a/data/maps/BattleFrontier_BattleFactoryLobby/scripts.inc
+++ b/data/maps/BattleFrontier_BattleFactoryLobby/scripts.inc
@@ -9,7 +9,7 @@ BattleFrontier_BattleFactoryLobby_MapScript2_2583F3: @ 82583F3
BattleFrontier_BattleFactoryLobby_EventScript_2583FD:: @ 82583FD
setvar VAR_TEMP_1, 1
- turnobject EVENT_OBJ_ID_PLAYER, 2
+ turnobject EVENT_OBJ_ID_PLAYER, DIR_NORTH
end
BattleFrontier_BattleFactoryLobby_MapScript2_258407: @ 8258407
@@ -106,11 +106,11 @@ BattleFrontier_BattleFactoryLobby_EventScript_25853B:: @ 825853B
goto_if_eq BattleFrontier_BattleFactoryLobby_EventScript_258582
message BattleFrontier_BattleFactoryLobby_Text_259388
waitmessage
- multichoicedefault 20, 8, 94, 1, 0
+ multichoicedefault 20, 8, MULTI_YESNO, 1, 0
switch VAR_RESULT
case 1, BattleFrontier_BattleFactoryLobby_EventScript_258582
case 0, BattleFrontier_BattleFactoryLobby_EventScript_25857D
- case 127, BattleFrontier_BattleFactoryLobby_EventScript_258582
+ case MULTI_B_PRESSED, BattleFrontier_BattleFactoryLobby_EventScript_258582
BattleFrontier_BattleFactoryLobby_EventScript_25857D:: @ 825857D
call BattleFrontier_BattleFactoryLobby_EventScript_23E8B4
@@ -166,20 +166,20 @@ BattleFrontier_BattleFactoryLobby_EventScript_258606:: @ 8258606
compare VAR_FRONTIER_BATTLE_MODE, 1
call_if_eq BattleFrontier_BattleFactoryLobby_EventScript_2587C9
waitmessage
- multichoice 17, 6, 23, 0
+ multichoice 17, 6, MULTI_CHALLENGEINFO, 0
switch VAR_RESULT
case 0, BattleFrontier_BattleFactoryLobby_EventScript_258653
case 1, BattleFrontier_BattleFactoryLobby_EventScript_258768
case 2, BattleFrontier_BattleFactoryLobby_EventScript_25879D
- case 127, BattleFrontier_BattleFactoryLobby_EventScript_25879D
+ case MULTI_B_PRESSED, BattleFrontier_BattleFactoryLobby_EventScript_25879D
BattleFrontier_BattleFactoryLobby_EventScript_258653:: @ 8258653
message BattleFrontier_BattleFactoryLobby_Text_258BE9
waitmessage
- multichoice 17, 6, 24, 0
+ multichoice 17, 6, MULTI_LEVEL_MODE, 0
switch VAR_RESULT
case 2, BattleFrontier_BattleFactoryLobby_EventScript_25879D
- case 127, BattleFrontier_BattleFactoryLobby_EventScript_25879D
+ case MULTI_B_PRESSED, BattleFrontier_BattleFactoryLobby_EventScript_25879D
setvar VAR_0x8004, 2
setvar VAR_0x8005, 1
copyvar VAR_0x8006, VAR_RESULT
@@ -347,7 +347,7 @@ BattleFrontier_BattleFactoryLobby_EventScript_258839:: @ 8258839
BattleFrontier_BattleFactoryLobby_EventScript_258848:: @ 8258848
message BattleFrontier_BattleFactoryLobby_Text_259743
waitmessage
- multichoice 17, 0, 99, 0
+ multichoice 17, 0, MULTI_BATTLE_FACTORY_RULES, 0
switch VAR_RESULT
case 0, BattleFrontier_BattleFactoryLobby_EventScript_2588A6
case 1, BattleFrontier_BattleFactoryLobby_EventScript_2588B4
@@ -355,7 +355,7 @@ BattleFrontier_BattleFactoryLobby_EventScript_258848:: @ 8258848
case 3, BattleFrontier_BattleFactoryLobby_EventScript_2588D0
case 4, BattleFrontier_BattleFactoryLobby_EventScript_2588DE
case 5, BattleFrontier_BattleFactoryLobby_EventScript_2588EC
- case 127, BattleFrontier_BattleFactoryLobby_EventScript_2588EC
+ case MULTI_B_PRESSED, BattleFrontier_BattleFactoryLobby_EventScript_2588EC
end
BattleFrontier_BattleFactoryLobby_EventScript_2588A6:: @ 82588A6
diff --git a/data/maps/BattleFrontier_BattleFactoryPreBattleRoom/scripts.inc b/data/maps/BattleFrontier_BattleFactoryPreBattleRoom/scripts.inc
index 0049b3f58..f65ffae0d 100644
--- a/data/maps/BattleFrontier_BattleFactoryPreBattleRoom/scripts.inc
+++ b/data/maps/BattleFrontier_BattleFactoryPreBattleRoom/scripts.inc
@@ -12,10 +12,10 @@ BattleFrontier_BattleFactoryPreBattleRoom_EventScript_259ACF:: @ 8259ACF
compare VAR_0x8006, 1
goto_if_ne BattleFrontier_BattleFactoryPreBattleRoom_EventScript_259AEA
setobjectxy 1, 8, 7
- turnobject 1, 1
+ turnobject 1, DIR_SOUTH
BattleFrontier_BattleFactoryPreBattleRoom_EventScript_259AEA:: @ 8259AEA
- turnobject EVENT_OBJ_ID_PLAYER, 2
+ turnobject EVENT_OBJ_ID_PLAYER, DIR_NORTH
end
BattleFrontier_BattleFactoryPreBattleRoom_MapScript2_259AEF: @ 8259AEF
@@ -118,30 +118,30 @@ BattleFrontier_BattleFactoryPreBattleRoom_EventScript_259C26:: @ 8259C26
call BattleFrontier_BattleFactoryPreBattleRoom_EventScript_23E8E0
compare VAR_RESULT, 1
goto_if_eq BattleFrontier_BattleFactoryPreBattleRoom_EventScript_259CC6
- multichoice 19, 4, 103, 1
+ multichoice 19, 4, MULTI_GO_ON_RECORD_REST_RETIRE, 1
switch VAR_RESULT
case 0, BattleFrontier_BattleFactoryPreBattleRoom_EventScript_259D98
case 1, BattleFrontier_BattleFactoryPreBattleRoom_EventScript_259CFC
case 2, BattleFrontier_BattleFactoryPreBattleRoom_EventScript_259D38
case 3, BattleFrontier_BattleFactoryPreBattleRoom_EventScript_259D66
- case 127, BattleFrontier_BattleFactoryPreBattleRoom_EventScript_259C13
+ case MULTI_B_PRESSED, BattleFrontier_BattleFactoryPreBattleRoom_EventScript_259C13
BattleFrontier_BattleFactoryPreBattleRoom_EventScript_259CC6:: @ 8259CC6
- multichoice 20, 6, 104, 1
+ multichoice 20, 6, MULTI_GO_ON_REST_RETIRE, 1
switch VAR_RESULT
case 0, BattleFrontier_BattleFactoryPreBattleRoom_EventScript_259D98
case 1, BattleFrontier_BattleFactoryPreBattleRoom_EventScript_259D38
case 2, BattleFrontier_BattleFactoryPreBattleRoom_EventScript_259D66
- case 127, BattleFrontier_BattleFactoryPreBattleRoom_EventScript_259C13
+ case MULTI_B_PRESSED, BattleFrontier_BattleFactoryPreBattleRoom_EventScript_259C13
BattleFrontier_BattleFactoryPreBattleRoom_EventScript_259CFC:: @ 8259CFC
message BattleFrontier_BattleFactoryPreBattleRoom_Text_25ABD2
waitmessage
- multichoicedefault 20, 8, 94, 1, 0
+ multichoicedefault 20, 8, MULTI_YESNO, 1, 0
switch VAR_RESULT
case 1, BattleFrontier_BattleFactoryPreBattleRoom_EventScript_259C13
case 0, BattleFrontier_BattleFactoryPreBattleRoom_EventScript_259D2E
- case 127, BattleFrontier_BattleFactoryPreBattleRoom_EventScript_259C13
+ case MULTI_B_PRESSED, BattleFrontier_BattleFactoryPreBattleRoom_EventScript_259C13
BattleFrontier_BattleFactoryPreBattleRoom_EventScript_259D2E:: @ 8259D2E
call BattleFrontier_BattleFactoryPreBattleRoom_EventScript_23E8B4
@@ -157,11 +157,11 @@ BattleFrontier_BattleFactoryPreBattleRoom_EventScript_259D38:: @ 8259D38
BattleFrontier_BattleFactoryPreBattleRoom_EventScript_259D66:: @ 8259D66
message BattleFrontier_BattleFactoryPreBattleRoom_Text_25A37A
waitmessage
- multichoicedefault 20, 8, 94, 1, 0
+ multichoicedefault 20, 8, MULTI_YESNO, 1, 0
switch VAR_RESULT
case 1, BattleFrontier_BattleFactoryPreBattleRoom_EventScript_259C13
case 0, BattleFrontier_BattleFactoryPreBattleRoom_EventScript_25AEF8
- case 127, BattleFrontier_BattleFactoryPreBattleRoom_EventScript_259C13
+ case MULTI_B_PRESSED, BattleFrontier_BattleFactoryPreBattleRoom_EventScript_259C13
BattleFrontier_BattleFactoryPreBattleRoom_EventScript_259D98:: @ 8259D98
setvar VAR_0x8004, 12
@@ -422,21 +422,21 @@ BattleFrontier_BattleFactoryPreBattleRoom_EventScript_25A0B9:: @ 825A0B9
call BattleFrontier_BattleFactoryPreBattleRoom_EventScript_23E8E0
compare VAR_RESULT, 1
goto_if_eq BattleFrontier_BattleFactoryPreBattleRoom_EventScript_25A110
- multichoice 19, 4, 103, 1
+ multichoice 19, 4, MULTI_GO_ON_RECORD_REST_RETIRE, 1
switch VAR_RESULT
case 0, BattleFrontier_BattleFactoryPreBattleRoom_EventScript_25A146
case 1, BattleFrontier_BattleFactoryPreBattleRoom_EventScript_259CFC
case 2, BattleFrontier_BattleFactoryPreBattleRoom_EventScript_259D38
case 3, BattleFrontier_BattleFactoryPreBattleRoom_EventScript_259D66
- case 127, BattleFrontier_BattleFactoryPreBattleRoom_EventScript_25A0B9
+ case MULTI_B_PRESSED, BattleFrontier_BattleFactoryPreBattleRoom_EventScript_25A0B9
BattleFrontier_BattleFactoryPreBattleRoom_EventScript_25A110:: @ 825A110
- multichoice 20, 6, 104, 1
+ multichoice 20, 6, MULTI_GO_ON_REST_RETIRE, 1
switch VAR_RESULT
case 0, BattleFrontier_BattleFactoryPreBattleRoom_EventScript_25A146
case 1, BattleFrontier_BattleFactoryPreBattleRoom_EventScript_259D38
case 2, BattleFrontier_BattleFactoryPreBattleRoom_EventScript_259D66
- case 127, BattleFrontier_BattleFactoryPreBattleRoom_EventScript_25A0B9
+ case MULTI_B_PRESSED, BattleFrontier_BattleFactoryPreBattleRoom_EventScript_25A0B9
BattleFrontier_BattleFactoryPreBattleRoom_EventScript_25A146:: @ 825A146
msgbox BattleFrontier_BattleFactoryPreBattleRoom_Text_25AD61, MSGBOX_DEFAULT
diff --git a/data/maps/BattleFrontier_BattlePalaceBattleRoom/scripts.inc b/data/maps/BattleFrontier_BattlePalaceBattleRoom/scripts.inc
index bdd4a9ff4..605807580 100644
--- a/data/maps/BattleFrontier_BattlePalaceBattleRoom/scripts.inc
+++ b/data/maps/BattleFrontier_BattlePalaceBattleRoom/scripts.inc
@@ -126,30 +126,30 @@ BattleFrontier_BattlePalaceBattleRoom_EventScript_24F98A:: @ 824F98A
call BattleFrontier_BattlePalaceBattleRoom_EventScript_23E8E0
compare VAR_RESULT, 1
goto_if_eq BattleFrontier_BattlePalaceBattleRoom_EventScript_24FA42
- multichoice 19, 4, 103, 1
+ multichoice 19, 4, MULTI_GO_ON_RECORD_REST_RETIRE, 1
switch VAR_RESULT
case 0, BattleFrontier_BattlePalaceBattleRoom_EventScript_24FB14
case 1, BattleFrontier_BattlePalaceBattleRoom_EventScript_24FA78
case 2, BattleFrontier_BattlePalaceBattleRoom_EventScript_24FAB4
case 3, BattleFrontier_BattlePalaceBattleRoom_EventScript_24FAE2
- case 127, BattleFrontier_BattlePalaceBattleRoom_EventScript_24F98A
+ case MULTI_B_PRESSED, BattleFrontier_BattlePalaceBattleRoom_EventScript_24F98A
BattleFrontier_BattlePalaceBattleRoom_EventScript_24FA42:: @ 824FA42
- multichoice 20, 6, 104, 1
+ multichoice 20, 6, MULTI_GO_ON_REST_RETIRE, 1
switch VAR_RESULT
case 0, BattleFrontier_BattlePalaceBattleRoom_EventScript_24FB14
case 1, BattleFrontier_BattlePalaceBattleRoom_EventScript_24FAB4
case 2, BattleFrontier_BattlePalaceBattleRoom_EventScript_24FAE2
- case 127, BattleFrontier_BattlePalaceBattleRoom_EventScript_24F98A
+ case MULTI_B_PRESSED, BattleFrontier_BattlePalaceBattleRoom_EventScript_24F98A
BattleFrontier_BattlePalaceBattleRoom_EventScript_24FA78:: @ 824FA78
message BattleFrontier_BattlePalaceBattleRoom_Text_25009E
waitmessage
- multichoicedefault 20, 8, 94, 1, 0
+ multichoicedefault 20, 8, MULTI_YESNO, 1, 0
switch VAR_RESULT
case 1, BattleFrontier_BattlePalaceBattleRoom_EventScript_24F98A
case 0, BattleFrontier_BattlePalaceBattleRoom_EventScript_24FAAA
- case 127, BattleFrontier_BattlePalaceBattleRoom_EventScript_24F98A
+ case MULTI_B_PRESSED, BattleFrontier_BattlePalaceBattleRoom_EventScript_24F98A
BattleFrontier_BattlePalaceBattleRoom_EventScript_24FAAA:: @ 824FAAA
call BattleFrontier_BattlePalaceBattleRoom_EventScript_23E8B4
@@ -165,11 +165,11 @@ BattleFrontier_BattlePalaceBattleRoom_EventScript_24FAB4:: @ 824FAB4
BattleFrontier_BattlePalaceBattleRoom_EventScript_24FAE2:: @ 824FAE2
message BattleFrontier_BattlePalaceBattleRoom_Text_25005A
waitmessage
- multichoicedefault 20, 8, 94, 1, 0
+ multichoicedefault 20, 8, MULTI_YESNO, 1, 0
switch VAR_RESULT
case 1, BattleFrontier_BattlePalaceBattleRoom_EventScript_24F98A
case 0, BattleFrontier_BattlePalaceBattleRoom_EventScript_24F8FA
- case 127, BattleFrontier_BattlePalaceBattleRoom_EventScript_24F98A
+ case MULTI_B_PRESSED, BattleFrontier_BattlePalaceBattleRoom_EventScript_24F98A
BattleFrontier_BattlePalaceBattleRoom_EventScript_24FB14:: @ 824FB14
applymovement 1, BattleFrontier_BattlePalaceBattleRoom_Movement_24FE97
@@ -209,21 +209,21 @@ BattleFrontier_BattlePalaceBattleRoom_EventScript_24FB79:: @ 824FB79
call BattleFrontier_BattlePalaceBattleRoom_EventScript_23E8E0
compare VAR_RESULT, 1
goto_if_eq BattleFrontier_BattlePalaceBattleRoom_EventScript_24FBD0
- multichoice 19, 4, 103, 1
+ multichoice 19, 4, MULTI_GO_ON_RECORD_REST_RETIRE, 1
switch VAR_RESULT
case 0, BattleFrontier_BattlePalaceBattleRoom_EventScript_24FC06
case 1, BattleFrontier_BattlePalaceBattleRoom_EventScript_24FA78
case 2, BattleFrontier_BattlePalaceBattleRoom_EventScript_24FAB4
case 3, BattleFrontier_BattlePalaceBattleRoom_EventScript_24FAE2
- case 127, BattleFrontier_BattlePalaceBattleRoom_EventScript_24FB79
+ case MULTI_B_PRESSED, BattleFrontier_BattlePalaceBattleRoom_EventScript_24FB79
BattleFrontier_BattlePalaceBattleRoom_EventScript_24FBD0:: @ 824FBD0
- multichoice 20, 6, 104, 1
+ multichoice 20, 6, MULTI_GO_ON_REST_RETIRE, 1
switch VAR_RESULT
case 0, BattleFrontier_BattlePalaceBattleRoom_EventScript_24FC06
case 1, BattleFrontier_BattlePalaceBattleRoom_EventScript_24FAB4
case 2, BattleFrontier_BattlePalaceBattleRoom_EventScript_24FAE2
- case 127, BattleFrontier_BattlePalaceBattleRoom_EventScript_24FB79
+ case MULTI_B_PRESSED, BattleFrontier_BattlePalaceBattleRoom_EventScript_24FB79
BattleFrontier_BattlePalaceBattleRoom_EventScript_24FC06:: @ 824FC06
call BattleFrontier_BattlePalaceBattleRoom_EventScript_242170
diff --git a/data/maps/BattleFrontier_BattlePalaceLobby/scripts.inc b/data/maps/BattleFrontier_BattlePalaceLobby/scripts.inc
index 40205e9b5..c3b688661 100644
--- a/data/maps/BattleFrontier_BattlePalaceLobby/scripts.inc
+++ b/data/maps/BattleFrontier_BattlePalaceLobby/scripts.inc
@@ -9,7 +9,7 @@ BattleFrontier_BattlePalaceLobby_MapScript2_24D789: @ 824D789
BattleFrontier_BattlePalaceLobby_EventScript_24D793:: @ 824D793
setvar VAR_TEMP_1, 1
- turnobject EVENT_OBJ_ID_PLAYER, 2
+ turnobject EVENT_OBJ_ID_PLAYER, DIR_NORTH
end
BattleFrontier_BattlePalaceLobby_MapScript2_24D79D: @ 824D79D
@@ -101,11 +101,11 @@ BattleFrontier_BattlePalaceLobby_EventScript_24D8A1:: @ 824D8A1
goto_if_eq BattleFrontier_BattlePalaceLobby_EventScript_24D907
message BattleFrontier_BattlePalaceLobby_Text_24EF16
waitmessage
- multichoicedefault 20, 8, 94, 1, 0
+ multichoicedefault 20, 8, MULTI_YESNO, 1, 0
switch VAR_RESULT
case 1, BattleFrontier_BattlePalaceLobby_EventScript_24D907
case 0, BattleFrontier_BattlePalaceLobby_EventScript_24D902
- case 127, BattleFrontier_BattlePalaceLobby_EventScript_24D907
+ case MULTI_B_PRESSED, BattleFrontier_BattlePalaceLobby_EventScript_24D907
BattleFrontier_BattlePalaceLobby_EventScript_24D902:: @ 824D902
call BattleFrontier_BattlePalaceLobby_EventScript_23E8B4
@@ -164,20 +164,20 @@ BattleFrontier_BattlePalaceLobby_EventScript_24D999:: @ 824D999
compare VAR_FRONTIER_BATTLE_MODE, 1
call_if_eq BattleFrontier_BattlePalaceLobby_EventScript_24DBB6
waitmessage
- multichoice 17, 6, 23, 0
+ multichoice 17, 6, MULTI_CHALLENGEINFO, 0
switch VAR_RESULT
case 0, BattleFrontier_BattlePalaceLobby_EventScript_24D9E6
case 1, BattleFrontier_BattlePalaceLobby_EventScript_24DB20
case 2, BattleFrontier_BattlePalaceLobby_EventScript_24DB94
- case 127, BattleFrontier_BattlePalaceLobby_EventScript_24DB94
+ case MULTI_B_PRESSED, BattleFrontier_BattlePalaceLobby_EventScript_24DB94
BattleFrontier_BattlePalaceLobby_EventScript_24D9E6:: @ 824D9E6
message BattleFrontier_BattlePalaceLobby_Text_24E119
waitmessage
- multichoice 17, 6, 24, 0
+ multichoice 17, 6, MULTI_LEVEL_MODE, 0
switch VAR_RESULT
case 2, BattleFrontier_BattlePalaceLobby_EventScript_24DB94
- case 127, BattleFrontier_BattlePalaceLobby_EventScript_24DB94
+ case MULTI_B_PRESSED, BattleFrontier_BattlePalaceLobby_EventScript_24DB94
setvar VAR_0x8004, 15
special CallFrontierUtilFunc
compare VAR_0x8004, 1
@@ -406,7 +406,7 @@ BattleFrontier_BattlePalaceLobby_EventScript_24DCA6:: @ 824DCA6
BattleFrontier_BattlePalaceLobby_EventScript_24DCB5:: @ 824DCB5
message BattleFrontier_BattlePalaceLobby_Text_24EF88
waitmessage
- multichoice 16, 0, 100, 0
+ multichoice 16, 0, MULTI_BATTLE_PALACE_RULES, 0
switch VAR_RESULT
case 0, BattleFrontier_BattlePalaceLobby_EventScript_24DD13
case 1, BattleFrontier_BattlePalaceLobby_EventScript_24DD21
@@ -414,7 +414,7 @@ BattleFrontier_BattlePalaceLobby_EventScript_24DCB5:: @ 824DCB5
case 3, BattleFrontier_BattlePalaceLobby_EventScript_24DD3D
case 4, BattleFrontier_BattlePalaceLobby_EventScript_24DD4B
case 5, BattleFrontier_BattlePalaceLobby_EventScript_24DD59
- case 127, BattleFrontier_BattlePalaceLobby_EventScript_24DD59
+ case MULTI_B_PRESSED, BattleFrontier_BattlePalaceLobby_EventScript_24DD59
end
BattleFrontier_BattlePalaceLobby_EventScript_24DD13:: @ 824DD13
diff --git a/data/maps/BattleFrontier_BattlePikeCorridor/scripts.inc b/data/maps/BattleFrontier_BattlePikeCorridor/scripts.inc
index c7421c2c8..20e14b72b 100644
--- a/data/maps/BattleFrontier_BattlePikeCorridor/scripts.inc
+++ b/data/maps/BattleFrontier_BattlePikeCorridor/scripts.inc
@@ -42,7 +42,7 @@ BattleFrontier_BattlePikeCorridor_MapScript2_25C7F7: @ 825C7F7
BattleFrontier_BattlePikeCorridor_EventScript_25C801:: @ 825C801
setvar VAR_TEMP_1, 1
- turnobject EVENT_OBJ_ID_PLAYER, 2
+ turnobject EVENT_OBJ_ID_PLAYER, DIR_NORTH
end
BattleFrontier_BattlePikeCorridor_Movement_25C80B: @ 825C80B
diff --git a/data/maps/BattleFrontier_BattlePikeLobby/scripts.inc b/data/maps/BattleFrontier_BattlePikeLobby/scripts.inc
index 51d6023c8..05cdfa8a3 100644
--- a/data/maps/BattleFrontier_BattlePikeLobby/scripts.inc
+++ b/data/maps/BattleFrontier_BattlePikeLobby/scripts.inc
@@ -16,7 +16,7 @@ BattleFrontier_BattlePikeLobby_MapScript2_25B6F3: @ 825B6F3
BattleFrontier_BattlePikeLobby_EventScript_25B6FD:: @ 825B6FD
setvar VAR_TEMP_1, 1
- turnobject EVENT_OBJ_ID_PLAYER, 2
+ turnobject EVENT_OBJ_ID_PLAYER, DIR_NORTH
end
BattleFrontier_BattlePikeLobby_EventScript_25B707:: @ 825B707
@@ -133,20 +133,20 @@ BattleFrontier_BattlePikeLobby_EventScript_25B868:: @ 825B868
BattleFrontier_BattlePikeLobby_EventScript_25B87F:: @ 825B87F
message BattleFrontier_BattlePikeLobby_Text_25BBC1
waitmessage
- multichoice 17, 6, 23, 0
+ multichoice 17, 6, MULTI_CHALLENGEINFO, 0
switch VAR_RESULT
case 0, BattleFrontier_BattlePikeLobby_EventScript_25B8BB
case 1, BattleFrontier_BattlePikeLobby_EventScript_25BA1A
case 2, BattleFrontier_BattlePikeLobby_EventScript_25BA76
- case 127, BattleFrontier_BattlePikeLobby_EventScript_25BA76
+ case MULTI_B_PRESSED, BattleFrontier_BattlePikeLobby_EventScript_25BA76
BattleFrontier_BattlePikeLobby_EventScript_25B8BB:: @ 825B8BB
message BattleFrontier_BattlePikeLobby_Text_25BE35
waitmessage
- multichoice 17, 6, 24, 0
+ multichoice 17, 6, MULTI_LEVEL_MODE, 0
switch VAR_RESULT
case 2, BattleFrontier_BattlePikeLobby_EventScript_25BA76
- case 127, BattleFrontier_BattlePikeLobby_EventScript_25BA76
+ case MULTI_B_PRESSED, BattleFrontier_BattlePikeLobby_EventScript_25BA76
setvar VAR_0x8004, 15
special CallFrontierUtilFunc
compare VAR_0x8004, 1
@@ -297,13 +297,13 @@ BattleFrontier_BattlePikeLobby_EventScript_25BAC6:: @ 825BAC6
BattleFrontier_BattlePikeLobby_EventScript_25BAD5:: @ 825BAD5
message BattleFrontier_BattlePikeLobby_Text_25C621
waitmessage
- multichoice 16, 4, 102, 0
+ multichoice 16, 4, MULTI_BATTLE_PIKE_RULES, 0
switch VAR_RESULT
case 0, BattleFrontier_BattlePikeLobby_EventScript_25BB1D
case 1, BattleFrontier_BattlePikeLobby_EventScript_25BB2B
case 2, BattleFrontier_BattlePikeLobby_EventScript_25BB39
case 3, BattleFrontier_BattlePikeLobby_EventScript_25BB47
- case 127, BattleFrontier_BattlePikeLobby_EventScript_25BB47
+ case MULTI_B_PRESSED, BattleFrontier_BattlePikeLobby_EventScript_25BB47
end
BattleFrontier_BattlePikeLobby_EventScript_25BB1D:: @ 825BB1D
diff --git a/data/maps/BattleFrontier_BattlePikeRandomRoom2/scripts.inc b/data/maps/BattleFrontier_BattlePikeRandomRoom2/scripts.inc
index 5d438d8bd..b12ff0d6e 100644
--- a/data/maps/BattleFrontier_BattlePikeRandomRoom2/scripts.inc
+++ b/data/maps/BattleFrontier_BattlePikeRandomRoom2/scripts.inc
@@ -34,7 +34,7 @@ BattleFrontier_BattlePikeRandomRoom2_MapScript2_25E3DE: @ 825E3DE
BattleFrontier_BattlePikeRandomRoom2_EventScript_25E3E8:: @ 825E3E8
setvar VAR_TEMP_4, 1
- turnobject EVENT_OBJ_ID_PLAYER, 2
+ turnobject EVENT_OBJ_ID_PLAYER, DIR_NORTH
end
BattleFrontier_BattlePikeRandomRoom2_Text_25E3F2: @ 825E3F2
diff --git a/data/maps/BattleFrontier_BattlePikeRandomRoom3/scripts.inc b/data/maps/BattleFrontier_BattlePikeRandomRoom3/scripts.inc
index 9f2dfec16..9a4448226 100644
--- a/data/maps/BattleFrontier_BattlePikeRandomRoom3/scripts.inc
+++ b/data/maps/BattleFrontier_BattlePikeRandomRoom3/scripts.inc
@@ -30,7 +30,7 @@ BattleFrontier_BattlePikeRandomRoom3_MapScript2_25E466: @ 825E466
BattleFrontier_BattlePikeRandomRoom3_EventScript_25E470:: @ 825E470
setvar VAR_TEMP_4, 1
- turnobject EVENT_OBJ_ID_PLAYER, 2
+ turnobject EVENT_OBJ_ID_PLAYER, DIR_NORTH
end
BattleFrontier_BattlePikeRandomRoom3_MapScript1_25E47A: @ 825E47A
diff --git a/data/maps/BattleFrontier_BattlePikeThreePathRoom/scripts.inc b/data/maps/BattleFrontier_BattlePikeThreePathRoom/scripts.inc
index 54f11f071..927222e8c 100644
--- a/data/maps/BattleFrontier_BattlePikeThreePathRoom/scripts.inc
+++ b/data/maps/BattleFrontier_BattlePikeThreePathRoom/scripts.inc
@@ -18,7 +18,7 @@ BattleFrontier_BattlePikeThreePathRoom_MapScript2_25C87D: @ 825C87D
BattleFrontier_BattlePikeThreePathRoom_EventScript_25C887:: @ 825C887
setvar VAR_TEMP_4, 1
- turnobject EVENT_OBJ_ID_PLAYER, 2
+ turnobject EVENT_OBJ_ID_PLAYER, DIR_NORTH
end
BattleFrontier_BattlePikeThreePathRoom_EventScript_25C891:: @ 825C891
@@ -159,7 +159,7 @@ BattleFrontier_BattlePikeThreePathRoom_EventScript_25CA2A:: @ 825CA2A
BattleFrontier_BattlePikeThreePathRoom_EventScript_25CA5A:: @ 825CA5A
message BattleFrontier_BattlePikeThreePathRoom_Text_25CD3C
waitmessage
- multichoicedefault 20, 8, 94, 1, 0
+ multichoicedefault 20, 8, MULTI_YESNO, 1, 0
switch VAR_RESULT
case 0, BattleFrontier_BattlePikeThreePathRoom_EventScript_2C4222
release
diff --git a/data/maps/BattleFrontier_BattlePointExchangeServiceCorner/scripts.inc b/data/maps/BattleFrontier_BattlePointExchangeServiceCorner/scripts.inc
index 4fa8d142a..2011c42df 100644
--- a/data/maps/BattleFrontier_BattlePointExchangeServiceCorner/scripts.inc
+++ b/data/maps/BattleFrontier_BattlePointExchangeServiceCorner/scripts.inc
@@ -3,17 +3,17 @@ BattleFrontier_BattlePointExchangeServiceCorner_MapScripts:: @ 825F070
BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F071:: @ 825F071
msgbox BattleFrontier_BattlePointExchangeServiceCorner_Text_25F7FA, MSGBOX_DEFAULT
- special sub_813A958
+ special ShowBattlePointsWindow
return
BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F07D:: @ 825F07D
msgbox BattleFrontier_BattlePointExchangeServiceCorner_Text_25FF12, MSGBOX_DEFAULT
- special sub_813A988
+ special CloseBattlePointsWindow
release
end
BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F08A:: @ 825F08A
- specialvar VAR_TEMP_1, sub_813AA04
+ specialvar VAR_TEMP_1, GetFrontierBattlePoints
compare VAR_TEMP_1, VAR_0x8008
goto_if_ge BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F0C9
msgbox BattleFrontier_BattlePointExchangeServiceCorner_Text_25FE86, MSGBOX_DEFAULT
@@ -39,9 +39,9 @@ BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F0E5:: @ 825F0E5
compare VAR_RESULT, 0
goto_if_eq BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F11D
copyvar VAR_0x8004, VAR_0x8008
- special sub_813A9A4
+ special TakeFrontierBattlePoints
givedecoration VAR_0x8009
- special sub_813A8FC
+ special UpdateBattlePointsWindow
playse SE_REGI
msgbox BattleFrontier_BattlePointExchangeServiceCorner_Text_25FE45, MSGBOX_DEFAULT
compare VAR_TEMP_2, 0
@@ -51,7 +51,7 @@ BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F0E5:: @ 825F0E5
BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F11D:: @ 825F11D
msgbox BattleFrontier_BattlePointExchangeServiceCorner_Text_25FEB9, MSGBOX_DEFAULT
- special sub_813A988
+ special CloseBattlePointsWindow
release
end
@@ -60,9 +60,9 @@ BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F12A:: @ 825F12A
compare VAR_RESULT, 0
goto_if_eq BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F166
copyvar VAR_0x8004, VAR_0x8008
- special sub_813A9A4
+ special TakeFrontierBattlePoints
giveitem VAR_0x8009, 1
- special sub_813A8FC
+ special UpdateBattlePointsWindow
playse SE_REGI
msgbox BattleFrontier_BattlePointExchangeServiceCorner_Text_25FE72, MSGBOX_DEFAULT
compare VAR_TEMP_2, 2
@@ -72,7 +72,7 @@ BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F12A:: @ 825F12A
BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F166:: @ 825F166
msgbox BattleFrontier_BattlePointExchangeServiceCorner_Text_25FEE3, MSGBOX_DEFAULT
- special sub_813A988
+ special CloseBattlePointsWindow
release
end
@@ -85,11 +85,11 @@ BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F173:: @ 825F173
end
BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F185:: @ 825F185
- setvar VAR_0x8004, 3
- special sub_813AA18
- special sub_813A128
+ setvar VAR_0x8004, SCROLL_MULTI_BF_EXCHANGE_CORNER_DECOR_VENDOR_1
+ special ShowFrontierExchangeCornerItemIconWindow
+ special ShowScrollableMultichoice
waitstate
- special sub_813AA44
+ special CloseFrontierExchangeCornerItemIconWindow
switch VAR_RESULT
case 0, BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F21E
case 1, BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F241
@@ -102,7 +102,7 @@ BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F185:: @ 825F185
case 8, BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F336
case 9, BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F359
case 10, BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F07D
- case 127, BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F07D
+ case MULTI_B_PRESSED, BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F07D
end
BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F21E:: @ 825F21E
@@ -110,7 +110,7 @@ BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F21E:: @ 825F21E
compare VAR_RESULT, 0
goto_if_eq BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F185
setvar VAR_0x8008, 16
- setvar VAR_0x8009, 75
+ setvar VAR_0x8009, DECOR_KISS_POSTER
goto BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F08A
end
@@ -119,7 +119,7 @@ BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F241:: @ 825F241
compare VAR_RESULT, 0
goto_if_eq BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F185
setvar VAR_0x8008, 32
- setvar VAR_0x8009, 103
+ setvar VAR_0x8009, DECOR_KISS_CUSHION
goto BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F08A
end
@@ -128,7 +128,7 @@ BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F264:: @ 825F264
compare VAR_RESULT, 0
goto_if_eq BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F185
setvar VAR_0x8008, 32
- setvar VAR_0x8009, 87
+ setvar VAR_0x8009, DECOR_SMOOCHUM_DOLL
goto BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F08A
end
@@ -137,7 +137,7 @@ BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F287:: @ 825F287
compare VAR_RESULT, 0
goto_if_eq BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F185
setvar VAR_0x8008, 48
- setvar VAR_0x8009, 79
+ setvar VAR_0x8009, DECOR_TOGEPI_DOLL
goto BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F08A
end
@@ -146,7 +146,7 @@ BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F2AA:: @ 825F2AA
compare VAR_RESULT, 0
goto_if_eq BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F185
setvar VAR_0x8008, 48
- setvar VAR_0x8009, 84
+ setvar VAR_0x8009, DECOR_MEOWTH_DOLL
goto BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F08A
end
@@ -155,7 +155,7 @@ BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F2CD:: @ 825F2CD
compare VAR_RESULT, 0
goto_if_eq BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F185
setvar VAR_0x8008, 48
- setvar VAR_0x8009, 85
+ setvar VAR_0x8009, DECOR_CLEFAIRY_DOLL
goto BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F08A
end
@@ -164,7 +164,7 @@ BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F2F0:: @ 825F2F0
compare VAR_RESULT, 0
goto_if_eq BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F185
setvar VAR_0x8008, 48
- setvar VAR_0x8009, 86
+ setvar VAR_0x8009, DECOR_DITTO_DOLL
goto BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F08A
end
@@ -173,7 +173,7 @@ BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F313:: @ 825F313
compare VAR_RESULT, 0
goto_if_eq BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F185
setvar VAR_0x8008, 80
- setvar VAR_0x8009, 80
+ setvar VAR_0x8009, DECOR_CYNDAQUIL_DOLL
goto BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F08A
end
@@ -182,7 +182,7 @@ BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F336:: @ 825F336
compare VAR_RESULT, 0
goto_if_eq BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F185
setvar VAR_0x8008, 80
- setvar VAR_0x8009, 81
+ setvar VAR_0x8009, DECOR_CHIKORITA_DOLL
goto BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F08A
end
@@ -191,7 +191,7 @@ BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F359:: @ 825F359
compare VAR_RESULT, 0
goto_if_eq BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F185
setvar VAR_0x8008, 80
- setvar VAR_0x8009, 82
+ setvar VAR_0x8009, DECOR_TOTODILE_DOLL
goto BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F08A
end
@@ -204,11 +204,11 @@ BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F37C:: @ 825F37C
end
BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F38E:: @ 825F38E
- setvar VAR_0x8004, 4
- special sub_813AA18
- special sub_813A128
+ setvar VAR_0x8004, SCROLL_MULTI_BF_EXCHANGE_CORNER_DECOR_VENDOR_2
+ special ShowFrontierExchangeCornerItemIconWindow
+ special ShowScrollableMultichoice
waitstate
- special sub_813AA44
+ special CloseFrontierExchangeCornerItemIconWindow
switch VAR_RESULT
case 0, BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F3F0
case 1, BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F413
@@ -216,7 +216,7 @@ BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F38E:: @ 825F38E
case 3, BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F459
case 4, BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F47C
case 5, BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F07D
- case 127, BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F07D
+ case MULTI_B_PRESSED, BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F07D
end
BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F3F0:: @ 825F3F0
@@ -224,7 +224,7 @@ BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F3F0:: @ 825F3F0
compare VAR_RESULT, 0
goto_if_eq BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F38E
setvar VAR_0x8008, 128
- setvar VAR_0x8009, 113
+ setvar VAR_0x8009, DECOR_LAPRAS_DOLL
goto BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F08A
end
@@ -233,7 +233,7 @@ BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F413:: @ 825F413
compare VAR_RESULT, 0
goto_if_eq BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F38E
setvar VAR_0x8008, 128
- setvar VAR_0x8009, 111
+ setvar VAR_0x8009, DECOR_SNORLAX_DOLL
goto BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F08A
end
@@ -242,7 +242,7 @@ BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F436:: @ 825F436
compare VAR_RESULT, 0
goto_if_eq BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F38E
setvar VAR_0x8008, 256
- setvar VAR_0x8009, 114
+ setvar VAR_0x8009, DECOR_VENUSAUR_DOLL
goto BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F08A
end
@@ -251,7 +251,7 @@ BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F459:: @ 825F459
compare VAR_RESULT, 0
goto_if_eq BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F38E
setvar VAR_0x8008, 256
- setvar VAR_0x8009, 115
+ setvar VAR_0x8009, DECOR_CHARIZARD_DOLL
goto BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F08A
end
@@ -260,7 +260,7 @@ BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F47C:: @ 825F47C
compare VAR_RESULT, 0
goto_if_eq BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F38E
setvar VAR_0x8008, 256
- setvar VAR_0x8009, 116
+ setvar VAR_0x8009, DECOR_BLASTOISE_DOLL
goto BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F08A
end
@@ -273,11 +273,11 @@ BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F49F:: @ 825F49F
end
BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F4B1:: @ 825F4B1
- setvar VAR_0x8004, 5
- special sub_813AA18
- special sub_813A128
+ setvar VAR_0x8004, SCROLL_MULTI_BF_EXCHANGE_CORNER_VITAMIN_VENDOR
+ special ShowFrontierExchangeCornerItemIconWindow
+ special ShowScrollableMultichoice
waitstate
- special sub_813AA44
+ special CloseFrontierExchangeCornerItemIconWindow
switch VAR_RESULT
case 0, BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F51E
case 1, BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F541
@@ -286,7 +286,7 @@ BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F4B1:: @ 825F4B1
case 4, BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F5AA
case 5, BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F5CD
case 6, BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F07D
- case 127, BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F07D
+ case MULTI_B_PRESSED, BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F07D
end
BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F51E:: @ 825F51E
@@ -294,7 +294,7 @@ BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F51E:: @ 825F51E
compare VAR_RESULT, 0
goto_if_eq BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F4B1
setvar VAR_0x8008, 1
- setvar VAR_0x8009, 64
+ setvar VAR_0x8009, ITEM_PROTEIN
goto BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F08A
end
@@ -303,7 +303,7 @@ BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F541:: @ 825F541
compare VAR_RESULT, 0
goto_if_eq BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F4B1
setvar VAR_0x8008, 1
- setvar VAR_0x8009, 67
+ setvar VAR_0x8009, ITEM_CALCIUM
goto BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F08A
end
@@ -312,7 +312,7 @@ BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F564:: @ 825F564
compare VAR_RESULT, 0
goto_if_eq BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F4B1
setvar VAR_0x8008, 1
- setvar VAR_0x8009, 65
+ setvar VAR_0x8009, ITEM_IRON
goto BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F08A
end
@@ -321,7 +321,7 @@ BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F587:: @ 825F587
compare VAR_RESULT, 0
goto_if_eq BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F4B1
setvar VAR_0x8008, 1
- setvar VAR_0x8009, 70
+ setvar VAR_0x8009, ITEM_ZINC
goto BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F08A
end
@@ -330,7 +330,7 @@ BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F5AA:: @ 825F5AA
compare VAR_RESULT, 0
goto_if_eq BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F4B1
setvar VAR_0x8008, 1
- setvar VAR_0x8009, 66
+ setvar VAR_0x8009, ITEM_CARBOS
goto BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F08A
end
@@ -339,7 +339,7 @@ BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F5CD:: @ 825F5CD
compare VAR_RESULT, 0
goto_if_eq BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F4B1
setvar VAR_0x8008, 1
- setvar VAR_0x8009, 63
+ setvar VAR_0x8009, ITEM_HP_UP
goto BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F08A
end
@@ -352,11 +352,11 @@ BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F5F0:: @ 825F5F0
end
BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F602:: @ 825F602
- setvar VAR_0x8004, 6
- special sub_813AA18
- special sub_813A128
+ setvar VAR_0x8004, SCROLL_MULTI_BF_EXCHANGE_CORNER_HOLD_ITEM_VENDOR
+ special ShowFrontierExchangeCornerItemIconWindow
+ special ShowScrollableMultichoice
waitstate
- special sub_813AA44
+ special CloseFrontierExchangeCornerItemIconWindow
switch VAR_RESULT
case 0, BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F690
case 1, BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F6B3
@@ -368,7 +368,7 @@ BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F602:: @ 825F602
case 7, BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F785
case 8, BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F7A8
case 9, BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F07D
- case 127, BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F07D
+ case MULTI_B_PRESSED, BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F07D
end
BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F690:: @ 825F690
@@ -376,7 +376,7 @@ BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F690:: @ 825F690
compare VAR_RESULT, 0
goto_if_eq BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F602
setvar VAR_0x8008, 48
- setvar VAR_0x8009, 200
+ setvar VAR_0x8009, ITEM_LEFTOVERS
goto BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F08A
end
@@ -385,7 +385,7 @@ BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F6B3:: @ 825F6B3
compare VAR_RESULT, 0
goto_if_eq BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F602
setvar VAR_0x8008, 48
- setvar VAR_0x8009, 180
+ setvar VAR_0x8009, ITEM_WHITE_HERB
goto BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F08A
end
@@ -394,7 +394,7 @@ BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F6D6:: @ 825F6D6
compare VAR_RESULT, 0
goto_if_eq BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F602
setvar VAR_0x8008, 48
- setvar VAR_0x8009, 183
+ setvar VAR_0x8009, ITEM_QUICK_CLAW
goto BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F08A
end
@@ -403,7 +403,7 @@ BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F6F9:: @ 825F6F9
compare VAR_RESULT, 0
goto_if_eq BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F602
setvar VAR_0x8008, 48
- setvar VAR_0x8009, 185
+ setvar VAR_0x8009, ITEM_MENTAL_HERB
goto BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F08A
end
@@ -412,7 +412,7 @@ BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F71C:: @ 825F71C
compare VAR_RESULT, 0
goto_if_eq BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F602
setvar VAR_0x8008, 64
- setvar VAR_0x8009, 179
+ setvar VAR_0x8009, ITEM_BRIGHT_POWDER
goto BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F08A
end
@@ -421,7 +421,7 @@ BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F73F:: @ 825F73F
compare VAR_RESULT, 0
goto_if_eq BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F602
setvar VAR_0x8008, 64
- setvar VAR_0x8009, 186
+ setvar VAR_0x8009, ITEM_CHOICE_BAND
goto BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F08A
end
@@ -430,7 +430,7 @@ BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F762:: @ 825F762
compare VAR_RESULT, 0
goto_if_eq BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F602
setvar VAR_0x8008, 64
- setvar VAR_0x8009, 187
+ setvar VAR_0x8009, ITEM_KINGS_ROCK
goto BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F08A
end
@@ -439,7 +439,7 @@ BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F785:: @ 825F785
compare VAR_RESULT, 0
goto_if_eq BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F602
setvar VAR_0x8008, 64
- setvar VAR_0x8009, 196
+ setvar VAR_0x8009, ITEM_FOCUS_BAND
goto BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F08A
end
@@ -448,7 +448,7 @@ BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F7A8:: @ 825F7A8
compare VAR_RESULT, 0
goto_if_eq BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F602
setvar VAR_0x8008, 64
- setvar VAR_0x8009, 198
+ setvar VAR_0x8009, ITEM_SCOPE_LENS
goto BattleFrontier_BattlePointExchangeServiceCorner_EventScript_25F08A
end
diff --git a/data/maps/BattleFrontier_BattlePyramidLobby/scripts.inc b/data/maps/BattleFrontier_BattlePyramidLobby/scripts.inc
index 667c4847e..b2f7d4579 100644
--- a/data/maps/BattleFrontier_BattlePyramidLobby/scripts.inc
+++ b/data/maps/BattleFrontier_BattlePyramidLobby/scripts.inc
@@ -9,7 +9,7 @@ BattleFrontier_BattlePyramidLobby_MapScript2_250721: @ 8250721
BattleFrontier_BattlePyramidLobby_EventScript_25072B: @ 825072B
setvar VAR_TEMP_1, 1
- turnobject EVENT_OBJ_ID_PLAYER, 2
+ turnobject EVENT_OBJ_ID_PLAYER, DIR_NORTH
end
BattleFrontier_BattlePyramidLobby_MapScript2_250735: @ 8250735
@@ -137,20 +137,20 @@ BattleFrontier_BattlePyramidLobby_EventScript_2508B1:: @ 82508B1
BattleFrontier_BattlePyramidLobby_EventScript_2508C8:: @ 82508C8
message BattleFrontier_BattlePyramidLobby_Text_250FA7
waitmessage
- multichoice 17, 6, 23, 0
+ multichoice 17, 6, MULTI_CHALLENGEINFO, 0
switch VAR_RESULT
case 0, BattleFrontier_BattlePyramidLobby_EventScript_250904
case 1, BattleFrontier_BattlePyramidLobby_EventScript_250A68
case 2, BattleFrontier_BattlePyramidLobby_EventScript_250AC4
- case 127, BattleFrontier_BattlePyramidLobby_EventScript_250AC4
+ case MULTI_B_PRESSED, BattleFrontier_BattlePyramidLobby_EventScript_250AC4
BattleFrontier_BattlePyramidLobby_EventScript_250904:: @ 8250904
message BattleFrontier_BattlePyramidLobby_Text_251248
waitmessage
- multichoice 17, 6, 24, 0
+ multichoice 17, 6, MULTI_LEVEL_MODE, 0
switch VAR_RESULT
case 2, BattleFrontier_BattlePyramidLobby_EventScript_250AC4
- case 127, BattleFrontier_BattlePyramidLobby_EventScript_250AC4
+ case MULTI_B_PRESSED, BattleFrontier_BattlePyramidLobby_EventScript_250AC4
setvar VAR_0x8004, 15
special CallFrontierUtilFunc
compare VAR_0x8004, 1
@@ -269,12 +269,12 @@ BattleFrontier_BattlePyramidLobby_EventScript_250ACE:: @ 8250ACE
end
BattleFrontier_BattlePyramidLobby_EventScript_250AF0:: @ 8250AF0
- multichoice 17, 6, 24, 0
+ multichoice 17, 6, MULTI_LEVEL_MODE, 0
switch VAR_RESULT
case 0, BattleFrontier_BattlePyramidLobby_EventScript_250B28
case 1, BattleFrontier_BattlePyramidLobby_EventScript_250B66
case 2, BattleFrontier_BattlePyramidLobby_EventScript_250B27
- case 127, BattleFrontier_BattlePyramidLobby_EventScript_250B27
+ case MULTI_B_PRESSED, BattleFrontier_BattlePyramidLobby_EventScript_250B27
return
BattleFrontier_BattlePyramidLobby_EventScript_250B27:: @ 8250B27
@@ -318,7 +318,7 @@ BattleFrontier_BattlePyramidLobby_EventScript_250B91:: @ 8250B91
BattleFrontier_BattlePyramidLobby_EventScript_250BA4:: @ 8250BA4
copyvar VAR_0x8004, VAR_RESULT
- special sub_813B968
+ special GetBattlePyramidHint
switch VAR_RESULT
case 0, BattleFrontier_BattlePyramidLobby_EventScript_250C8E
case 1, BattleFrontier_BattlePyramidLobby_EventScript_250C97
@@ -508,12 +508,12 @@ BattleFrontier_BattlePyramidLobby_EventScript_250E00:: @ 8250E00
return
BattleFrontier_BattlePyramidLobby_EventScript_250E09:: @ 8250E09
- multichoice 17, 6, 83, 0
+ multichoice 17, 6, MULTI_FRONTIER_ITEM_CHOOSE, 0
switch VAR_RESULT
case 0, BattleFrontier_BattlePyramidLobby_EventScript_250E40
case 1, BattleFrontier_BattlePyramidLobby_EventScript_250E50
case 2, BattleFrontier_BattlePyramidLobby_EventScript_250E60
- case 127, BattleFrontier_BattlePyramidLobby_EventScript_250E60
+ case MULTI_B_PRESSED, BattleFrontier_BattlePyramidLobby_EventScript_250E60
end
BattleFrontier_BattlePyramidLobby_EventScript_250E40:: @ 8250E40
@@ -562,14 +562,14 @@ BattleFrontier_BattlePyramidLobby_EventScript_250E95:: @ 8250E95
BattleFrontier_BattlePyramidLobby_EventScript_250EA4:: @ 8250EA4
message BattleFrontier_BattlePyramidLobby_Text_2526D9
waitmessage
- multichoice 15, 2, 101, 0
+ multichoice 15, 2, MULTI_BATTLE_PYRAMID_RULES, 0
switch VAR_RESULT
case 0, BattleFrontier_BattlePyramidLobby_EventScript_250EF7
case 1, BattleFrontier_BattlePyramidLobby_EventScript_250F05
case 2, BattleFrontier_BattlePyramidLobby_EventScript_250F13
case 3, BattleFrontier_BattlePyramidLobby_EventScript_250F21
case 4, BattleFrontier_BattlePyramidLobby_EventScript_250F2F
- case 127, BattleFrontier_BattlePyramidLobby_EventScript_250F2F
+ case MULTI_B_PRESSED, BattleFrontier_BattlePyramidLobby_EventScript_250F2F
end
BattleFrontier_BattlePyramidLobby_EventScript_250EF7:: @ 8250EF7
diff --git a/data/maps/BattleFrontier_BattlePyramidTop/scripts.inc b/data/maps/BattleFrontier_BattlePyramidTop/scripts.inc
index 39bb39f49..211ab0c87 100644
--- a/data/maps/BattleFrontier_BattlePyramidTop/scripts.inc
+++ b/data/maps/BattleFrontier_BattlePyramidTop/scripts.inc
@@ -19,7 +19,7 @@ BattleFrontier_BattlePyramidTop_MapScript2_2550CE: @ 82550CE
BattleFrontier_BattlePyramidTop_EventScript_2550D8:: @ 82550D8
setvar VAR_TEMP_1, 1
- turnobject EVENT_OBJ_ID_PLAYER, 2
+ turnobject EVENT_OBJ_ID_PLAYER, DIR_NORTH
compare VAR_TEMP_C, 0
goto_if_ne BattleFrontier_BattlePyramidTop_EventScript_2550F3
setobjectxyperm 2, 0, 0
diff --git a/data/maps/BattleFrontier_BattleTowerBattleRoom/scripts.inc b/data/maps/BattleFrontier_BattleTowerBattleRoom/scripts.inc
index 6e3f0c8fa..ce171e3c0 100644
--- a/data/maps/BattleFrontier_BattleTowerBattleRoom/scripts.inc
+++ b/data/maps/BattleFrontier_BattleTowerBattleRoom/scripts.inc
@@ -99,30 +99,30 @@ BattleFrontier_BattleTowerBattleRoom_EventScript_241C8F:: @ 8241C8F
call BattleFrontier_BattleTowerBattleRoom_EventScript_23E8E0
compare VAR_RESULT, 1
goto_if_eq BattleFrontier_BattleTowerBattleRoom_EventScript_241D0A
- multichoice 19, 4, 103, 1
+ multichoice 19, 4, MULTI_GO_ON_RECORD_REST_RETIRE, 1
switch VAR_RESULT
case 0, BattleFrontier_BattleTowerBattleRoom_EventScript_241DDC
case 1, BattleFrontier_BattleTowerBattleRoom_EventScript_241D40
case 2, BattleFrontier_BattleTowerBattleRoom_EventScript_241D7C
case 3, BattleFrontier_BattleTowerBattleRoom_EventScript_241DAA
- case 127, BattleFrontier_BattleTowerBattleRoom_EventScript_241C8F
+ case MULTI_B_PRESSED, BattleFrontier_BattleTowerBattleRoom_EventScript_241C8F
BattleFrontier_BattleTowerBattleRoom_EventScript_241D0A:: @ 8241D0A
- multichoice 20, 6, 104, 1
+ multichoice 20, 6, MULTI_GO_ON_REST_RETIRE, 1
switch VAR_RESULT
case 0, BattleFrontier_BattleTowerBattleRoom_EventScript_241DDC
case 1, BattleFrontier_BattleTowerBattleRoom_EventScript_241D7C
case 2, BattleFrontier_BattleTowerBattleRoom_EventScript_241DAA
- case 127, BattleFrontier_BattleTowerBattleRoom_EventScript_241C8F
+ case MULTI_B_PRESSED, BattleFrontier_BattleTowerBattleRoom_EventScript_241C8F
BattleFrontier_BattleTowerBattleRoom_EventScript_241D40:: @ 8241D40
message BattleFrontier_BattleTowerBattleRoom_Text_2423A3
waitmessage
- multichoicedefault 20, 8, 94, 1, 0
+ multichoicedefault 20, 8, MULTI_YESNO, 1, 0
switch VAR_RESULT
case 1, BattleFrontier_BattleTowerBattleRoom_EventScript_241C8F
case 0, BattleFrontier_BattleTowerBattleRoom_EventScript_241D72
- case 127, BattleFrontier_BattleTowerBattleRoom_EventScript_241C8F
+ case MULTI_B_PRESSED, BattleFrontier_BattleTowerBattleRoom_EventScript_241C8F
BattleFrontier_BattleTowerBattleRoom_EventScript_241D72:: @ 8241D72
call BattleFrontier_BattleTowerBattleRoom_EventScript_23E8B4
@@ -138,11 +138,11 @@ BattleFrontier_BattleTowerBattleRoom_EventScript_241D7C:: @ 8241D7C
BattleFrontier_BattleTowerBattleRoom_EventScript_241DAA:: @ 8241DAA
message BattleFrontier_BattleTowerBattleRoom_Text_24244C
waitmessage
- multichoicedefault 20, 8, 94, 1, 0
+ multichoicedefault 20, 8, MULTI_YESNO, 1, 0
switch VAR_RESULT
case 1, BattleFrontier_BattleTowerBattleRoom_EventScript_241C8F
case 0, BattleFrontier_BattleTowerBattleRoom_EventScript_24220E
- case 127, BattleFrontier_BattleTowerBattleRoom_EventScript_241C8F
+ case MULTI_B_PRESSED, BattleFrontier_BattleTowerBattleRoom_EventScript_241C8F
BattleFrontier_BattleTowerBattleRoom_EventScript_241DDC:: @ 8241DDC
closemessage
@@ -256,21 +256,21 @@ BattleFrontier_BattleTowerBattleRoom_EventScript_241F22:: @ 8241F22
call BattleFrontier_BattleTowerBattleRoom_EventScript_23E8E0
compare VAR_RESULT, 1
goto_if_eq BattleFrontier_BattleTowerBattleRoom_EventScript_241F79
- multichoice 19, 4, 103, 1
+ multichoice 19, 4, MULTI_GO_ON_RECORD_REST_RETIRE, 1
switch VAR_RESULT
case 0, BattleFrontier_BattleTowerBattleRoom_EventScript_241FAF
case 1, BattleFrontier_BattleTowerBattleRoom_EventScript_241D40
case 2, BattleFrontier_BattleTowerBattleRoom_EventScript_241D7C
case 3, BattleFrontier_BattleTowerBattleRoom_EventScript_241DAA
- case 127, BattleFrontier_BattleTowerBattleRoom_EventScript_241F22
+ case MULTI_B_PRESSED, BattleFrontier_BattleTowerBattleRoom_EventScript_241F22
BattleFrontier_BattleTowerBattleRoom_EventScript_241F79:: @ 8241F79
- multichoice 20, 6, 104, 1
+ multichoice 20, 6, MULTI_GO_ON_REST_RETIRE, 1
switch VAR_RESULT
case 0, BattleFrontier_BattleTowerBattleRoom_EventScript_241FAF
case 1, BattleFrontier_BattleTowerBattleRoom_EventScript_241D7C
case 2, BattleFrontier_BattleTowerBattleRoom_EventScript_241DAA
- case 127, BattleFrontier_BattleTowerBattleRoom_EventScript_241F22
+ case MULTI_B_PRESSED, BattleFrontier_BattleTowerBattleRoom_EventScript_241F22
BattleFrontier_BattleTowerBattleRoom_EventScript_241FAF:: @ 8241FAF
call BattleFrontier_BattleTowerBattleRoom_EventScript_242170
diff --git a/data/maps/BattleFrontier_BattleTowerBattleRoom2/scripts.inc b/data/maps/BattleFrontier_BattleTowerBattleRoom2/scripts.inc
index 8ebb7ed25..07883c7ca 100644
--- a/data/maps/BattleFrontier_BattleTowerBattleRoom2/scripts.inc
+++ b/data/maps/BattleFrontier_BattleTowerBattleRoom2/scripts.inc
@@ -15,7 +15,7 @@ BattleFrontier_BattleTowerBattleRoom2_EventScript_248F0F:: @ 8248F0F
setvar VAR_0x8004, 14
special sub_8161F74
checkplayergender
- compare VAR_RESULT, 1
+ compare VAR_RESULT, FEMALE
goto_if_eq BattleFrontier_BattleTowerBattleRoom2_EventScript_248F29
setvar VAR_OBJ_GFX_ID_F, EVENT_OBJ_GFX_BRENDAN_NORMAL
return
@@ -25,7 +25,7 @@ BattleFrontier_BattleTowerBattleRoom2_EventScript_248F29:: @ 8248F29
return
BattleFrontier_BattleTowerBattleRoom2_EventScript_248F2F:: @ 8248F2F
- special sub_813A76C
+ special SetBattleTowerLinkPlayerGfx
return
BattleFrontier_BattleTowerBattleRoom2_MapScript2_248F33: @ 8248F33
@@ -173,30 +173,30 @@ BattleFrontier_BattleTowerBattleRoom2_EventScript_249143:: @ 8249143
call BattleFrontier_BattleTowerBattleRoom2_EventScript_23E8E0
compare VAR_RESULT, 1
goto_if_eq BattleFrontier_BattleTowerBattleRoom2_EventScript_2491B1
- multichoice 19, 4, 103, 1
+ multichoice 19, 4, MULTI_GO_ON_RECORD_REST_RETIRE, 1
switch VAR_RESULT
case 0, BattleFrontier_BattleTowerBattleRoom2_EventScript_249283
case 1, BattleFrontier_BattleTowerBattleRoom2_EventScript_2491E7
case 2, BattleFrontier_BattleTowerBattleRoom2_EventScript_249223
case 3, BattleFrontier_BattleTowerBattleRoom2_EventScript_249251
- case 127, BattleFrontier_BattleTowerBattleRoom2_EventScript_249143
+ case MULTI_B_PRESSED, BattleFrontier_BattleTowerBattleRoom2_EventScript_249143
BattleFrontier_BattleTowerBattleRoom2_EventScript_2491B1:: @ 82491B1
- multichoice 20, 6, 104, 1
+ multichoice 20, 6, MULTI_GO_ON_REST_RETIRE, 1
switch VAR_RESULT
case 0, BattleFrontier_BattleTowerBattleRoom2_EventScript_249283
case 1, BattleFrontier_BattleTowerBattleRoom2_EventScript_249223
case 2, BattleFrontier_BattleTowerBattleRoom2_EventScript_249251
- case 127, BattleFrontier_BattleTowerBattleRoom2_EventScript_249143
+ case MULTI_B_PRESSED, BattleFrontier_BattleTowerBattleRoom2_EventScript_249143
BattleFrontier_BattleTowerBattleRoom2_EventScript_2491E7:: @ 82491E7
message BattleFrontier_BattleTowerBattleRoom2_Text_2423A3
waitmessage
- multichoicedefault 20, 8, 94, 1, 0
+ multichoicedefault 20, 8, MULTI_YESNO, 1, 0
switch VAR_RESULT
case 1, BattleFrontier_BattleTowerBattleRoom2_EventScript_249143
case 0, BattleFrontier_BattleTowerBattleRoom2_EventScript_249219
- case 127, BattleFrontier_BattleTowerBattleRoom2_EventScript_249143
+ case MULTI_B_PRESSED, BattleFrontier_BattleTowerBattleRoom2_EventScript_249143
BattleFrontier_BattleTowerBattleRoom2_EventScript_249219:: @ 8249219
call BattleFrontier_BattleTowerBattleRoom2_EventScript_23E8B4
@@ -207,16 +207,16 @@ BattleFrontier_BattleTowerBattleRoom2_EventScript_249223:: @ 8249223
switch VAR_RESULT
case 0, BattleFrontier_BattleTowerBattleRoom2_EventScript_249143
case 1, BattleFrontier_BattleTowerBattleRoom2_EventScript_2492DB
- case 127, BattleFrontier_BattleTowerBattleRoom2_EventScript_249143
+ case MULTI_B_PRESSED, BattleFrontier_BattleTowerBattleRoom2_EventScript_249143
BattleFrontier_BattleTowerBattleRoom2_EventScript_249251:: @ 8249251
message BattleFrontier_BattleTowerBattleRoom2_Text_24244C
waitmessage
- multichoicedefault 20, 8, 94, 1, 0
+ multichoicedefault 20, 8, MULTI_YESNO, 1, 0
switch VAR_RESULT
case 1, BattleFrontier_BattleTowerBattleRoom2_EventScript_249143
case 0, BattleFrontier_BattleTowerBattleRoom2_EventScript_24907E
- case 127, BattleFrontier_BattleTowerBattleRoom2_EventScript_249143
+ case MULTI_B_PRESSED, BattleFrontier_BattleTowerBattleRoom2_EventScript_249143
BattleFrontier_BattleTowerBattleRoom2_EventScript_249283:: @ 8249283
closemessage
@@ -350,20 +350,20 @@ BattleFrontier_BattleTowerBattleRoom2_EventScript_249412:: @ 8249412
BattleFrontier_BattleTowerBattleRoom2_EventScript_249417:: @ 8249417
goto_if_set FLAG_TEMP_2, BattleFrontier_BattleTowerBattleRoom2_EventScript_249457
- multichoice 19, 6, 105, 1
+ multichoice 19, 6, MULTI_GO_ON_RECORD_RETIRE, 1
switch VAR_RESULT
case 0, BattleFrontier_BattleTowerBattleRoom2_EventScript_249483
case 1, BattleFrontier_BattleTowerBattleRoom2_EventScript_2494A8
case 2, BattleFrontier_BattleTowerBattleRoom2_EventScript_2494DD
- case 127, BattleFrontier_BattleTowerBattleRoom2_EventScript_2494DD
+ case MULTI_B_PRESSED, BattleFrontier_BattleTowerBattleRoom2_EventScript_2494DD
end
BattleFrontier_BattleTowerBattleRoom2_EventScript_249457:: @ 8249457
- multichoice 20, 8, 106, 1
+ multichoice 20, 8, MULTI_GO_ON_RETIRE, 1
switch VAR_RESULT
case 0, BattleFrontier_BattleTowerBattleRoom2_EventScript_249483
case 1, BattleFrontier_BattleTowerBattleRoom2_EventScript_2494DD
- case 127, BattleFrontier_BattleTowerBattleRoom2_EventScript_2494DD
+ case MULTI_B_PRESSED, BattleFrontier_BattleTowerBattleRoom2_EventScript_2494DD
end
BattleFrontier_BattleTowerBattleRoom2_EventScript_249483:: @ 8249483
@@ -381,10 +381,10 @@ BattleFrontier_BattleTowerBattleRoom2_EventScript_249483:: @ 8249483
BattleFrontier_BattleTowerBattleRoom2_EventScript_2494A8:: @ 82494A8
message BattleFrontier_BattleTowerBattleRoom2_Text_2423A3
waitmessage
- multichoicedefault 20, 8, 94, 1, 0
+ multichoicedefault 20, 8, MULTI_YESNO, 1, 0
switch VAR_RESULT
case 1, BattleFrontier_BattleTowerBattleRoom2_EventScript_249143
- case 127, BattleFrontier_BattleTowerBattleRoom2_EventScript_249143
+ case MULTI_B_PRESSED, BattleFrontier_BattleTowerBattleRoom2_EventScript_249143
call BattleFrontier_BattleTowerBattleRoom2_EventScript_23E8B4
setflag FLAG_TEMP_2
goto BattleFrontier_BattleTowerBattleRoom2_EventScript_249143
@@ -393,7 +393,7 @@ BattleFrontier_BattleTowerBattleRoom2_EventScript_2494A8:: @ 82494A8
BattleFrontier_BattleTowerBattleRoom2_EventScript_2494DD:: @ 82494DD
message BattleFrontier_BattleTowerBattleRoom2_Text_24244C
waitmessage
- multichoicedefault 20, 8, 94, 1, 0
+ multichoicedefault 20, 8, MULTI_YESNO, 1, 0
compare VAR_RESULT, 0
goto_if_eq BattleFrontier_BattleTowerBattleRoom2_EventScript_2494FA
goto BattleFrontier_BattleTowerBattleRoom2_EventScript_249143
diff --git a/data/maps/BattleFrontier_BattleTowerCorridor2/scripts.inc b/data/maps/BattleFrontier_BattleTowerCorridor2/scripts.inc
index efab7be70..6e3e05959 100644
--- a/data/maps/BattleFrontier_BattleTowerCorridor2/scripts.inc
+++ b/data/maps/BattleFrontier_BattleTowerCorridor2/scripts.inc
@@ -15,7 +15,7 @@ BattleFrontier_BattleTowerCorridor2_EventScript_248D71:: @ 8248D71
setvar VAR_0x8004, 14
special sub_8161F74
checkplayergender
- compare VAR_RESULT, 1
+ compare VAR_RESULT, FEMALE
goto_if_eq BattleFrontier_BattleTowerCorridor2_EventScript_248D8B
setvar VAR_OBJ_GFX_ID_F, EVENT_OBJ_GFX_BRENDAN_NORMAL
return
@@ -25,7 +25,7 @@ BattleFrontier_BattleTowerCorridor2_EventScript_248D8B:: @ 8248D8B
return
BattleFrontier_BattleTowerCorridor2_EventScript_248D91:: @ 8248D91
- special sub_813A76C
+ special SetBattleTowerLinkPlayerGfx
return
BattleFrontier_BattleTowerCorridor2_MapScript2_248D95: @ 8248D95
diff --git a/data/maps/BattleFrontier_BattleTowerElevator/scripts.inc b/data/maps/BattleFrontier_BattleTowerElevator/scripts.inc
index 0d07f5be2..f84ec194d 100644
--- a/data/maps/BattleFrontier_BattleTowerElevator/scripts.inc
+++ b/data/maps/BattleFrontier_BattleTowerElevator/scripts.inc
@@ -12,9 +12,9 @@ BattleFrontier_BattleTowerElevator_EventScript_2419F0:: @ 82419F0
applymovement 1, BattleFrontier_BattleTowerElevator_Movement_241A86
applymovement EVENT_OBJ_ID_PLAYER, BattleFrontier_BattleTowerElevator_Movement_241A8A
waitmovement 0
- special sub_813A080
+ special BufferBattleTowerElevatorFloors
waitse
- special ShakeScreenInElevator
+ special MoveElevator
waitstate
delay 48
applymovement 1, BattleFrontier_BattleTowerElevator_Movement_241A8E
@@ -85,6 +85,6 @@ BattleFrontier_BattleTowerElevator_MapScript2_241A96: @ 8241A96
BattleFrontier_BattleTowerElevator_EventScript_241AA0:: @ 8241AA0
setvar VAR_TEMP_1, 1
- turnobject EVENT_OBJ_ID_PLAYER, 2
+ turnobject EVENT_OBJ_ID_PLAYER, DIR_NORTH
end
diff --git a/data/maps/BattleFrontier_BattleTowerLobby/scripts.inc b/data/maps/BattleFrontier_BattleTowerLobby/scripts.inc
index 6d53a33e1..9b6a406b8 100644
--- a/data/maps/BattleFrontier_BattleTowerLobby/scripts.inc
+++ b/data/maps/BattleFrontier_BattleTowerLobby/scripts.inc
@@ -35,7 +35,7 @@ BattleFrontier_BattleTowerLobby_MapScript2_23E6C9: @ 823E6C9
BattleFrontier_BattleTowerLobby_EventScript_23E6D3:: @ 823E6D3
setvar VAR_TEMP_1, 1
- turnobject EVENT_OBJ_ID_PLAYER, 2
+ turnobject EVENT_OBJ_ID_PLAYER, DIR_NORTH
end
BattleFrontier_BattleTowerLobby_MapScript2_23E6DD: @ 823E6DD
@@ -162,11 +162,11 @@ BattleFrontier_BattleTowerLobby_EventScript_23E84D:: @ 823E84D
goto_if_eq BattleFrontier_BattleTowerLobby_EventScript_23E8DF
message BattleFrontier_BattleTowerLobby_Text_23FE3C
waitmessage
- multichoicedefault 20, 8, 94, 1, 0
+ multichoicedefault 20, 8, MULTI_YESNO, 1, 0
switch VAR_RESULT
case 1, BattleFrontier_BattleTowerLobby_EventScript_23E8DF
case 0, BattleFrontier_BattleTowerLobby_EventScript_23E8B4
- case 127, BattleFrontier_BattleTowerLobby_EventScript_23E8DF
+ case MULTI_B_PRESSED, BattleFrontier_BattleTowerLobby_EventScript_23E8DF
BattleFrontier_BattleArenaBattleRoom_EventScript_23E8B4:: @ 823E8B4
BattleFrontier_BattleArenaLobby_EventScript_23E8B4:: @ 823E8B4
@@ -244,21 +244,21 @@ BattleFrontier_BattleTowerLobby_EventScript_23E936:: @ 823E936
BattleFrontier_BattleTowerLobby_EventScript_23E948:: @ 823E948
message BattleFrontier_BattleTowerLobby_Text_2405B3
waitmessage
- multichoice 17, 6, 23, 0
+ multichoice 17, 6, MULTI_CHALLENGEINFO, 0
switch VAR_RESULT
case 0, BattleFrontier_BattleTowerLobby_EventScript_23E984
case 1, BattleFrontier_BattleTowerLobby_EventScript_23EA91
case 2, BattleFrontier_BattleTowerLobby_EventScript_23F0E6
- case 127, BattleFrontier_BattleTowerLobby_EventScript_23F0E6
+ case MULTI_B_PRESSED, BattleFrontier_BattleTowerLobby_EventScript_23F0E6
BattleFrontier_BattleTowerLobby_EventScript_23E984:: @ 823E984
setvar VAR_FRONTIER_BATTLE_MODE, 0
message BattleFrontier_BattleTowerLobby_Text_23FD3B
waitmessage
- multichoice 17, 6, 24, 0
+ multichoice 17, 6, MULTI_LEVEL_MODE, 0
switch VAR_RESULT
case 2, BattleFrontier_BattleTowerLobby_EventScript_23F0E6
- case 127, BattleFrontier_BattleTowerLobby_EventScript_23F0E6
+ case MULTI_B_PRESSED, BattleFrontier_BattleTowerLobby_EventScript_23F0E6
setvar VAR_0x8004, 15
special CallFrontierUtilFunc
compare VAR_0x8004, 1
@@ -324,21 +324,21 @@ BattleFrontier_BattleTowerLobby_EventScript_23EA9F:: @ 823EA9F
BattleFrontier_BattleTowerLobby_EventScript_23EAB1:: @ 823EAB1
message BattleFrontier_BattleTowerLobby_Text_24085E
waitmessage
- multichoice 17, 6, 23, 0
+ multichoice 17, 6, MULTI_CHALLENGEINFO, 0
switch VAR_RESULT
case 0, BattleFrontier_BattleTowerLobby_EventScript_23EAED
case 1, BattleFrontier_BattleTowerLobby_EventScript_23EBFA
case 2, BattleFrontier_BattleTowerLobby_EventScript_23F0E6
- case 127, BattleFrontier_BattleTowerLobby_EventScript_23F0E6
+ case MULTI_B_PRESSED, BattleFrontier_BattleTowerLobby_EventScript_23F0E6
BattleFrontier_BattleTowerLobby_EventScript_23EAED:: @ 823EAED
setvar VAR_FRONTIER_BATTLE_MODE, 1
message BattleFrontier_BattleTowerLobby_Text_23FD3B
waitmessage
- multichoice 17, 6, 24, 0
+ multichoice 17, 6, MULTI_LEVEL_MODE, 0
switch VAR_RESULT
case 2, BattleFrontier_BattleTowerLobby_EventScript_23F0E6
- case 127, BattleFrontier_BattleTowerLobby_EventScript_23F0E6
+ case MULTI_B_PRESSED, BattleFrontier_BattleTowerLobby_EventScript_23F0E6
setvar VAR_0x8004, 15
special CallFrontierUtilFunc
compare VAR_0x8004, 1
@@ -405,21 +405,21 @@ BattleFrontier_BattleTowerLobby_EventScript_23EC08:: @ 823EC08
BattleFrontier_BattleTowerLobby_EventScript_23EC1D:: @ 823EC1D
message BattleFrontier_BattleTowerLobby_Text_240B06
waitmessage
- multichoice 17, 6, 23, 0
+ multichoice 17, 6, MULTI_CHALLENGEINFO, 0
switch VAR_RESULT
case 0, BattleFrontier_BattleTowerLobby_EventScript_23EC59
case 1, BattleFrontier_BattleTowerLobby_EventScript_23ED66
case 2, BattleFrontier_BattleTowerLobby_EventScript_23F0E6
- case 127, BattleFrontier_BattleTowerLobby_EventScript_23F0E6
+ case MULTI_B_PRESSED, BattleFrontier_BattleTowerLobby_EventScript_23F0E6
BattleFrontier_BattleTowerLobby_EventScript_23EC59:: @ 823EC59
setvar VAR_FRONTIER_BATTLE_MODE, 2
message BattleFrontier_BattleTowerLobby_Text_23FD3B
waitmessage
- multichoice 17, 6, 24, 0
+ multichoice 17, 6, MULTI_LEVEL_MODE, 0
switch VAR_RESULT
case 2, BattleFrontier_BattleTowerLobby_EventScript_23F0E6
- case 127, BattleFrontier_BattleTowerLobby_EventScript_23F0E6
+ case MULTI_B_PRESSED, BattleFrontier_BattleTowerLobby_EventScript_23F0E6
setvar VAR_0x8004, 15
special CallFrontierUtilFunc
compare VAR_0x8004, 1
@@ -485,21 +485,21 @@ BattleFrontier_BattleTowerLobby_EventScript_23ED74:: @ 823ED74
BattleFrontier_BattleTowerLobby_EventScript_23ED86:: @ 823ED86
message BattleFrontier_BattleTowerLobby_Text_240E95
waitmessage
- multichoice 17, 6, 23, 0
+ multichoice 17, 6, MULTI_CHALLENGEINFO, 0
switch VAR_RESULT
case 0, BattleFrontier_BattleTowerLobby_EventScript_23EDC2
case 1, BattleFrontier_BattleTowerLobby_EventScript_23F3DA
case 2, BattleFrontier_BattleTowerLobby_EventScript_23F0E6
- case 127, BattleFrontier_BattleTowerLobby_EventScript_23F0E6
+ case MULTI_B_PRESSED, BattleFrontier_BattleTowerLobby_EventScript_23F0E6
BattleFrontier_BattleTowerLobby_EventScript_23EDC2:: @ 823EDC2
setvar VAR_FRONTIER_BATTLE_MODE, 3
message BattleFrontier_BattleTowerLobby_Text_23FD3B
waitmessage
- multichoice 17, 6, 24, 0
+ multichoice 17, 6, MULTI_LEVEL_MODE, 0
switch VAR_RESULT
case 2, BattleFrontier_BattleTowerLobby_EventScript_23F0E6
- case 127, BattleFrontier_BattleTowerLobby_EventScript_23F0E6
+ case MULTI_B_PRESSED, BattleFrontier_BattleTowerLobby_EventScript_23F0E6
setvar VAR_0x8004, 15
special CallFrontierUtilFunc
compare VAR_0x8004, 1
@@ -560,13 +560,13 @@ BattleFrontier_BattleTowerLobby_EventScript_23EEE7:: @ 823EEE7
faceplayer
message BattleFrontier_BattleTowerLobby_Text_23F8CD
waitmessage
- multichoice 16, 4, 109, 0
+ multichoice 16, 4, MULTI_BATTLE_TOWER_FEELINGS, 0
switch VAR_RESULT
case 0, BattleFrontier_BattleTowerLobby_EventScript_23EF32
case 1, BattleFrontier_BattleTowerLobby_EventScript_23EF4C
case 2, BattleFrontier_BattleTowerLobby_EventScript_23EF66
case 3, BattleFrontier_BattleTowerLobby_EventScript_23EF80
- case 127, BattleFrontier_BattleTowerLobby_EventScript_23EF80
+ case MULTI_B_PRESSED, BattleFrontier_BattleTowerLobby_EventScript_23EF80
release
end
@@ -816,19 +816,19 @@ BattleFrontier_BattleTowerLobby_EventScript_23F1A7:: @ 823F1A7
return
BattleFrontier_BattleTowerLobby_EventScript_23F1D4:: @ 823F1D4
- bufferstdstring 0, 19
+ bufferstdstring 0, STDSTRING_SINGLE
return
BattleFrontier_BattleTowerLobby_EventScript_23F1D9:: @ 823F1D9
- bufferstdstring 0, 20
+ bufferstdstring 0, STDSTRING_DOUBLE
return
BattleFrontier_BattleTowerLobby_EventScript_23F1DE:: @ 823F1DE
- bufferstdstring 0, 21
+ bufferstdstring 0, STDSTRING_MULTI
return
BattleFrontier_BattleTowerLobby_EventScript_23F1E3:: @ 823F1E3
- bufferstdstring 0, 22
+ bufferstdstring 0, STDSTRING_MULTI_LINK
return
BattleFrontier_BattleTowerLobby_EventScript_23F1E8:: @ 823F1E8
@@ -1022,12 +1022,12 @@ BattleFrontier_BattleTowerLobby_EventScript_23F3E8:: @ 823F3E8
BattleFrontier_BattleTowerLobby_EventScript_23F3F3:: @ 823F3F3
message BattleFrontier_BattleTowerLobby_Text_2792CD
waitmessage
- multichoice 16, 6, 81, 0
+ multichoice 16, 6, MULTI_LINK_LEADER, 0
switch VAR_RESULT
case 0, BattleFrontier_BattleTowerLobby_EventScript_23F463
case 1, BattleFrontier_BattleTowerLobby_EventScript_23F430
case 2, BattleFrontier_BattleTowerLobby_EventScript_23F0E6
- case 127, BattleFrontier_BattleTowerLobby_EventScript_23F0E6
+ case MULTI_B_PRESSED, BattleFrontier_BattleTowerLobby_EventScript_23F0E6
end
BattleFrontier_BattleTowerLobby_EventScript_23F430:: @ 823F430
@@ -1080,14 +1080,14 @@ BattleFrontier_BattleTowerLobby_EventScript_23F4BE:: @ 823F4BE
BattleFrontier_BattleTowerLobby_EventScript_23F4CD:: @ 823F4CD
message BattleFrontier_BattleTowerLobby_Text_241563
waitmessage
- multichoice 17, 2, 97, 0
+ multichoice 17, 2, MULTI_BATTLE_TOWER_RULES, 0
switch VAR_RESULT
case 0, BattleFrontier_BattleTowerLobby_EventScript_23F520
case 1, BattleFrontier_BattleTowerLobby_EventScript_23F52E
case 2, BattleFrontier_BattleTowerLobby_EventScript_23F53C
case 3, BattleFrontier_BattleTowerLobby_EventScript_23F54A
case 4, BattleFrontier_BattleTowerLobby_EventScript_23F558
- case 127, BattleFrontier_BattleTowerLobby_EventScript_23F558
+ case MULTI_B_PRESSED, BattleFrontier_BattleTowerLobby_EventScript_23F558
end
BattleFrontier_BattleTowerLobby_EventScript_23F520:: @ 823F520
diff --git a/data/maps/BattleFrontier_BattleTowerMultiBattleRoom/scripts.inc b/data/maps/BattleFrontier_BattleTowerMultiBattleRoom/scripts.inc
index 0bc74b1bd..29e14473d 100644
--- a/data/maps/BattleFrontier_BattleTowerMultiBattleRoom/scripts.inc
+++ b/data/maps/BattleFrontier_BattleTowerMultiBattleRoom/scripts.inc
@@ -43,7 +43,7 @@ BattleFrontier_BattleTowerMultiBattleRoom_MapScript2_243E14: @ 8243E14
.2byte 0
BattleFrontier_BattleTowerMultiBattleRoom_EventScript_243E1E:: @ 8243E1E
- turnobject EVENT_OBJ_ID_PLAYER, 2
+ turnobject EVENT_OBJ_ID_PLAYER, DIR_NORTH
end
BattleFrontier_BattleTowerMultiBattleRoom_MapScript2_243E23: @ 8243E23
@@ -63,7 +63,7 @@ BattleFrontier_BattleTowerMultiBattleRoom_EventScript_243E41:: @ 8243E41
waitmovement 0
applymovement 1, BattleFrontier_BattleTowerMultiBattleRoom_Movement_243E77
waitmovement 0
- moveobjectoffscreen 1
+ copyobjectxytoperm 1
applymovement EVENT_OBJ_ID_PLAYER, Common_Movement_WalkInPlaceUp
waitmovement 0
msgbox BattleFrontier_BattleTowerMultiBattleRoom_Text_244056, MSGBOX_DEFAULT
@@ -86,7 +86,7 @@ BattleFrontier_BattleTowerMultiBattleRoom_EventScript_243E7A:: @ 8243E7A
faceplayer
message BattleFrontier_BattleTowerMultiBattleRoom_Text_244094
waitmessage
- multichoicedefault 20, 8, 94, 1, 0
+ multichoicedefault 20, 8, MULTI_YESNO, 1, 0
compare VAR_RESULT, 0
goto_if_eq BattleFrontier_BattleTowerMultiBattleRoom_EventScript_243E9D
msgbox BattleFrontier_BattleTowerMultiBattleRoom_Text_24410C, MSGBOX_DEFAULT
@@ -180,10 +180,10 @@ BattleFrontier_BattleTowerMultiBattleRoom_EventScript_243F36:: @ 8243F36
setvar VAR_0x8005, 2
special sub_8161F74
waitmessage
- multichoicedefault 20, 8, 94, 1, 0
+ multichoicedefault 20, 8, MULTI_YESNO, 1, 0
switch VAR_RESULT
case 1, BattleFrontier_BattleTowerMultiBattleRoom_EventScript_243FC3
- case 127, BattleFrontier_BattleTowerMultiBattleRoom_EventScript_243FC3
+ case MULTI_B_PRESSED, BattleFrontier_BattleTowerMultiBattleRoom_EventScript_243FC3
setvar VAR_0x8004, 11
setvar VAR_0x8005, 3
special sub_8161F74
diff --git a/data/maps/BattleFrontier_Lounge1/scripts.inc b/data/maps/BattleFrontier_Lounge1/scripts.inc
index 28aab432b..dee3fd431 100644
--- a/data/maps/BattleFrontier_Lounge1/scripts.inc
+++ b/data/maps/BattleFrontier_Lounge1/scripts.inc
@@ -29,9 +29,9 @@ BattleFrontier_Lounge1_EventScript_25E7B6:: @ 825E7B6
BattleFrontier_Lounge1_EventScript_25E7BF:: @ 825E7BF
specialvar VAR_RESULT, ScriptGetPartyMonSpecies
- compare VAR_RESULT, 412
+ compare VAR_RESULT, SPECIES_EGG
goto_if_eq BattleFrontier_Lounge1_EventScript_25E7FF
- special sub_8139D98
+ special BufferVarsForIVRater
compare VAR_0x8005, 90
goto_if_le BattleFrontier_Lounge1_EventScript_25E87F
compare VAR_0x8005, 120
diff --git a/data/maps/BattleFrontier_Lounge2/scripts.inc b/data/maps/BattleFrontier_Lounge2/scripts.inc
index 435eb4127..02dd09a52 100644
--- a/data/maps/BattleFrontier_Lounge2/scripts.inc
+++ b/data/maps/BattleFrontier_Lounge2/scripts.inc
@@ -40,7 +40,7 @@ BattleFrontier_Lounge2_EventScript_26066D:: @ 826066D
call_if_le BattleFrontier_Lounge2_EventScript_2606F8
compare VAR_FRONTIER_MANIAC_FACILITY, 4
call_if_ge BattleFrontier_Lounge2_EventScript_260701
- special sub_8139F20
+ special ShowFrontierManiacMessage
waitmessage
waitbuttonpress
release
@@ -55,43 +55,43 @@ BattleFrontier_Lounge2_EventScript_260701:: @ 8260701
return
BattleFrontier_Lounge2_EventScript_26070A:: @ 826070A
- bufferstdstring 0, 19
+ bufferstdstring 0, STDSTRING_SINGLE
return
BattleFrontier_Lounge2_EventScript_26070F:: @ 826070F
- bufferstdstring 0, 20
+ bufferstdstring 0, STDSTRING_DOUBLE
return
BattleFrontier_Lounge2_EventScript_260714:: @ 8260714
- bufferstdstring 0, 21
+ bufferstdstring 0, STDSTRING_MULTI
return
BattleFrontier_Lounge2_EventScript_260719:: @ 8260719
- bufferstdstring 0, 22
+ bufferstdstring 0, STDSTRING_MULTI_LINK
return
BattleFrontier_Lounge2_EventScript_26071E:: @ 826071E
- bufferstdstring 0, 24
+ bufferstdstring 0, STDSTRING_BATTLE_DOME
return
BattleFrontier_Lounge2_EventScript_260723:: @ 8260723
- bufferstdstring 0, 25
+ bufferstdstring 0, STDSTRING_BATTLE_FACTORY
return
BattleFrontier_Lounge2_EventScript_260728:: @ 8260728
- bufferstdstring 0, 26
+ bufferstdstring 0, STDSTRING_BATTLE_PALACE
return
BattleFrontier_Lounge2_EventScript_26072D:: @ 826072D
- bufferstdstring 0, 27
+ bufferstdstring 0, STDSTRING_BATTLE_ARENA
return
BattleFrontier_Lounge2_EventScript_260732:: @ 8260732
- bufferstdstring 0, 28
+ bufferstdstring 0, STDSTRING_BATTLE_PIKE
return
BattleFrontier_Lounge2_EventScript_260737:: @ 8260737
- bufferstdstring 0, 29
+ bufferstdstring 0, STDSTRING_BATTLE_PYRAMID
return
BattleFrontier_Lounge2_EventScript_26073C:: @ 826073C
diff --git a/data/maps/BattleFrontier_Lounge3/scripts.inc b/data/maps/BattleFrontier_Lounge3/scripts.inc
index 7977e75b4..3be247099 100644
--- a/data/maps/BattleFrontier_Lounge3/scripts.inc
+++ b/data/maps/BattleFrontier_Lounge3/scripts.inc
@@ -14,7 +14,7 @@ BattleFrontier_Lounge3_EventScript_261D83:: @ 8261D83
end
BattleFrontier_Lounge3_EventScript_261DAF:: @ 8261DAF
- special sub_813A820
+ special ShowFrontierGamblerLookingMessage
waitmessage
waitbuttonpress
msgbox BattleFrontier_Lounge3_Text_262A60, MSGBOX_YESNO
@@ -25,19 +25,19 @@ BattleFrontier_Lounge3_EventScript_261DAF:: @ 8261DAF
goto_if_eq BattleFrontier_Lounge3_EventScript_261FA5
message BattleFrontier_Lounge3_Text_262B42
waitmessage
- special sub_813A958
+ special ShowBattlePointsWindow
goto BattleFrontier_Lounge3_EventScript_261DE9
end
BattleFrontier_Lounge3_EventScript_261DE9:: @ 8261DE9
- multichoice 20, 4, 87, 0
+ multichoice 20, 4, MULTI_FRONTIER_GAMBLER_BET, 0
copyvar VAR_FRONTIER_GAMBLER_AMOUNT_BET, VAR_RESULT
switch VAR_RESULT
- case 0, BattleFrontier_Lounge3_EventScript_261E30
- case 1, BattleFrontier_Lounge3_EventScript_261E3B
- case 2, BattleFrontier_Lounge3_EventScript_261E46
- case 3, BattleFrontier_Lounge3_EventScript_261FAF
- case 127, BattleFrontier_Lounge3_EventScript_261FAF
+ case FRONTIER_GAMBLER_BET_5, BattleFrontier_Lounge3_EventScript_261E30
+ case FRONTIER_GAMBLER_BET_10, BattleFrontier_Lounge3_EventScript_261E3B
+ case FRONTIER_GAMBLER_BET_15, BattleFrontier_Lounge3_EventScript_261E46
+ case FRONTIER_GAMBLER_BET_CANCEL, BattleFrontier_Lounge3_EventScript_261FAF
+ case MULTI_B_PRESSED, BattleFrontier_Lounge3_EventScript_261FAF
end
BattleFrontier_Lounge3_EventScript_261E30:: @ 8261E30
@@ -56,7 +56,7 @@ BattleFrontier_Lounge3_EventScript_261E46:: @ 8261E46
end
BattleFrontier_Lounge3_EventScript_261E51:: @ 8261E51
- specialvar VAR_TEMP_1, sub_813AA04
+ specialvar VAR_TEMP_1, GetFrontierBattlePoints
compare VAR_TEMP_1, VAR_0x8008
goto_if_ge BattleFrontier_Lounge3_EventScript_261E75
msgbox BattleFrontier_Lounge3_Text_262B6E, MSGBOX_DEFAULT
@@ -67,19 +67,19 @@ BattleFrontier_Lounge3_EventScript_261E51:: @ 8261E51
BattleFrontier_Lounge3_EventScript_261E75:: @ 8261E75
copyvar VAR_0x8004, VAR_0x8008
- special sub_813A9A4
- setvar VAR_FRONTIER_GAMBLER_PLACED_BET_F, 1
- special sub_813A8FC
+ special TakeFrontierBattlePoints
+ setvar VAR_FRONTIER_GAMBLER_STATE, FRONTIER_GAMBLER_PLACED_BET
+ special UpdateBattlePointsWindow
playse SE_REGI
msgbox BattleFrontier_Lounge3_Text_262BE0, MSGBOX_DEFAULT
goto BattleFrontier_Lounge3_EventScript_261E96
end
BattleFrontier_Lounge3_EventScript_261E96:: @ 8261E96
- special sub_813A854
+ special ShowFrontierGamblerGoMessage
waitmessage
waitbuttonpress
- special sub_813A988
+ special CloseBattlePointsWindow
release
end
@@ -105,37 +105,37 @@ BattleFrontier_Lounge3_EventScript_261EEB:: @ 8261EEB
BattleFrontier_Lounge3_EventScript_261EF9:: @ 8261EF9
msgbox BattleFrontier_Lounge3_Text_26346B, MSGBOX_DEFAULT
- compare VAR_FRONTIER_GAMBLER_PLACED_BET_F, 1
+ compare VAR_FRONTIER_GAMBLER_STATE, FRONTIER_GAMBLER_PLACED_BET
goto_if_ge BattleFrontier_Lounge3_EventScript_261F12
goto BattleFrontier_Lounge3_EventScript_261DAF
end
BattleFrontier_Lounge3_EventScript_261F12:: @ 8261F12
- compare VAR_FRONTIER_GAMBLER_PLACED_BET_F, 1
+ compare VAR_FRONTIER_GAMBLER_STATE, FRONTIER_GAMBLER_PLACED_BET
goto_if_eq BattleFrontier_Lounge3_EventScript_261F9E
- compare VAR_FRONTIER_GAMBLER_PLACED_BET_F, 2
+ compare VAR_FRONTIER_GAMBLER_STATE, FRONTIER_GAMBLER_WON
goto_if_eq BattleFrontier_Lounge3_EventScript_261F2E
goto BattleFrontier_Lounge3_EventScript_261F71
end
BattleFrontier_Lounge3_EventScript_261F2E:: @ 8261F2E
msgbox BattleFrontier_Lounge3_Text_263334, MSGBOX_DEFAULT
- compare VAR_FRONTIER_GAMBLER_AMOUNT_BET, 0
+ compare VAR_FRONTIER_GAMBLER_AMOUNT_BET, FRONTIER_GAMBLER_BET_5
call_if_eq BattleFrontier_Lounge3_EventScript_261F80
- compare VAR_FRONTIER_GAMBLER_AMOUNT_BET, 1
+ compare VAR_FRONTIER_GAMBLER_AMOUNT_BET, FRONTIER_GAMBLER_BET_10
call_if_eq BattleFrontier_Lounge3_EventScript_261F8A
- compare VAR_FRONTIER_GAMBLER_AMOUNT_BET, 2
+ compare VAR_FRONTIER_GAMBLER_AMOUNT_BET, FRONTIER_GAMBLER_BET_15
call_if_eq BattleFrontier_Lounge3_EventScript_261F94
msgbox BattleFrontier_Lounge3_Text_2633D4, 9
- special sub_813A9D0
+ special GiveFrontierBattlePoints
msgbox BattleFrontier_Lounge3_Text_2633F2, MSGBOX_DEFAULT
- setvar VAR_FRONTIER_GAMBLER_PLACED_BET_F, 0
+ setvar VAR_FRONTIER_GAMBLER_STATE, FRONTIER_GAMBLER_WAITING
release
end
BattleFrontier_Lounge3_EventScript_261F71:: @ 8261F71
msgbox BattleFrontier_Lounge3_Text_263298, MSGBOX_DEFAULT
- setvar VAR_FRONTIER_GAMBLER_PLACED_BET_F, 0
+ setvar VAR_FRONTIER_GAMBLER_STATE, FRONTIER_GAMBLER_WAITING
release
end
@@ -155,7 +155,7 @@ BattleFrontier_Lounge3_EventScript_261F94:: @ 8261F94
return
BattleFrontier_Lounge3_EventScript_261F9E:: @ 8261F9E
- special sub_813A854
+ special ShowFrontierGamblerGoMessage
waitmessage
waitbuttonpress
release
@@ -167,7 +167,7 @@ BattleFrontier_Lounge3_EventScript_261FA5:: @ 8261FA5
end
BattleFrontier_Lounge3_EventScript_261FAF:: @ 8261FAF
- special sub_813A988
+ special CloseBattlePointsWindow
goto BattleFrontier_Lounge3_EventScript_261FA5
end
diff --git a/data/maps/BattleFrontier_Lounge5/map.json b/data/maps/BattleFrontier_Lounge5/map.json
index 698569d9b..3847e6691 100644
--- a/data/maps/BattleFrontier_Lounge5/map.json
+++ b/data/maps/BattleFrontier_Lounge5/map.json
@@ -24,7 +24,7 @@
"movement_range_y": 1,
"trainer_type": "0",
"trainer_sight_or_berry_tree_id": "0",
- "script": "BattleFrontier_Lounge5_EventScript_2645C6",
+ "script": "BattleFrontier_Lounge5_EventScript_NatureGirl",
"flag": "0"
},
{
diff --git a/data/maps/BattleFrontier_Lounge5/scripts.inc b/data/maps/BattleFrontier_Lounge5/scripts.inc
index 7a8bd1929..020c8fdfb 100644
--- a/data/maps/BattleFrontier_Lounge5/scripts.inc
+++ b/data/maps/BattleFrontier_Lounge5/scripts.inc
@@ -1,34 +1,34 @@
BattleFrontier_Lounge5_MapScripts:: @ 82645C5
.byte 0
-BattleFrontier_Lounge5_EventScript_2645C6:: @ 82645C6
+BattleFrontier_Lounge5_EventScript_NatureGirl:: @ 82645C6
lock
faceplayer
- msgbox BattleFrontier_Lounge5_Text_264632, MSGBOX_YESNO
+ msgbox BattleFrontier_Lounge5_Text_NatureGirlGreeting, MSGBOX_YESNO
compare VAR_RESULT, 0
- goto_if_eq BattleFrontier_Lounge5_EventScript_26460D
+ goto_if_eq BattleFrontier_Lounge5_EventScript_NatureGirlNoneShown
special sub_81B94B0
waitstate
lock
faceplayer
compare VAR_0x8004, 255
- goto_if_eq BattleFrontier_Lounge5_EventScript_26460D
+ goto_if_eq BattleFrontier_Lounge5_EventScript_NatureGirlNoneShown
specialvar VAR_RESULT, ScriptGetPartyMonSpecies
- compare VAR_RESULT, 412
- goto_if_eq BattleFrontier_Lounge5_EventScript_264603
- special sub_813A7B8
+ compare VAR_RESULT, SPECIES_EGG
+ goto_if_eq BattleFrontier_Lounge5_EventScript_NatureGirlEgg
+ special ShowNatureGirlMessage
waitmessage
waitbuttonpress
release
end
-BattleFrontier_Lounge5_EventScript_264603:: @ 8264603
- msgbox BattleFrontier_Lounge5_Text_264EEE, MSGBOX_DEFAULT
+BattleFrontier_Lounge5_EventScript_NatureGirlEgg:: @ 8264603
+ msgbox BattleFrontier_Lounge5_Text_NatureGirlEgg, MSGBOX_DEFAULT
release
end
-BattleFrontier_Lounge5_EventScript_26460D:: @ 826460D
- msgbox BattleFrontier_Lounge5_Text_26467F, MSGBOX_DEFAULT
+BattleFrontier_Lounge5_EventScript_NatureGirlNoneShown:: @ 826460D
+ msgbox BattleFrontier_Lounge5_Text_NatureGirlNoneShown, MSGBOX_DEFAULT
release
end
@@ -44,149 +44,149 @@ BattleFrontier_Lounge5_EventScript_264629:: @ 8264629
msgbox BattleFrontier_Lounge5_Text_264FAB, MSGBOX_NPC
end
-BattleFrontier_Lounge5_Text_264632:: @ 8264632
+BattleFrontier_Lounge5_Text_NatureGirlGreeting:: @ 8264632
.string "Ehehe!\n"
.string "I can tell what POKéMON are thinking!\p"
.string "Please!\n"
.string "Can I see your POKéMON?$"
-BattleFrontier_Lounge5_Text_26467F:: @ 826467F
+BattleFrontier_Lounge5_Text_NatureGirlNoneShown:: @ 826467F
.string "Boo!\n"
.string "Cheapie!$"
-BattleFrontier_Lounge5_Text_26468D:: @ 826468D
+BattleFrontier_Lounge5_Text_NatureGirlHardy:: @ 826468D
.string "Hmhm…\p"
.string "This one says it likes to battle!\n"
.string "It will battle even if it has a lot\l"
.string "of ouchies!$"
-BattleFrontier_Lounge5_Text_2646E5:: @ 82646E5
+BattleFrontier_Lounge5_Text_NatureGirlLonely:: @ 82646E5
.string "Hmhm…\p"
.string "This one says it likes to be sneaky!\n"
.string "But if it gets enough ouchies,\l"
.string "it will hit back!$"
-BattleFrontier_Lounge5_Text_264741:: @ 8264741
+BattleFrontier_Lounge5_Text_NatureGirlBrave:: @ 8264741
.string "Hmhm…\p"
.string "This one says it likes to battle!\n"
.string "But if it gets enough ouchies,\l"
.string "it will worry about itself!$"
-BattleFrontier_Lounge5_Text_2647A4:: @ 82647A4
+BattleFrontier_Lounge5_Text_NatureGirlAdamant:: @ 82647A4
.string "Hmhm…\p"
.string "This one says it likes to battle!\n"
.string "It will battle even if it has a lot\l"
.string "of ouchies!$"
-BattleFrontier_Lounge5_Text_2647FC:: @ 82647FC
+BattleFrontier_Lounge5_Text_NatureGirlNaughty:: @ 82647FC
.string "Hmhm…\p"
.string "This one says it looks after itself!\n"
.string "But if it gets enough ouchies,\l"
.string "it will hit back!$"
-BattleFrontier_Lounge5_Text_264858:: @ 8264858
+BattleFrontier_Lounge5_Text_NatureGirlBold:: @ 8264858
.string "Hmhm…\p"
.string "This one says it likes to be sneaky!\n"
.string "But if it gets enough ouchies,\l"
.string "it will worry about itself!$"
-BattleFrontier_Lounge5_Text_2648BE:: @ 82648BE
+BattleFrontier_Lounge5_Text_NatureGirlDocileNaiveQuietQuirky:: @ 82648BE
.string "Hmhm…\p"
.string "This one says it likes to battle!\n"
.string "It will battle even if it has a lot\l"
.string "of ouchies!$"
-BattleFrontier_Lounge5_Text_264916:: @ 8264916
+BattleFrontier_Lounge5_Text_NatureGirlRelaxed:: @ 8264916
.string "Hmhm…\p"
.string "This one says it likes to be sneaky!\n"
.string "But if it gets enough ouchies,\l"
.string "it will hit back!$"
-BattleFrontier_Lounge5_Text_264972:: @ 8264972
+BattleFrontier_Lounge5_Text_NatureGirlImpish:: @ 8264972
.string "Hmhm…\p"
.string "This one says it likes to battle!\n"
.string "But if it gets enough ouchies,\l"
.string "it will worry about itself!$"
-BattleFrontier_Lounge5_Text_2649D5:: @ 82649D5
+BattleFrontier_Lounge5_Text_NatureGirlLax:: @ 82649D5
.string "Hmhm…\p"
.string "This one says it likes to be sneaky!\n"
.string "It says it likes to be sneaky even\l"
.string "if it has a lot of ouchies!$"
-BattleFrontier_Lounge5_Text_264A3F:: @ 8264A3F
+BattleFrontier_Lounge5_Text_NatureGirlTimid:: @ 8264A3F
.string "Hmhm…\p"
.string "This one says it likes to battle!\n"
.string "But if it gets enough ouchies,\l"
.string "it will turn sneaky!$"
-BattleFrontier_Lounge5_Text_264A9B:: @ 8264A9B
+BattleFrontier_Lounge5_Text_NatureGirlHasty:: @ 8264A9B
.string "Hmhm…\p"
.string "This one says it likes to battle!\n"
.string "It will battle even if it has a lot\l"
.string "of ouchies!$"
-BattleFrontier_Lounge5_Text_264AF3:: @ 8264AF3
+BattleFrontier_Lounge5_Text_NatureGirlSerious:: @ 8264AF3
.string "Hmhm…\p"
.string "This one says it likes to be sneaky!\n"
.string "It says it likes to be sneaky even\l"
.string "if it has a lot of ouchies!$"
-BattleFrontier_Lounge5_Text_264B5D:: @ 8264B5D
+BattleFrontier_Lounge5_Text_NatureGirlJolly:: @ 8264B5D
.string "Hmhm…\p"
.string "This one says it likes to be sneaky!\n"
.string "But if it gets enough ouchies,\l"
.string "it will worry about itself!$"
-BattleFrontier_Lounge5_Text_264BC3:: @ 8264BC3
+BattleFrontier_Lounge5_Text_NatureGirlModest:: @ 8264BC3
.string "Hmhm…\p"
.string "This one says it looks after itself!\n"
.string "It says it worries about itself whether\l"
.string "or not it has a lot of ouchies!$"
-BattleFrontier_Lounge5_Text_264C36:: @ 8264C36
+BattleFrontier_Lounge5_Text_NatureGirlMild:: @ 8264C36
.string "Hmhm…\p"
.string "This one says it looks after itself!\n"
.string "But if it gets enough ouchies,\l"
.string "it will turn sneaky!$"
-BattleFrontier_Lounge5_Text_264C95:: @ 8264C95
+BattleFrontier_Lounge5_Text_NatureGirlBashful:: @ 8264C95
.string "Hmhm…\p"
.string "This one says it looks after itself!\n"
.string "It says it worries about itself even\l"
.string "if it has a lot of ouchies!$"
-BattleFrontier_Lounge5_Text_264D01:: @ 8264D01
+BattleFrontier_Lounge5_Text_NatureGirlRash:: @ 8264D01
.string "Hmhm…\p"
.string "This one says it likes to be sneaky!\n"
.string "It says it likes to be sneaky even\l"
.string "if it has a lot of ouchies!$"
-BattleFrontier_Lounge5_Text_264D6B:: @ 8264D6B
+BattleFrontier_Lounge5_Text_NatureGirlCalm:: @ 8264D6B
.string "Hmhm…\p"
.string "This one says it looks after itself!\n"
.string "It says it worries about itself even\l"
.string "if it has a lot of ouchies!$"
-BattleFrontier_Lounge5_Text_264DD7:: @ 8264DD7
+BattleFrontier_Lounge5_Text_NatureGirlGentle:: @ 8264DD7
.string "Hmhm…\p"
.string "This one says it looks after itself!\n"
.string "But if it gets enough ouchies,\l"
.string "it will hit back!$"
-BattleFrontier_Lounge5_Text_264E33:: @ 8264E33
+BattleFrontier_Lounge5_Text_NatureGirlSassy:: @ 8264E33
.string "Hmhm…\p"
.string "This one says it likes to battle!\n"
.string "But if it gets enough ouchies,\l"
.string "it will turn sneaky!$"
-BattleFrontier_Lounge5_Text_264E8F:: @ 8264E8F
+BattleFrontier_Lounge5_Text_NatureGirlCareful:: @ 8264E8F
.string "Hmhm…\p"
.string "This one says it looks after itself!\n"
.string "But if it gets enough ouchies,\l"
.string "it will turn sneaky!$"
-BattleFrontier_Lounge5_Text_264EEE:: @ 8264EEE
+BattleFrontier_Lounge5_Text_NatureGirlEgg:: @ 8264EEE
.string "That's silly! An EGG is asleep!\n"
.string "I can't talk to it!$"
diff --git a/data/maps/BattleFrontier_Lounge7/scripts.inc b/data/maps/BattleFrontier_Lounge7/scripts.inc
index 1339b54c9..82b04023f 100644
--- a/data/maps/BattleFrontier_Lounge7/scripts.inc
+++ b/data/maps/BattleFrontier_Lounge7/scripts.inc
@@ -19,11 +19,11 @@ BattleFrontier_Lounge7_EventScript_265276:: @ 8265276
BattleFrontier_Lounge7_EventScript_265284:: @ 8265284
message BattleFrontier_Lounge7_Text_2658EF
waitmessage
- special sub_813A958
+ special ShowBattlePointsWindow
setvar VAR_TEMP_E, 0
- setvar VAR_0x8004, 9
+ setvar VAR_0x8004, SCROLL_MULTI_BF_MOVE_TUTOR_1
setvar VAR_0x8006, 0
- special sub_813A128
+ special ShowScrollableMultichoice
waitstate
copyvar VAR_TEMP_D, VAR_RESULT
switch VAR_RESULT
@@ -38,16 +38,16 @@ BattleFrontier_Lounge7_EventScript_265284:: @ 8265284
case 8, BattleFrontier_Lounge7_EventScript_26542F
case 9, BattleFrontier_Lounge7_EventScript_26543A
case 10, BattleFrontier_Lounge7_EventScript_265635
- case 127, BattleFrontier_Lounge7_EventScript_265635
+ case MULTI_B_PRESSED, BattleFrontier_Lounge7_EventScript_265635
end
BattleFrontier_Lounge7_EventScript_26532F:: @ 826532F
message BattleFrontier_Lounge7_Text_2658EF
waitmessage
setvar VAR_TEMP_E, 0
- setvar VAR_0x8004, 9
+ setvar VAR_0x8004, SCROLL_MULTI_BF_MOVE_TUTOR_1
setvar VAR_0x8006, 1
- special sub_813A128
+ special ShowScrollableMultichoice
waitstate
copyvar VAR_TEMP_D, VAR_RESULT
switch VAR_RESULT
@@ -62,7 +62,7 @@ BattleFrontier_Lounge7_EventScript_26532F:: @ 826532F
case 8, BattleFrontier_Lounge7_EventScript_26542F
case 9, BattleFrontier_Lounge7_EventScript_26543A
case 10, BattleFrontier_Lounge7_EventScript_265635
- case 127, BattleFrontier_Lounge7_EventScript_265635
+ case MULTI_B_PRESSED, BattleFrontier_Lounge7_EventScript_265635
end
BattleFrontier_Lounge7_EventScript_2653D7:: @ 82653D7
@@ -133,11 +133,11 @@ BattleFrontier_Lounge7_EventScript_265466:: @ 8265466
BattleFrontier_Lounge7_EventScript_265474:: @ 8265474
message BattleFrontier_Lounge7_Text_2658EF
waitmessage
- special sub_813A958
+ special ShowBattlePointsWindow
setvar VAR_TEMP_E, 1
- setvar VAR_0x8004, 10
+ setvar VAR_0x8004, SCROLL_MULTI_BF_MOVE_TUTOR_2
setvar VAR_0x8006, 0
- special sub_813A128
+ special ShowScrollableMultichoice
waitstate
copyvar VAR_TEMP_D, VAR_RESULT
switch VAR_RESULT
@@ -152,16 +152,16 @@ BattleFrontier_Lounge7_EventScript_265474:: @ 8265474
case 8, BattleFrontier_Lounge7_EventScript_26561F
case 9, BattleFrontier_Lounge7_EventScript_26562A
case 10, BattleFrontier_Lounge7_EventScript_265635
- case 127, BattleFrontier_Lounge7_EventScript_265635
+ case MULTI_B_PRESSED, BattleFrontier_Lounge7_EventScript_265635
end
BattleFrontier_Lounge7_EventScript_26551F:: @ 826551F
message BattleFrontier_Lounge7_Text_2658EF
waitmessage
setvar VAR_TEMP_E, 1
- setvar VAR_0x8004, 10
+ setvar VAR_0x8004, SCROLL_MULTI_BF_MOVE_TUTOR_2
setvar VAR_0x8006, 1
- special sub_813A128
+ special ShowScrollableMultichoice
waitstate
copyvar VAR_TEMP_D, VAR_RESULT
switch VAR_RESULT
@@ -176,7 +176,7 @@ BattleFrontier_Lounge7_EventScript_26551F:: @ 826551F
case 8, BattleFrontier_Lounge7_EventScript_26561F
case 9, BattleFrontier_Lounge7_EventScript_26562A
case 10, BattleFrontier_Lounge7_EventScript_265635
- case 127, BattleFrontier_Lounge7_EventScript_265635
+ case MULTI_B_PRESSED, BattleFrontier_Lounge7_EventScript_265635
end
BattleFrontier_Lounge7_EventScript_2655C7:: @ 82655C7
@@ -230,8 +230,8 @@ BattleFrontier_Lounge7_EventScript_26562A:: @ 826562A
end
BattleFrontier_Lounge7_EventScript_265635:: @ 8265635
- special sub_813ADB8
- special sub_813A988
+ special CloseBattleFrontierTutorWindow
+ special CloseBattlePointsWindow
msgbox BattleFrontier_Lounge7_Text_265A0E, MSGBOX_DEFAULT
release
end
@@ -241,16 +241,18 @@ BattleFrontier_Lounge7_EventScript_265645:: @ 8265645
release
end
+@ VAR_0x8004 here is used to determine which move name to buffer
+@ VAR_0x8005 here is used to determine which move tutor was spoken to
BattleFrontier_Lounge7_EventScript_26564F:: @ 826564F
copyvar VAR_0x8004, VAR_TEMP_D
copyvar VAR_0x8005, VAR_TEMP_E
- special sub_813AC7C
+ special BufferBattleFrontierTutorMoveName
buffernumberstring 1, VAR_0x8008
copyvar VAR_0x8004, VAR_TEMP_C
msgbox BattleFrontier_Lounge7_Text_265921, MSGBOX_YESNO
compare VAR_RESULT, 0
goto_if_eq BattleFrontier_Lounge7_EventScript_2656CA
- specialvar VAR_TEMP_1, sub_813AA04
+ specialvar VAR_TEMP_1, GetFrontierBattlePoints
compare VAR_TEMP_1, VAR_0x8008
goto_if_ge BattleFrontier_Lounge7_EventScript_265696
msgbox BattleFrontier_Lounge7_Text_265997, MSGBOX_DEFAULT
@@ -259,17 +261,17 @@ BattleFrontier_Lounge7_EventScript_26564F:: @ 826564F
BattleFrontier_Lounge7_EventScript_265696:: @ 8265696
msgbox BattleFrontier_Lounge7_Text_26595A, MSGBOX_DEFAULT
- special sub_813AEB4
+ special GetBattleFrontierTutorMoveIndex
fadescreen 1
- special sub_813A988
- special sub_813ADB8
+ special CloseBattlePointsWindow
+ special CloseBattleFrontierTutorWindow
special sub_81B892C
waitstate
compare VAR_RESULT, 0
goto_if_eq BattleFrontier_Lounge7_EventScript_265645
msgbox BattleFrontier_Lounge7_Text_2659C7, MSGBOX_DEFAULT
copyvar VAR_0x8004, VAR_0x8008
- special sub_813A9A4
+ special TakeFrontierBattlePoints
release
end
diff --git a/data/maps/BattleFrontier_OutsideWest/scripts.inc b/data/maps/BattleFrontier_OutsideWest/scripts.inc
index 2d2bdb1c0..fb96172d2 100644
--- a/data/maps/BattleFrontier_OutsideWest/scripts.inc
+++ b/data/maps/BattleFrontier_OutsideWest/scripts.inc
@@ -20,12 +20,12 @@ BattleFrontier_OutsideWest_EventScript_23D3F0:: @ 823D3F0
end
BattleFrontier_OutsideWest_EventScript_23D416:: @ 823D416
- multichoicedefault 18, 6, 53, 2, 0
+ multichoicedefault 18, 6, MULTI_SSTIDAL_BATTLE_FRONTIER, 2, 0
switch VAR_RESULT
case 0, BattleFrontier_OutsideWest_EventScript_23D458
case 1, BattleFrontier_OutsideWest_EventScript_23D483
case 2, BattleFrontier_OutsideWest_EventScript_23D4D8
- case 127, BattleFrontier_OutsideWest_EventScript_23D4D8
+ case MULTI_B_PRESSED, BattleFrontier_OutsideWest_EventScript_23D4D8
end
BattleFrontier_OutsideWest_EventScript_23D44E:: @ 823D44E
diff --git a/data/maps/BattleFrontier_ReceptionGate/scripts.inc b/data/maps/BattleFrontier_ReceptionGate/scripts.inc
index 5f0952cb0..3eac4655b 100644
--- a/data/maps/BattleFrontier_ReceptionGate/scripts.inc
+++ b/data/maps/BattleFrontier_ReceptionGate/scripts.inc
@@ -136,8 +136,8 @@ BattleFrontier_ReceptionGate_EventScript_266310:: @ 8266310
BattleFrontier_ReceptionGate_EventScript_266320:: @ 8266320
message BattleFrontier_ReceptionGate_Text_26689D
waitmessage
- setvar VAR_0x8004, 8
- special sub_813A128
+ setvar VAR_0x8004, SCROLL_MULTI_BF_RECEPTIONIST
+ special ShowScrollableMultichoice
waitstate
switch VAR_RESULT
case 0, BattleFrontier_ReceptionGate_EventScript_2663AE
@@ -150,7 +150,7 @@ BattleFrontier_ReceptionGate_EventScript_266320:: @ 8266320
case 7, BattleFrontier_ReceptionGate_EventScript_266410
case 8, BattleFrontier_ReceptionGate_EventScript_26641E
case 9, BattleFrontier_ReceptionGate_EventScript_26642C
- case 127, BattleFrontier_ReceptionGate_EventScript_26642C
+ case MULTI_B_PRESSED, BattleFrontier_ReceptionGate_EventScript_26642C
end
BattleFrontier_ReceptionGate_EventScript_2663AE:: @ 82663AE
@@ -213,7 +213,7 @@ BattleFrontier_ReceptionGate_EventScript_266436:: @ 8266436
BattleFrontier_ReceptionGate_EventScript_266446:: @ 8266446
message BattleFrontier_ReceptionGate_Text_266EE0
waitmessage
- multichoice 15, 0, 95, 0
+ multichoice 15, 0, MULTI_FRONTIER_RULES, 0
switch VAR_RESULT
case 0, BattleFrontier_ReceptionGate_EventScript_2664A4
case 1, BattleFrontier_ReceptionGate_EventScript_2664B2
@@ -221,7 +221,7 @@ BattleFrontier_ReceptionGate_EventScript_266446:: @ 8266446
case 3, BattleFrontier_ReceptionGate_EventScript_2664CE
case 4, BattleFrontier_ReceptionGate_EventScript_2664DC
case 5, BattleFrontier_ReceptionGate_EventScript_2664EA
- case 127, BattleFrontier_ReceptionGate_EventScript_2664EA
+ case MULTI_B_PRESSED, BattleFrontier_ReceptionGate_EventScript_2664EA
end
BattleFrontier_ReceptionGate_EventScript_2664A4:: @ 82664A4
@@ -264,13 +264,13 @@ BattleFrontier_ReceptionGate_EventScript_2664F4:: @ 82664F4
BattleFrontier_ReceptionGate_EventScript_266504:: @ 8266504
message BattleFrontier_ReceptionGate_Text_26737C
waitmessage
- multichoice 16, 4, 11, 0
+ multichoice 16, 4, MULTI_FRONTIER_PASS_INFO, 0
switch VAR_RESULT
case 0, BattleFrontier_ReceptionGate_EventScript_26654C
case 1, BattleFrontier_ReceptionGate_EventScript_26655A
case 2, BattleFrontier_ReceptionGate_EventScript_266568
case 3, BattleFrontier_ReceptionGate_EventScript_266576
- case 127, BattleFrontier_ReceptionGate_EventScript_266576
+ case MULTI_B_PRESSED, BattleFrontier_ReceptionGate_EventScript_266576
end
BattleFrontier_ReceptionGate_EventScript_26654C:: @ 826654C
diff --git a/data/maps/BattleFrontier_ScottsHouse/scripts.inc b/data/maps/BattleFrontier_ScottsHouse/scripts.inc
index 52863d474..b59adefcc 100644
--- a/data/maps/BattleFrontier_ScottsHouse/scripts.inc
+++ b/data/maps/BattleFrontier_ScottsHouse/scripts.inc
@@ -112,7 +112,7 @@ BattleFrontier_ScottsHouse_EventScript_26381B:: @ 826381B
BattleFrontier_ScottsHouse_EventScript_26387A:: @ 826387A
msgbox BattleFrontier_ScottsHouse_Text_264412, MSGBOX_DEFAULT
- givedecoration_std 42
+ givedecoration_std DECOR_SILVER_SHIELD
compare VAR_RESULT, 0
goto_if_eq BattleFrontier_ScottsHouse_EventScript_2638A0
setflag FLAG_RECEIVED_SILVER_SHIELD
@@ -155,7 +155,7 @@ BattleFrontier_ScottsHouse_EventScript_2638B4:: @ 82638B4
BattleFrontier_ScottsHouse_EventScript_263913:: @ 8263913
msgbox BattleFrontier_ScottsHouse_Text_26449F, MSGBOX_DEFAULT
- givedecoration_std 43
+ givedecoration_std DECOR_GOLD_SHIELD
compare VAR_RESULT, 0
goto_if_eq BattleFrontier_ScottsHouse_EventScript_2638A0
setflag FLAG_RECEIVED_GOLD_SHIELD
@@ -218,7 +218,7 @@ BattleFrontier_ScottsHouse_EventScript_2639E9:: @ 82639E9
end
BattleFrontier_ScottsHouse_EventScript_2639F8:: @ 82639F8
- special sub_813A9D0
+ special GiveFrontierBattlePoints
msgbox BattleFrontier_ScottsHouse_Text_263CB0, 9
msgbox BattleFrontier_ScottsHouse_Text_263CD0, MSGBOX_DEFAULT
setflag FLAG_SCOTT_GIVES_BATTLE_POINTS
diff --git a/data/maps/BirthIsland_Harbor/scripts.inc b/data/maps/BirthIsland_Harbor/scripts.inc
index 5f850ed7b..9ef54cdc8 100644
--- a/data/maps/BirthIsland_Harbor/scripts.inc
+++ b/data/maps/BirthIsland_Harbor/scripts.inc
@@ -4,10 +4,10 @@ BirthIsland_Harbor_MapScripts:: @ 826805C
BirthIsland_Harbor_EventScript_26805D:: @ 826805D
lock
faceplayer
- msgbox BirthIsland_Harbor_Text_2C6B90, MSGBOX_YESNO
+ msgbox BirthIsland_Harbor_Text_SailorReturn, MSGBOX_YESNO
compare VAR_RESULT, 0
goto_if_eq BirthIsland_Harbor_EventScript_2680A2
- msgbox BirthIsland_Harbor_Text_2A6A5D, MSGBOX_DEFAULT
+ msgbox EventTicket_Text_SailHome, MSGBOX_DEFAULT
closemessage
applymovement VAR_LAST_TALKED, Common_Movement_WalkInPlaceDown
waitmovement 0
@@ -21,7 +21,7 @@ BirthIsland_Harbor_EventScript_26805D:: @ 826805D
end
BirthIsland_Harbor_EventScript_2680A2:: @ 82680A2
- msgbox BirthIsland_Harbor_Text_2A6A82, MSGBOX_DEFAULT
+ msgbox EventTicket_Text_AsYouLike, MSGBOX_DEFAULT
release
end
diff --git a/data/maps/CaveOfOrigin_B1F/scripts.inc b/data/maps/CaveOfOrigin_B1F/scripts.inc
index 5148d2942..3b130e756 100644
--- a/data/maps/CaveOfOrigin_B1F/scripts.inc
+++ b/data/maps/CaveOfOrigin_B1F/scripts.inc
@@ -22,7 +22,7 @@ CaveOfOrigin_B1F_EventScript_2357A9:: @ 82357A9
goto CaveOfOrigin_B1F_EventScript_2357F0
CaveOfOrigin_B1F_EventScript_2357F0:: @ 82357F0
- multichoice 0, 0, 110, 0
+ multichoice 0, 0, MULTI_WHERES_RAYQUAZA, 0
switch VAR_RESULT
case 0, CaveOfOrigin_B1F_EventScript_23582C
case 1, CaveOfOrigin_B1F_EventScript_235837
diff --git a/data/maps/DewfordTown/scripts.inc b/data/maps/DewfordTown/scripts.inc
index f56411104..1711405e1 100644
--- a/data/maps/DewfordTown/scripts.inc
+++ b/data/maps/DewfordTown/scripts.inc
@@ -12,12 +12,12 @@ DewfordTown_EventScript_1E9511:: @ 81E9511
goto_if_unset FLAG_DELIVERED_STEVEN_LETTER, DewfordTown_EventScript_1E9585
message DewfordTown_Text_1E9C8A
waitmessage
- multichoicedefault 21, 6, 0, 2, 0
+ multichoicedefault 21, 6, MULTI_BRINEY_ON_DEWFORD, 2, 0
switch VAR_RESULT
case 0, DewfordTown_EventScript_1E955A
case 1, DewfordTown_EventScript_1E956A
case 2, DewfordTown_EventScript_1E957A
- case 127, DewfordTown_EventScript_1E957A
+ case MULTI_B_PRESSED, DewfordTown_EventScript_1E957A
end
DewfordTown_EventScript_1E955A:: @ 81E955A
@@ -97,7 +97,7 @@ DewfordTown_EventScript_1E9620:: @ 81E9620
DewfordTown_EventScript_1E962A:: @ 81E962A
message DewfordTown_Text_1E9FB8
waitmessage
- multichoice 20, 8, 50, 1
+ multichoice 20, 8, MULTI_HOWS_FISHING, 1
compare VAR_RESULT, 0
goto_if_eq DewfordTown_EventScript_1E964C
compare VAR_RESULT, 1
@@ -180,7 +180,7 @@ DewfordTown_EventScript_1E96E7:: @ 81E96E7
copyvar VAR_BRINEY_LOCATION, VAR_0x8008
resetobjectpriority EVENT_OBJ_ID_PLAYER, MAP_DEWFORD_TOWN
resetobjectpriority 2, MAP_ROUTE109
- moveobjectoffscreen 2
+ copyobjectxytoperm 2
release
end
diff --git a/data/maps/EverGrandeCity_ChampionsRoom/scripts.inc b/data/maps/EverGrandeCity_ChampionsRoom/scripts.inc
index 88d02b29b..b26e0e030 100644
--- a/data/maps/EverGrandeCity_ChampionsRoom/scripts.inc
+++ b/data/maps/EverGrandeCity_ChampionsRoom/scripts.inc
@@ -13,7 +13,7 @@ EverGrandeCity_ChampionsRoom_MapScript2_228A05: @ 8228A05
.2byte 0
EverGrandeCity_ChampionsRoom_EventScript_228A0F:: @ 8228A0F
- turnobject EVENT_OBJ_ID_PLAYER, 2
+ turnobject EVENT_OBJ_ID_PLAYER, DIR_NORTH
end
EverGrandeCity_ChampionsRoom_MapScript2_228A14: @ 8228A14
diff --git a/data/maps/EverGrandeCity_DrakesRoom/scripts.inc b/data/maps/EverGrandeCity_DrakesRoom/scripts.inc
index ed8d82be2..bfc1b6027 100644
--- a/data/maps/EverGrandeCity_DrakesRoom/scripts.inc
+++ b/data/maps/EverGrandeCity_DrakesRoom/scripts.inc
@@ -9,7 +9,7 @@ EverGrandeCity_DrakesRoom_MapScript2_2286AC: @ 82286AC
.2byte 0
EverGrandeCity_DrakesRoom_EventScript_2286B6:: @ 82286B6
- turnobject EVENT_OBJ_ID_PLAYER, 2
+ turnobject EVENT_OBJ_ID_PLAYER, DIR_NORTH
end
EverGrandeCity_DrakesRoom_MapScript2_2286BB: @ 82286BB
diff --git a/data/maps/EverGrandeCity_GlaciasRoom/scripts.inc b/data/maps/EverGrandeCity_GlaciasRoom/scripts.inc
index 24960d95e..00e829930 100644
--- a/data/maps/EverGrandeCity_GlaciasRoom/scripts.inc
+++ b/data/maps/EverGrandeCity_GlaciasRoom/scripts.inc
@@ -9,7 +9,7 @@ EverGrandeCity_GlaciasRoom_MapScript2_228422: @ 8228422
.2byte 0
EverGrandeCity_GlaciasRoom_EventScript_22842C:: @ 822842C
- turnobject EVENT_OBJ_ID_PLAYER, 2
+ turnobject EVENT_OBJ_ID_PLAYER, DIR_NORTH
end
EverGrandeCity_GlaciasRoom_MapScript2_228431: @ 8228431
diff --git a/data/maps/EverGrandeCity_Hall1/scripts.inc b/data/maps/EverGrandeCity_Hall1/scripts.inc
index d9a7adfe3..c2ffaca47 100644
--- a/data/maps/EverGrandeCity_Hall1/scripts.inc
+++ b/data/maps/EverGrandeCity_Hall1/scripts.inc
@@ -7,6 +7,6 @@ EverGrandeCity_Hall1_MapScript2_22956F: @ 822956F
.2byte 0
EverGrandeCity_Hall1_EventScript_229579:: @ 8229579
- turnobject EVENT_OBJ_ID_PLAYER, 2
+ turnobject EVENT_OBJ_ID_PLAYER, DIR_NORTH
end
diff --git a/data/maps/EverGrandeCity_Hall2/scripts.inc b/data/maps/EverGrandeCity_Hall2/scripts.inc
index b831d0fd5..be19992ef 100644
--- a/data/maps/EverGrandeCity_Hall2/scripts.inc
+++ b/data/maps/EverGrandeCity_Hall2/scripts.inc
@@ -7,6 +7,6 @@ EverGrandeCity_Hall2_MapScript2_229584: @ 8229584
.2byte 0
EverGrandeCity_Hall2_EventScript_22958E:: @ 822958E
- turnobject EVENT_OBJ_ID_PLAYER, 2
+ turnobject EVENT_OBJ_ID_PLAYER, DIR_NORTH
end
diff --git a/data/maps/EverGrandeCity_Hall3/scripts.inc b/data/maps/EverGrandeCity_Hall3/scripts.inc
index d75cf95b6..eaf2f4e5a 100644
--- a/data/maps/EverGrandeCity_Hall3/scripts.inc
+++ b/data/maps/EverGrandeCity_Hall3/scripts.inc
@@ -7,6 +7,6 @@ EverGrandeCity_Hall3_MapScript2_229599: @ 8229599
.2byte 0
EverGrandeCity_Hall3_EventScript_2295A3:: @ 82295A3
- turnobject EVENT_OBJ_ID_PLAYER, 2
+ turnobject EVENT_OBJ_ID_PLAYER, DIR_NORTH
end
diff --git a/data/maps/EverGrandeCity_Hall4/scripts.inc b/data/maps/EverGrandeCity_Hall4/scripts.inc
index faf20646a..e36890874 100644
--- a/data/maps/EverGrandeCity_Hall4/scripts.inc
+++ b/data/maps/EverGrandeCity_Hall4/scripts.inc
@@ -7,6 +7,6 @@ EverGrandeCity_Hall4_MapScript2_2295AE: @ 82295AE
.2byte 0
EverGrandeCity_Hall4_EventScript_2295B8:: @ 82295B8
- turnobject EVENT_OBJ_ID_PLAYER, 2
+ turnobject EVENT_OBJ_ID_PLAYER, DIR_NORTH
end
diff --git a/data/maps/EverGrandeCity_Hall5/scripts.inc b/data/maps/EverGrandeCity_Hall5/scripts.inc
index e586958c2..6079bbd42 100644
--- a/data/maps/EverGrandeCity_Hall5/scripts.inc
+++ b/data/maps/EverGrandeCity_Hall5/scripts.inc
@@ -7,6 +7,6 @@ EverGrandeCity_Hall5_MapScript2_2295C3: @ 82295C3
.2byte 0
EverGrandeCity_Hall5_EventScript_2295CD:: @ 82295CD
- turnobject EVENT_OBJ_ID_PLAYER, 2
+ turnobject EVENT_OBJ_ID_PLAYER, DIR_NORTH
end
diff --git a/data/maps/EverGrandeCity_HallOfFame/scripts.inc b/data/maps/EverGrandeCity_HallOfFame/scripts.inc
index 343614d85..ebfcb3311 100644
--- a/data/maps/EverGrandeCity_HallOfFame/scripts.inc
+++ b/data/maps/EverGrandeCity_HallOfFame/scripts.inc
@@ -8,7 +8,7 @@ EverGrandeCity_HallOfFame_MapScript2_229837: @ 8229837
.2byte 0
EverGrandeCity_HallOfFame_EventScript_229841:: @ 8229841
- turnobject EVENT_OBJ_ID_PLAYER, 2
+ turnobject EVENT_OBJ_ID_PLAYER, DIR_NORTH
end
EverGrandeCity_HallOfFame_MapScript2_229846: @ 8229846
diff --git a/data/maps/EverGrandeCity_PhoebesRoom/scripts.inc b/data/maps/EverGrandeCity_PhoebesRoom/scripts.inc
index 971eff7ca..b5a3a9999 100644
--- a/data/maps/EverGrandeCity_PhoebesRoom/scripts.inc
+++ b/data/maps/EverGrandeCity_PhoebesRoom/scripts.inc
@@ -9,7 +9,7 @@ EverGrandeCity_PhoebesRoom_MapScript2_228184: @ 8228184
.2byte 0
EverGrandeCity_PhoebesRoom_EventScript_22818E:: @ 822818E
- turnobject EVENT_OBJ_ID_PLAYER, 2
+ turnobject EVENT_OBJ_ID_PLAYER, DIR_NORTH
end
EverGrandeCity_PhoebesRoom_MapScript2_228193: @ 8228193
diff --git a/data/maps/EverGrandeCity_PokemonLeague_1F/scripts.inc b/data/maps/EverGrandeCity_PokemonLeague_1F/scripts.inc
index 959153d8a..f688918ea 100644
--- a/data/maps/EverGrandeCity_PokemonLeague_1F/scripts.inc
+++ b/data/maps/EverGrandeCity_PokemonLeague_1F/scripts.inc
@@ -67,8 +67,8 @@ EverGrandeCity_PokemonLeague_1F_EventScript_229636:: @ 8229636
waitmessage
waitfanfare
closemessage
- moveobjectoffscreen 3
- moveobjectoffscreen 4
+ copyobjectxytoperm 3
+ copyobjectxytoperm 4
setflag FLAG_ENTERED_ELITE_FOUR
releaseall
end
diff --git a/data/maps/EverGrandeCity_SidneysRoom/scripts.inc b/data/maps/EverGrandeCity_SidneysRoom/scripts.inc
index 380b3aaf7..432747fda 100644
--- a/data/maps/EverGrandeCity_SidneysRoom/scripts.inc
+++ b/data/maps/EverGrandeCity_SidneysRoom/scripts.inc
@@ -30,7 +30,7 @@ EverGrandeCity_SidneysRoom_MapScript2_227F3E: @ 8227F3E
.2byte 0
EverGrandeCity_SidneysRoom_EventScript_227F48:: @ 8227F48
- turnobject EVENT_OBJ_ID_PLAYER, 2
+ turnobject EVENT_OBJ_ID_PLAYER, DIR_NORTH
end
EverGrandeCity_SidneysRoom_MapScript2_227F4D: @ 8227F4D
diff --git a/data/maps/FallarborTown_BattleTentBattleRoom/scripts.inc b/data/maps/FallarborTown_BattleTentBattleRoom/scripts.inc
index 7501f6e8d..b63846abd 100644
--- a/data/maps/FallarborTown_BattleTentBattleRoom/scripts.inc
+++ b/data/maps/FallarborTown_BattleTentBattleRoom/scripts.inc
@@ -120,7 +120,7 @@ FallarborTown_BattleTentBattleRoom_EventScript_200A2A:: @ 8200A2A
call_if_eq FallarborTown_BattleTentBattleRoom_EventScript_200B43
compare VAR_RESULT, 2
call_if_eq FallarborTown_BattleTentBattleRoom_EventScript_200B4A
- multichoice 20, 6, 104, 1
+ multichoice 20, 6, MULTI_GO_ON_REST_RETIRE, 1
switch VAR_RESULT
case 0, FallarborTown_BattleTentBattleRoom_EventScript_200AD8
case 1, FallarborTown_BattleTentBattleRoom_EventScript_200A78
@@ -136,11 +136,11 @@ FallarborTown_BattleTentBattleRoom_EventScript_200A78:: @ 8200A78
FallarborTown_BattleTentBattleRoom_EventScript_200AA6:: @ 8200AA6
message FallarborTown_BattleTentBattleRoom_Text_257E9E
waitmessage
- multichoicedefault 20, 8, 94, 1, 0
+ multichoicedefault 20, 8, MULTI_YESNO, 1, 0
switch VAR_RESULT
case 1, FallarborTown_BattleTentBattleRoom_EventScript_200A2A
case 0, FallarborTown_BattleTentBattleRoom_EventScript_20097E
- case 127, FallarborTown_BattleTentBattleRoom_EventScript_200A2A
+ case MULTI_B_PRESSED, FallarborTown_BattleTentBattleRoom_EventScript_200A2A
FallarborTown_BattleTentBattleRoom_EventScript_200AD8:: @ 8200AD8
closemessage
diff --git a/data/maps/FallarborTown_BattleTentLobby/scripts.inc b/data/maps/FallarborTown_BattleTentLobby/scripts.inc
index f6b7e1097..3f6eec374 100644
--- a/data/maps/FallarborTown_BattleTentLobby/scripts.inc
+++ b/data/maps/FallarborTown_BattleTentLobby/scripts.inc
@@ -9,7 +9,7 @@ FallarborTown_BattleTentLobby_MapScript2_1FFE71: @ 81FFE71
FallarborTown_BattleTentLobby_EventScript_1FFE7B:: @ 81FFE7B
setvar VAR_TEMP_1, 1
- turnobject EVENT_OBJ_ID_PLAYER, 2
+ turnobject EVENT_OBJ_ID_PLAYER, DIR_NORTH
end
FallarborTown_BattleTentLobby_MapScript2_1FFE85: @ 81FFE85
@@ -140,12 +140,12 @@ FallarborTown_BattleTentLobby_EventScript_200001:: @ 8200001
FallarborTown_BattleTentLobby_EventScript_200021:: @ 8200021
message FallarborTown_BattleTentLobby_Text_2C4843
waitmessage
- multichoice 17, 6, 23, 0
+ multichoice 17, 6, MULTI_CHALLENGEINFO, 0
switch VAR_RESULT
case 0, FallarborTown_BattleTentLobby_EventScript_20005D
case 1, FallarborTown_BattleTentLobby_EventScript_200169
case 2, FallarborTown_BattleTentLobby_EventScript_2001C5
- case 127, FallarborTown_BattleTentLobby_EventScript_2001C5
+ case MULTI_B_PRESSED, FallarborTown_BattleTentLobby_EventScript_2001C5
FallarborTown_BattleTentLobby_EventScript_20005D:: @ 820005D
setvar VAR_FRONTIER_FACILITY, 3
@@ -315,7 +315,7 @@ FallarborTown_BattleTentLobby_EventScript_20024F:: @ 820024F
FallarborTown_BattleTentLobby_EventScript_20025E:: @ 820025E
message FallarborTown_BattleTentLobby_Text_256DDF
waitmessage
- multichoice 17, 0, 112, 0
+ multichoice 17, 0, MULTI_FALLARBOR_TENT_RULES, 0
switch VAR_RESULT
case 0, FallarborTown_BattleTentLobby_EventScript_2002BC
case 1, FallarborTown_BattleTentLobby_EventScript_2002CA
@@ -323,7 +323,7 @@ FallarborTown_BattleTentLobby_EventScript_20025E:: @ 820025E
case 3, FallarborTown_BattleTentLobby_EventScript_2002E6
case 4, FallarborTown_BattleTentLobby_EventScript_2002F4
case 5, FallarborTown_BattleTentLobby_EventScript_200302
- case 127, FallarborTown_BattleTentLobby_EventScript_200302
+ case MULTI_B_PRESSED, FallarborTown_BattleTentLobby_EventScript_200302
end
FallarborTown_BattleTentLobby_EventScript_2002BC:: @ 82002BC
diff --git a/data/maps/FarawayIsland_Entrance/scripts.inc b/data/maps/FarawayIsland_Entrance/scripts.inc
index bd91918c3..e0d54233b 100644
--- a/data/maps/FarawayIsland_Entrance/scripts.inc
+++ b/data/maps/FarawayIsland_Entrance/scripts.inc
@@ -19,10 +19,10 @@ FarawayIsland_Entrance_EventScript_267C9D:: @ 8267C9D
FarawayIsland_Entrance_EventScript_267CA2:: @ 8267CA2
lock
faceplayer
- msgbox FarawayIsland_Entrance_Text_2C6B42, MSGBOX_YESNO
+ msgbox FarawayIsland_Entrance_Text_SailorReturn, MSGBOX_YESNO
compare VAR_RESULT, 0
goto_if_eq FarawayIsland_Entrance_EventScript_267CE7
- msgbox FarawayIsland_Entrance_Text_2A6A5D, MSGBOX_DEFAULT
+ msgbox EventTicket_Text_SailHome, MSGBOX_DEFAULT
closemessage
applymovement VAR_LAST_TALKED, Common_Movement_WalkInPlaceDown
waitmovement 0
@@ -36,11 +36,11 @@ FarawayIsland_Entrance_EventScript_267CA2:: @ 8267CA2
end
FarawayIsland_Entrance_EventScript_267CE7:: @ 8267CE7
- msgbox FarawayIsland_Entrance_Text_2A6A82, MSGBOX_DEFAULT
+ msgbox EventTicket_Text_AsYouLike, MSGBOX_DEFAULT
release
end
FarawayIsland_Entrance_EventScript_267CF1:: @ 8267CF1
- msgbox FarawayIsland_Entrance_Text_2C6D5A, MSGBOX_SIGN
+ msgbox FarawayIsland_Entrance_Text_Sign, MSGBOX_SIGN
end
diff --git a/data/maps/FarawayIsland_Interior/scripts.inc b/data/maps/FarawayIsland_Interior/scripts.inc
index b6a278b03..3b8f1f88f 100644
--- a/data/maps/FarawayIsland_Interior/scripts.inc
+++ b/data/maps/FarawayIsland_Interior/scripts.inc
@@ -62,7 +62,7 @@ FarawayIsland_Interior_EventScript_267DA2:: @ 8267DA2
waitmovement 0
applymovement 1, FarawayIsland_Interior_Movement_267DCE
waitmovement 0
- moveobjectoffscreen 1
+ copyobjectxytoperm 1
setvar VAR_TEMP_1, 1
releaseall
end
@@ -122,7 +122,7 @@ FarawayIsland_Interior_EventScript_267DF2:: @ 8267DF2
waitmovement 0
setvar VAR_0x8004, 0
special sub_81D4A90
- message FarawayIsland_Interior_Text_2C6DFF
+ message FarawayIsland_Interior_Text_Mew
waitse
playmoncry SPECIES_MEW, 2
compare VAR_FACING, 2
diff --git a/data/maps/FortreeCity_House2/scripts.inc b/data/maps/FortreeCity_House2/scripts.inc
index 34344bca3..14ab157ed 100644
--- a/data/maps/FortreeCity_House2/scripts.inc
+++ b/data/maps/FortreeCity_House2/scripts.inc
@@ -7,15 +7,15 @@ FortreeCity_House2_EventScript_2177CB:: @ 82177CB
goto_if_set FLAG_RECEIVED_TM10, FortreeCity_House2_EventScript_21786E
call_if_unset FLAG_MET_HIDDEN_POWER_GIVER, FortreeCity_House2_EventScript_217862
msgbox FortreeCity_House2_Text_2178D6, MSGBOX_DEFAULT
- multichoice 21, 8, 54, 1
+ multichoice 21, 8, MULTI_RIGHTLEFT, 1
switch VAR_RESULT
case 1, FortreeCity_House2_EventScript_217878
msgbox FortreeCity_House2_Text_21796A, MSGBOX_DEFAULT
- multichoice 21, 8, 54, 1
+ multichoice 21, 8, MULTI_RIGHTLEFT, 1
switch VAR_RESULT
case 1, FortreeCity_House2_EventScript_217878
msgbox FortreeCity_House2_Text_2179C9, MSGBOX_DEFAULT
- multichoice 21, 8, 54, 1
+ multichoice 21, 8, MULTI_RIGHTLEFT, 1
switch VAR_RESULT
case 0, FortreeCity_House2_EventScript_217878
msgbox FortreeCity_House2_Text_217A28, MSGBOX_DEFAULT
diff --git a/data/maps/LilycoveCity/scripts.inc b/data/maps/LilycoveCity/scripts.inc
index 9a777e551..364b376bf 100644
--- a/data/maps/LilycoveCity/scripts.inc
+++ b/data/maps/LilycoveCity/scripts.inc
@@ -37,7 +37,7 @@ LilycoveCity_EventScript_1E2BD8:: @ 81E2BD8
goto_if_set FLAG_DAILY_LILYCOVE_RECEIVED_BERRY, LilycoveCity_EventScript_1E2C18
msgbox LilycoveCity_Text_2A7244, MSGBOX_DEFAULT
random 10
- addvar VAR_RESULT, 133
+ addvar VAR_RESULT, FIRST_BERRY_INDEX
giveitem_std VAR_RESULT
compare VAR_RESULT, 0
goto_if_eq Common_EventScript_ShowBagIsFull
diff --git a/data/maps/LilycoveCity_ContestLobby/scripts.inc b/data/maps/LilycoveCity_ContestLobby/scripts.inc
index cd4749bfc..3a4753d8a 100644
--- a/data/maps/LilycoveCity_ContestLobby/scripts.inc
+++ b/data/maps/LilycoveCity_ContestLobby/scripts.inc
@@ -630,12 +630,12 @@ LilycoveCity_ContestLobby_EventScript_21A806:: @ 821A806
LilycoveCity_ContestLobby_EventScript_21A819:: @ 821A819
message LilycoveCity_ContestLobby_Text_27C0F6
waitmessage
- multichoice 0, 0, 2, 0
+ multichoice 0, 0, MULTI_ENTERINFO, 0
switch VAR_RESULT
case 0, LilycoveCity_ContestLobby_EventScript_21A856
case 1, LilycoveCity_ContestLobby_EventScript_21A90D
case 2, LilycoveCity_ContestLobby_EventScript_21A97F
- case 127, LilycoveCity_ContestLobby_EventScript_21A97F
+ case MULTI_B_PRESSED, LilycoveCity_ContestLobby_EventScript_21A97F
end
LilycoveCity_ContestLobby_EventScript_21A856:: @ 821A856
@@ -648,12 +648,12 @@ LilycoveCity_ContestLobby_EventScript_21A856:: @ 821A856
message LilycoveCity_ContestLobby_Text_27C8FD
waitmessage
specialvar VAR_TEMP_D, IsWirelessAdapterConnected
- multichoice 0, 0, 85, 0
+ multichoice 0, 0, MULTI_LINK_CONTEST_MODE, 0
switch VAR_RESULT
case 0, LilycoveCity_ContestLobby_EventScript_21A8BB
case 1, LilycoveCity_ContestLobby_EventScript_21A8C6
case 2, LilycoveCity_ContestLobby_EventScript_21A97F
- case 127, LilycoveCity_ContestLobby_EventScript_21A97F
+ case MULTI_B_PRESSED, LilycoveCity_ContestLobby_EventScript_21A97F
end
LilycoveCity_ContestLobby_EventScript_21A8BB:: @ 821A8BB
@@ -671,10 +671,10 @@ LilycoveCity_ContestLobby_EventScript_21A8C6:: @ 821A8C6
LilycoveCity_ContestLobby_EventScript_21A8DC:: @ 821A8DC
message LilycoveCity_ContestLobby_Text_27C119
waitmessage
- multichoice 0, 0, 4, 0
+ multichoice 0, 0, MULTI_CONTEST_TYPE, 0
switch VAR_RESULT
case 5, LilycoveCity_ContestLobby_EventScript_21A97F
- case 127, LilycoveCity_ContestLobby_EventScript_21A97F
+ case MULTI_B_PRESSED, LilycoveCity_ContestLobby_EventScript_21A97F
copyvar VAR_CONTEST_CATEGORY, VAR_RESULT
goto LilycoveCity_ContestLobby_EventScript_21A98C
end
@@ -682,13 +682,13 @@ LilycoveCity_ContestLobby_EventScript_21A8DC:: @ 821A8DC
LilycoveCity_ContestLobby_EventScript_21A90D:: @ 821A90D
message LilycoveCity_ContestLobby_Text_27C0DA
waitmessage
- multichoice 0, 0, 84, 0
+ multichoice 0, 0, MULTI_LINK_CONTEST_INFO, 0
switch VAR_RESULT
case 0, LilycoveCity_ContestLobby_EventScript_21A955
case 1, LilycoveCity_ContestLobby_EventScript_21A963
case 2, LilycoveCity_ContestLobby_EventScript_21A971
case 3, LilycoveCity_ContestLobby_EventScript_21A819
- case 127, LilycoveCity_ContestLobby_EventScript_21A819
+ case MULTI_B_PRESSED, LilycoveCity_ContestLobby_EventScript_21A819
end
LilycoveCity_ContestLobby_EventScript_21A955:: @ 821A955
@@ -877,12 +877,12 @@ LilycoveCity_ContestLobby_EventScript_21ABA0:: @ 821ABA0
LilycoveCity_ContestLobby_EventScript_21ABA6:: @ 821ABA6
message Text_DecideLinkLeader
waitmessage
- multichoice 16, 6, 81, 0
+ multichoice 16, 6, MULTI_LINK_LEADER, 0
switch VAR_RESULT
case 0, LilycoveCity_ContestLobby_EventScript_21AC0B
case 1, LilycoveCity_ContestLobby_EventScript_21ABE3
case 2, LilycoveCity_ContestLobby_EventScript_21A97F
- case 127, LilycoveCity_ContestLobby_EventScript_21A97F
+ case MULTI_B_PRESSED, LilycoveCity_ContestLobby_EventScript_21A97F
end
LilycoveCity_ContestLobby_EventScript_21ABE3:: @ 821ABE3
diff --git a/data/maps/LilycoveCity_DepartmentStoreElevator/scripts.inc b/data/maps/LilycoveCity_DepartmentStoreElevator/scripts.inc
index 18fc0404b..c22e0c0ec 100644
--- a/data/maps/LilycoveCity_DepartmentStoreElevator/scripts.inc
+++ b/data/maps/LilycoveCity_DepartmentStoreElevator/scripts.inc
@@ -7,11 +7,11 @@ LilycoveCity_DepartmentStoreElevator_EventScript_220624:: @ 8220624
setvar VAR_0x8004, 0
call_if_unset FLAG_TEMP_2, LilycoveCity_DepartmentStoreElevator_EventScript_2207FC
copyvar VAR_0x8005, VAR_DEPT_STORE_FLOOR
- special sub_8139B60
+ special ShowDeptStoreElevatorFloorSelect
message gUnknown_08272C1D
waitmessage
setvar VAR_0x8004, 0
- specialvar VAR_RESULT, sub_81399F4
+ specialvar VAR_RESULT, GetDeptStoreDefaultFloorChoice
switch VAR_RESULT
case 0, LilycoveCity_DepartmentStoreElevator_EventScript_220689
case 1, LilycoveCity_DepartmentStoreElevator_EventScript_220695
@@ -21,27 +21,27 @@ LilycoveCity_DepartmentStoreElevator_EventScript_220624:: @ 8220624
end
LilycoveCity_DepartmentStoreElevator_EventScript_220689:: @ 8220689
- multichoicedefault 0, 0, 57, 0, 0
+ multichoicedefault 0, 0, MULTI_FLOORS, 0, 0
goto LilycoveCity_DepartmentStoreElevator_EventScript_2206C5
end
LilycoveCity_DepartmentStoreElevator_EventScript_220695:: @ 8220695
- multichoicedefault 0, 0, 57, 1, 0
+ multichoicedefault 0, 0, MULTI_FLOORS, 1, 0
goto LilycoveCity_DepartmentStoreElevator_EventScript_2206C5
end
LilycoveCity_DepartmentStoreElevator_EventScript_2206A1:: @ 82206A1
- multichoicedefault 0, 0, 57, 2, 0
+ multichoicedefault 0, 0, MULTI_FLOORS, 2, 0
goto LilycoveCity_DepartmentStoreElevator_EventScript_2206C5
end
LilycoveCity_DepartmentStoreElevator_EventScript_2206AD:: @ 82206AD
- multichoicedefault 0, 0, 57, 3, 0
+ multichoicedefault 0, 0, MULTI_FLOORS, 3, 0
goto LilycoveCity_DepartmentStoreElevator_EventScript_2206C5
end
LilycoveCity_DepartmentStoreElevator_EventScript_2206B9:: @ 82206B9
- multichoicedefault 0, 0, 57, 4, 0
+ multichoicedefault 0, 0, MULTI_FLOORS, 4, 0
goto LilycoveCity_DepartmentStoreElevator_EventScript_2206C5
end
@@ -53,76 +53,76 @@ LilycoveCity_DepartmentStoreElevator_EventScript_2206C5:: @ 82206C5
case 3, LilycoveCity_DepartmentStoreElevator_EventScript_220740
case 4, LilycoveCity_DepartmentStoreElevator_EventScript_220718
case 5, LilycoveCity_DepartmentStoreElevator_EventScript_2207E0
- case 127, LilycoveCity_DepartmentStoreElevator_EventScript_2207E0
+ case MULTI_B_PRESSED, LilycoveCity_DepartmentStoreElevator_EventScript_2207E0
end
LilycoveCity_DepartmentStoreElevator_EventScript_220718:: @ 8220718
- setvar VAR_0x8006, 4
+ setvar VAR_0x8006, DEPT_STORE_FLOORNUM_1F
setdynamicwarp MAP_LILYCOVE_CITY_DEPARTMENT_STORE_1F, 255, 2, 1
- compare VAR_DEPT_STORE_FLOOR, 4
+ compare VAR_DEPT_STORE_FLOOR, DEPT_STORE_FLOORNUM_1F
goto_if_eq LilycoveCity_DepartmentStoreElevator_EventScript_2207E0
call LilycoveCity_DepartmentStoreElevator_EventScript_2207E5
- setvar VAR_DEPT_STORE_FLOOR, 4
+ setvar VAR_DEPT_STORE_FLOOR, DEPT_STORE_FLOORNUM_1F
goto LilycoveCity_DepartmentStoreElevator_EventScript_2207E0
end
LilycoveCity_DepartmentStoreElevator_EventScript_220740:: @ 8220740
- setvar VAR_0x8006, 5
+ setvar VAR_0x8006, DEPT_STORE_FLOORNUM_2F
setdynamicwarp MAP_LILYCOVE_CITY_DEPARTMENT_STORE_2F, 255, 2, 1
- compare VAR_DEPT_STORE_FLOOR, 5
+ compare VAR_DEPT_STORE_FLOOR, DEPT_STORE_FLOORNUM_2F
goto_if_eq LilycoveCity_DepartmentStoreElevator_EventScript_2207E0
call LilycoveCity_DepartmentStoreElevator_EventScript_2207E5
- setvar VAR_DEPT_STORE_FLOOR, 5
+ setvar VAR_DEPT_STORE_FLOOR, DEPT_STORE_FLOORNUM_2F
goto LilycoveCity_DepartmentStoreElevator_EventScript_2207E0
end
LilycoveCity_DepartmentStoreElevator_EventScript_220768:: @ 8220768
- setvar VAR_0x8006, 6
+ setvar VAR_0x8006, DEPT_STORE_FLOORNUM_3F
setdynamicwarp MAP_LILYCOVE_CITY_DEPARTMENT_STORE_3F, 255, 2, 1
- compare VAR_DEPT_STORE_FLOOR, 6
+ compare VAR_DEPT_STORE_FLOOR, DEPT_STORE_FLOORNUM_3F
goto_if_eq LilycoveCity_DepartmentStoreElevator_EventScript_2207E0
call LilycoveCity_DepartmentStoreElevator_EventScript_2207E5
- setvar VAR_DEPT_STORE_FLOOR, 6
+ setvar VAR_DEPT_STORE_FLOOR, DEPT_STORE_FLOORNUM_3F
goto LilycoveCity_DepartmentStoreElevator_EventScript_2207E0
end
LilycoveCity_DepartmentStoreElevator_EventScript_220790:: @ 8220790
- setvar VAR_0x8006, 7
+ setvar VAR_0x8006, DEPT_STORE_FLOORNUM_4F
setdynamicwarp MAP_LILYCOVE_CITY_DEPARTMENT_STORE_4F, 255, 2, 1
- compare VAR_DEPT_STORE_FLOOR, 7
+ compare VAR_DEPT_STORE_FLOOR, DEPT_STORE_FLOORNUM_4F
goto_if_eq LilycoveCity_DepartmentStoreElevator_EventScript_2207E0
call LilycoveCity_DepartmentStoreElevator_EventScript_2207E5
- setvar VAR_DEPT_STORE_FLOOR, 7
+ setvar VAR_DEPT_STORE_FLOOR, DEPT_STORE_FLOORNUM_4F
goto LilycoveCity_DepartmentStoreElevator_EventScript_2207E0
end
LilycoveCity_DepartmentStoreElevator_EventScript_2207B8:: @ 82207B8
- setvar VAR_0x8006, 8
+ setvar VAR_0x8006, DEPT_STORE_FLOORNUM_5F
setdynamicwarp MAP_LILYCOVE_CITY_DEPARTMENT_STORE_5F, 255, 2, 1
- compare VAR_DEPT_STORE_FLOOR, 8
+ compare VAR_DEPT_STORE_FLOOR, DEPT_STORE_FLOORNUM_5F
goto_if_eq LilycoveCity_DepartmentStoreElevator_EventScript_2207E0
call LilycoveCity_DepartmentStoreElevator_EventScript_2207E5
- setvar VAR_DEPT_STORE_FLOOR, 8
+ setvar VAR_DEPT_STORE_FLOOR, DEPT_STORE_FLOORNUM_5F
goto LilycoveCity_DepartmentStoreElevator_EventScript_2207E0
end
LilycoveCity_DepartmentStoreElevator_EventScript_2207E0:: @ 82207E0
- special sub_8139C10
+ special CloseDeptStoreElevatorWindow
release
end
LilycoveCity_DepartmentStoreElevator_EventScript_2207E5:: @ 82207E5
- special sub_8139C10
+ special CloseDeptStoreElevatorWindow
closemessage
applymovement VAR_LAST_TALKED, Common_Movement_WalkInPlaceDown
waitmovement 0
waitse
- special ShakeScreenInElevator
+ special MoveElevator
waitstate
setflag FLAG_TEMP_2
return
LilycoveCity_DepartmentStoreElevator_EventScript_2207FC:: @ 82207FC
- special SetDepartmentStoreFloorVar
+ special SetDeptStoreFloor
return
diff --git a/data/maps/LilycoveCity_DepartmentStoreRooftop/scripts.inc b/data/maps/LilycoveCity_DepartmentStoreRooftop/scripts.inc
index 42ced50b9..c9e423ebb 100644
--- a/data/maps/LilycoveCity_DepartmentStoreRooftop/scripts.inc
+++ b/data/maps/LilycoveCity_DepartmentStoreRooftop/scripts.inc
@@ -76,7 +76,7 @@ LilycoveCity_DepartmentStoreRooftop_EventScript_220295:: @ 8220295
end
LilycoveCity_DepartmentStoreRooftop_EventScript_2202A6:: @ 82202A6
- multichoice 16, 0, 42, 0
+ multichoice 16, 0, MULTI_VENDING_MACHINE, 0
copyvar VAR_TEMP_1, VAR_RESULT
switch VAR_TEMP_1
case 0, LilycoveCity_DepartmentStoreRooftop_EventScript_2202E4
@@ -87,42 +87,42 @@ LilycoveCity_DepartmentStoreRooftop_EventScript_2202A6:: @ 82202A6
end
LilycoveCity_DepartmentStoreRooftop_EventScript_2202E4:: @ 82202E4
- setvar VAR_TEMP_0, 26
+ setvar VAR_TEMP_0, ITEM_FRESH_WATER
goto LilycoveCity_DepartmentStoreRooftop_EventScript_22032F
end
LilycoveCity_DepartmentStoreRooftop_EventScript_2202EF:: @ 82202EF
- setvar VAR_TEMP_0, 27
+ setvar VAR_TEMP_0, ITEM_SODA_POP
goto LilycoveCity_DepartmentStoreRooftop_EventScript_22032F
end
LilycoveCity_DepartmentStoreRooftop_EventScript_2202FA:: @ 82202FA
- setvar VAR_TEMP_0, 28
+ setvar VAR_TEMP_0, ITEM_LEMONADE
goto LilycoveCity_DepartmentStoreRooftop_EventScript_22032F
end
LilycoveCity_DepartmentStoreRooftop_EventScript_220305:: @ 8220305
- checkmoney 0xc8, 0
+ checkmoney 200, 0
return
LilycoveCity_DepartmentStoreRooftop_EventScript_22030C:: @ 822030C
- checkmoney 0x12c, 0
+ checkmoney 300, 0
return
LilycoveCity_DepartmentStoreRooftop_EventScript_220313:: @ 8220313
- checkmoney 0x15e, 0
+ checkmoney 350, 0
return
LilycoveCity_DepartmentStoreRooftop_EventScript_22031A:: @ 822031A
- takemoney 0xc8, 0
+ takemoney 200, 0
return
LilycoveCity_DepartmentStoreRooftop_EventScript_220321:: @ 8220321
- takemoney 0x12c, 0
+ takemoney 300, 0
return
LilycoveCity_DepartmentStoreRooftop_EventScript_220328:: @ 8220328
- takemoney 0x15e, 0
+ takemoney 350, 0
return
LilycoveCity_DepartmentStoreRooftop_EventScript_22032F:: @ 822032F
@@ -144,13 +144,12 @@ LilycoveCity_DepartmentStoreRooftop_EventScript_22032F:: @ 822032F
compare VAR_TEMP_1, 2
call_if_eq LilycoveCity_DepartmentStoreRooftop_EventScript_220328
updatemoneybox 0, 0
- nop
bufferitemname 0, VAR_TEMP_0
playse SE_JIHANKI
msgbox LilycoveCity_DepartmentStoreRooftop_Text_2205A1, MSGBOX_DEFAULT
giveitem VAR_TEMP_0, 1
bufferitemname 1, VAR_TEMP_0
- bufferstdstring 2, 14
+ bufferstdstring 2, STDSTRING_ITEMS
msgbox gText_PutItemInPocket, MSGBOX_DEFAULT
random 64
compare VAR_RESULT, 0
@@ -162,7 +161,7 @@ LilycoveCity_DepartmentStoreRooftop_EventScript_22032F:: @ 822032F
msgbox LilycoveCity_DepartmentStoreRooftop_Text_2205C2, MSGBOX_DEFAULT
giveitem VAR_TEMP_0, 1
bufferitemname 1, VAR_TEMP_0
- bufferstdstring 2, 14
+ bufferstdstring 2, STDSTRING_ITEMS
msgbox gText_PutItemInPocket, MSGBOX_DEFAULT
random 64
compare VAR_RESULT, 0
@@ -174,7 +173,7 @@ LilycoveCity_DepartmentStoreRooftop_EventScript_22032F:: @ 822032F
msgbox LilycoveCity_DepartmentStoreRooftop_Text_2205C2, MSGBOX_DEFAULT
giveitem VAR_TEMP_0, 1
bufferitemname 1, VAR_TEMP_0
- bufferstdstring 2, 14
+ bufferstdstring 2, STDSTRING_ITEMS
msgbox gText_PutItemInPocket, MSGBOX_DEFAULT
goto LilycoveCity_DepartmentStoreRooftop_EventScript_220436
end
diff --git a/data/maps/LilycoveCity_DepartmentStore_5F/scripts.inc b/data/maps/LilycoveCity_DepartmentStore_5F/scripts.inc
index 6b5796604..ccad13e27 100644
--- a/data/maps/LilycoveCity_DepartmentStore_5F/scripts.inc
+++ b/data/maps/LilycoveCity_DepartmentStore_5F/scripts.inc
@@ -10,7 +10,7 @@ LilycoveCity_DepartmentStore_5F_MapScript2_21FF80: @ 821FF80
LilycoveCity_DepartmentStore_5F_EventScript_21FF9A:: @ 821FF9A
setobjectxy 7, 16, 2
- turnobject 7, 2
+ turnobject 7, DIR_NORTH
end
LilycoveCity_DepartmentStore_5F_EventScript_21FFA6:: @ 821FFA6
diff --git a/data/maps/LilycoveCity_Harbor/map.json b/data/maps/LilycoveCity_Harbor/map.json
index 28e2366e6..1b97c298d 100644
--- a/data/maps/LilycoveCity_Harbor/map.json
+++ b/data/maps/LilycoveCity_Harbor/map.json
@@ -24,7 +24,7 @@
"movement_range_y": 0,
"trainer_type": "0",
"trainer_sight_or_berry_tree_id": "0",
- "script": "LilycoveCity_Harbor_EventScript_21E00F",
+ "script": "LilycoveCity_Harbor_EventScript_FerryAttendant",
"flag": "FLAG_HIDE_LILYCOVE_HARBOR_FERRY_ATTENDANT"
},
{
@@ -50,7 +50,7 @@
"movement_range_y": 1,
"trainer_type": "0",
"trainer_sight_or_berry_tree_id": "0",
- "script": "LilycoveCity_Harbor_EventScript_21E637",
+ "script": "LilycoveCity_Harbor_EventScript_Sailor",
"flag": "0"
},
{
@@ -77,7 +77,7 @@
"trainer_type": "0",
"trainer_sight_or_berry_tree_id": "0",
"script": "0x0",
- "flag": "FLAG_HIDE_LILYCOVE_HARBOR_EON_TICKET_TAKER"
+ "flag": "FLAG_HIDE_LILYCOVE_HARBOR_EVENT_TICKET_TAKER"
}
],
"warp_events": [
diff --git a/data/maps/LilycoveCity_Harbor/scripts.inc b/data/maps/LilycoveCity_Harbor/scripts.inc
index 4b446c39b..292180d31 100644
--- a/data/maps/LilycoveCity_Harbor/scripts.inc
+++ b/data/maps/LilycoveCity_Harbor/scripts.inc
@@ -6,106 +6,107 @@ LilycoveCity_Harbor_OnTransition: @ 821E006
setescapewarp MAP_LILYCOVE_CITY, 255, 12, 33
end
-LilycoveCity_Harbor_EventScript_21E00F:: @ 821E00F
+LilycoveCity_Harbor_EventScript_FerryAttendant:: @ 821E00F
lock
faceplayer
- goto_if_unset FLAG_SYS_GAME_CLEAR, LilycoveCity_Harbor_EventScript_21E54D
- call LilycoveCity_Harbor_EventScript_21E194
- call LilycoveCity_Harbor_EventScript_21E1C6
- call LilycoveCity_Harbor_EventScript_21E1F8
- call LilycoveCity_Harbor_EventScript_21E22A
- call LilycoveCity_Harbor_EventScript_21E25C
- call LilycoveCity_Harbor_EventScript_21E2A6
+ goto_if_unset FLAG_SYS_GAME_CLEAR, LilycoveCity_Harbor_EventScript_FerryUnavailable
+ call LilycoveCity_Harbor_EventScript_GetEonTicketState
+ call LilycoveCity_Harbor_EventScript_GetAuroraTicketState
+ call LilycoveCity_Harbor_EventScript_GetOldSeaMapState
+ call LilycoveCity_Harbor_EventScript_GetMysticTicketState
+ call LilycoveCity_Harbor_EventScript_GetFirstTimeShowingTicket
+ call LilycoveCity_Harbor_EventScript_GetHasTicketsState
compare VAR_TEMP_C, 2
- goto_if_eq LilycoveCity_Harbor_EventScript_21E350
+ goto_if_eq LilycoveCity_Harbor_EventScript_OldSeaMapFirstTime
compare VAR_TEMP_B, 1
- goto_if_eq LilycoveCity_Harbor_EventScript_21E2F0
+ goto_if_eq LilycoveCity_Harbor_EventScript_EonTicketFirstTime
compare VAR_TEMP_B, 2
- goto_if_eq LilycoveCity_Harbor_EventScript_21E320
+ goto_if_eq LilycoveCity_Harbor_EventScript_AuroraTicketFirstTime
compare VAR_TEMP_B, 4
- goto_if_eq LilycoveCity_Harbor_EventScript_21E350
- compare VAR_TEMP_B, 8
- goto_if_eq LilycoveCity_Harbor_EventScript_21E41D
+ goto_if_eq LilycoveCity_Harbor_EventScript_OldSeaMapFirstTime
+ compare VAR_TEMP_B, 8
+ goto_if_eq LilycoveCity_Harbor_EventScript_MysticTicketFirstTime
compare VAR_TEMP_B, 0
- goto_if_ne LilycoveCity_Harbor_EventScript_21E44D
- goto LilycoveCity_Harbor_EventScript_21E080
+ goto_if_ne LilycoveCity_Harbor_EventScript_MultipleEventTicketsFirstTime
+ goto LilycoveCity_Harbor_EventScript_NoFirstTimeEventTickets
end
-LilycoveCity_Harbor_EventScript_21E080:: @ 821E080
+@ First goto_if_eq is unnecessary; identical scripts
+LilycoveCity_Harbor_EventScript_NoFirstTimeEventTickets:: @ 821E080
compare VAR_TEMP_A, 0
- goto_if_eq LilycoveCity_Harbor_EventScript_21E557
- msgbox LilycoveCity_Harbor_Text_21E758, MSGBOX_DEFAULT
- message LilycoveCity_Harbor_Text_21E7ED
+ goto_if_eq LilycoveCity_Harbor_EventScript_NoEventTickets
+ msgbox LilycoveCity_Harbor_Text_MayISeeYourTicket, MSGBOX_DEFAULT
+ message LilycoveCity_Harbor_Text_FlashTicketWhereTo
waitmessage
- goto LilycoveCity_Harbor_EventScript_21E09F
+ goto LilycoveCity_Harbor_EventScript_FerryRegularLocationSelect
end
-LilycoveCity_Harbor_EventScript_21E09F:: @ 821E09F
+LilycoveCity_Harbor_EventScript_FerryRegularLocationSelect:: @ 821E09F
setvar VAR_0x8004, 0
- special sub_80E2548
+ special ScriptMenu_CreateLilycoveSSTidalMultichoice
waitstate
- special sub_80E2878
+ special GetLilycoveSSTidalSelection
switch VAR_RESULT
- case 0, LilycoveCity_Harbor_EventScript_21E149
- case 1, LilycoveCity_Harbor_EventScript_21E171
- case 2, LilycoveCity_Harbor_EventScript_21E109
- case 3, LilycoveCity_Harbor_EventScript_21E119
- case 4, LilycoveCity_Harbor_EventScript_21E129
- case 5, LilycoveCity_Harbor_EventScript_21E139
- case 6, LilycoveCity_Harbor_EventScript_21E626
- case 127, LilycoveCity_Harbor_EventScript_21E626
+ case 0, LilycoveCity_Harbor_EventScript_GoToSlateport
+ case 1, LilycoveCity_Harbor_EventScript_GoToBattleFrontier
+ case 2, LilycoveCity_Harbor_EventScript_GoToSouthernIsland
+ case 3, LilycoveCity_Harbor_EventScript_GoToNavelRock
+ case 4, LilycoveCity_Harbor_EventScript_GoToBirthIsland
+ case 5, LilycoveCity_Harbor_EventScript_GoToFarawayIsland
+ case 6, LilycoveCity_Harbor_EventScript_ExitSailSelect
+ case MULTI_B_PRESSED, LilycoveCity_Harbor_EventScript_ExitSailSelect
end
-LilycoveCity_Harbor_EventScript_21E109:: @ 821E109
- call LilycoveCity_Harbor_EventScript_21E5CC
+LilycoveCity_Harbor_EventScript_GoToSouthernIsland:: @ 821E109
+ call LilycoveCity_Harbor_EventScript_BoardFerry
warp MAP_SOUTHERN_ISLAND_EXTERIOR, 255, 13, 22
waitstate
release
end
-LilycoveCity_Harbor_EventScript_21E119:: @ 821E119
- call LilycoveCity_Harbor_EventScript_21E5CC
+LilycoveCity_Harbor_EventScript_GoToNavelRock:: @ 821E119
+ call LilycoveCity_Harbor_EventScript_BoardFerry
warp MAP_NAVEL_ROCK_HARBOR, 255, 8, 4
waitstate
release
end
-LilycoveCity_Harbor_EventScript_21E129:: @ 821E129
- call LilycoveCity_Harbor_EventScript_21E5CC
+LilycoveCity_Harbor_EventScript_GoToBirthIsland:: @ 821E129
+ call LilycoveCity_Harbor_EventScript_BoardFerry
warp MAP_BIRTH_ISLAND_HARBOR, 255, 8, 4
waitstate
release
end
-LilycoveCity_Harbor_EventScript_21E139:: @ 821E139
- call LilycoveCity_Harbor_EventScript_21E5CC
+LilycoveCity_Harbor_EventScript_GoToFarawayIsland:: @ 821E139
+ call LilycoveCity_Harbor_EventScript_BoardFerry
warp MAP_FARAWAY_ISLAND_ENTRANCE, 255, 13, 38
waitstate
release
end
-LilycoveCity_Harbor_EventScript_21E149:: @ 821E149
- msgbox LilycoveCity_Harbor_Text_21E864, MSGBOX_YESNO
+LilycoveCity_Harbor_EventScript_GoToSlateport:: @ 821E149
+ msgbox LilycoveCity_Harbor_Text_SlateportItIs, MSGBOX_YESNO
compare VAR_RESULT, 0
- goto_if_eq LilycoveCity_Harbor_EventScript_21E5C0
+ goto_if_eq LilycoveCity_Harbor_EventScript_FerryDestinationChangeMind
setvar VAR_PORTHOLE_STATE, 5
- call LilycoveCity_Harbor_EventScript_21E5CC
+ call LilycoveCity_Harbor_EventScript_BoardFerry
warp MAP_SS_TIDAL_CORRIDOR, 255, 1, 10
waitstate
release
end
-LilycoveCity_Harbor_EventScript_21E171:: @ 821E171
- msgbox LilycoveCity_Harbor_Text_21E880, MSGBOX_YESNO
+LilycoveCity_Harbor_EventScript_GoToBattleFrontier:: @ 821E171
+ msgbox LilycoveCity_Harbor_Text_BattleFrontierItIs, MSGBOX_YESNO
compare VAR_RESULT, 0
- goto_if_eq LilycoveCity_Harbor_EventScript_21E5C0
- call LilycoveCity_Harbor_EventScript_21E5CC
+ goto_if_eq LilycoveCity_Harbor_EventScript_FerryDestinationChangeMind
+ call LilycoveCity_Harbor_EventScript_BoardFerry
warp MAP_BATTLE_FRONTIER_OUTSIDE_WEST, 255, 19, 67
waitstate
release
end
-LilycoveCity_Harbor_EventScript_21E194:: @ 821E194
+LilycoveCity_Harbor_EventScript_GetEonTicketState:: @ 821E194
setvar VAR_TEMP_E, 0
goto_if_unset FLAG_SYS_HAS_EON_TICKET, Common_EventScript_NopReturn
checkitem ITEM_EON_TICKET, 1
@@ -116,7 +117,7 @@ LilycoveCity_Harbor_EventScript_21E194:: @ 821E194
setvar VAR_TEMP_E, 2
return
-LilycoveCity_Harbor_EventScript_21E1C6:: @ 821E1C6
+LilycoveCity_Harbor_EventScript_GetAuroraTicketState:: @ 821E1C6
setvar VAR_TEMP_D, 0
goto_if_unset FLAG_ENABLE_SHIP_BIRTH_ISLAND, Common_EventScript_NopReturn
checkitem ITEM_AURORA_TICKET, 1
@@ -127,7 +128,7 @@ LilycoveCity_Harbor_EventScript_21E1C6:: @ 821E1C6
setvar VAR_TEMP_D, 2
return
-LilycoveCity_Harbor_EventScript_21E1F8:: @ 821E1F8
+LilycoveCity_Harbor_EventScript_GetOldSeaMapState:: @ 821E1F8
setvar VAR_TEMP_C, 0
goto_if_unset FLAG_ENABLE_SHIP_FARAWAY_ISLAND, Common_EventScript_NopReturn
checkitem ITEM_OLD_SEA_MAP, 1
@@ -138,7 +139,7 @@ LilycoveCity_Harbor_EventScript_21E1F8:: @ 821E1F8
setvar VAR_TEMP_C, 2
return
-LilycoveCity_Harbor_EventScript_21E22A:: @ 821E22A
+LilycoveCity_Harbor_EventScript_GetMysticTicketState:: @ 821E22A
setvar VAR_TEMP_9, 0
goto_if_unset FLAG_ENABLE_SHIP_NAVEL_ROCK, Common_EventScript_NopReturn
checkitem ITEM_MYSTIC_TICKET, 1
@@ -149,102 +150,102 @@ LilycoveCity_Harbor_EventScript_21E22A:: @ 821E22A
setvar VAR_TEMP_9, 2
return
-LilycoveCity_Harbor_EventScript_21E25C:: @ 821E25C
+LilycoveCity_Harbor_EventScript_GetFirstTimeShowingTicket:: @ 821E25C
setvar VAR_TEMP_B, 0
compare VAR_TEMP_E, 2
- call_if_eq LilycoveCity_Harbor_EventScript_21E28E
+ call_if_eq LilycoveCity_Harbor_EventScript_SetFirstTimeShowingEonTicket
compare VAR_TEMP_D, 2
- call_if_eq LilycoveCity_Harbor_EventScript_21E294
+ call_if_eq LilycoveCity_Harbor_EventScript_SetFirstTimeShowingAuroraTicket
compare VAR_TEMP_C, 2
- call_if_eq LilycoveCity_Harbor_EventScript_21E29A
+ call_if_eq LilycoveCity_Harbor_EventScript_SetFirstTimeShowingOldSeaMap
compare VAR_TEMP_9, 2
- call_if_eq LilycoveCity_Harbor_EventScript_21E2A0
+ call_if_eq LilycoveCity_Harbor_EventScript_SetFirstTimeShowingMysticTicket
return
-LilycoveCity_Harbor_EventScript_21E28E:: @ 821E28E
+LilycoveCity_Harbor_EventScript_SetFirstTimeShowingEonTicket:: @ 821E28E
addvar VAR_TEMP_B, 1
return
-LilycoveCity_Harbor_EventScript_21E294:: @ 821E294
+LilycoveCity_Harbor_EventScript_SetFirstTimeShowingAuroraTicket:: @ 821E294
addvar VAR_TEMP_B, 2
return
-LilycoveCity_Harbor_EventScript_21E29A:: @ 821E29A
+LilycoveCity_Harbor_EventScript_SetFirstTimeShowingOldSeaMap:: @ 821E29A
addvar VAR_TEMP_B, 4
return
-LilycoveCity_Harbor_EventScript_21E2A0:: @ 821E2A0
+LilycoveCity_Harbor_EventScript_SetFirstTimeShowingMysticTicket:: @ 821E2A0
addvar VAR_TEMP_B, 8
return
-LilycoveCity_Harbor_EventScript_21E2A6:: @ 821E2A6
+LilycoveCity_Harbor_EventScript_GetHasTicketsState:: @ 821E2A6
setvar VAR_TEMP_A, 0
compare VAR_TEMP_E, 1
- call_if_eq LilycoveCity_Harbor_EventScript_21E2D8
+ call_if_eq LilycoveCity_Harbor_EventScript_SetHasEonTicket
compare VAR_TEMP_D, 1
- call_if_eq LilycoveCity_Harbor_EventScript_21E2DE
+ call_if_eq LilycoveCity_Harbor_EventScript_SetHasAuroraTicket
compare VAR_TEMP_C, 1
- call_if_eq LilycoveCity_Harbor_EventScript_21E2E4
+ call_if_eq LilycoveCity_Harbor_EventScript_SetHasOldSeaMap
compare VAR_TEMP_9, 1
- call_if_eq LilycoveCity_Harbor_EventScript_21E2EA
+ call_if_eq LilycoveCity_Harbor_EventScript_SetHasMysticTicket
return
-LilycoveCity_Harbor_EventScript_21E2D8:: @ 821E2D8
+LilycoveCity_Harbor_EventScript_SetHasEonTicket:: @ 821E2D8
addvar VAR_TEMP_A, 1
return
-LilycoveCity_Harbor_EventScript_21E2DE:: @ 821E2DE
+LilycoveCity_Harbor_EventScript_SetHasAuroraTicket:: @ 821E2DE
addvar VAR_TEMP_A, 2
return
-LilycoveCity_Harbor_EventScript_21E2E4:: @ 821E2E4
+LilycoveCity_Harbor_EventScript_SetHasOldSeaMap:: @ 821E2E4
addvar VAR_TEMP_A, 4
return
-LilycoveCity_Harbor_EventScript_21E2EA:: @ 821E2EA
+LilycoveCity_Harbor_EventScript_SetHasMysticTicket:: @ 821E2EA
addvar VAR_TEMP_A, 8
return
-LilycoveCity_Harbor_EventScript_21E2F0:: @ 821E2F0
+LilycoveCity_Harbor_EventScript_EonTicketFirstTime:: @ 821E2F0
setflag FLAG_HAS_EON_TICKET
- msgbox LilycoveCity_Harbor_Text_2A68D2, MSGBOX_DEFAULT
+ msgbox EventTicket_Text_ThatPass, MSGBOX_DEFAULT
closemessage
- call LilycoveCity_Harbor_EventScript_21E4EE
- msgbox LilycoveCity_Harbor_Text_2A68FC, MSGBOX_DEFAULT
- goto LilycoveCity_Harbor_EventScript_21E30F
+ call LilycoveCity_Harbor_EventScript_GetEventTicketSailor
+ msgbox EventTicket_Text_ShowEonTicket, MSGBOX_DEFAULT
+ goto LilycoveCity_Harbor_EventScript_GoToSouthernIslandFirstTime
end
-LilycoveCity_Harbor_EventScript_21E30F:: @ 821E30F
+LilycoveCity_Harbor_EventScript_GoToSouthernIslandFirstTime:: @ 821E30F
closemessage
- call LilycoveCity_Harbor_EventScript_21E514
+ call LilycoveCity_Harbor_EventScript_BoardFerryWithSailor
warp MAP_SOUTHERN_ISLAND_EXTERIOR, 255, 13, 22
waitstate
release
end
-LilycoveCity_Harbor_EventScript_21E320:: @ 821E320
+LilycoveCity_Harbor_EventScript_AuroraTicketFirstTime:: @ 821E320
setflag FLAG_HAS_AURORA_TICKET
- msgbox LilycoveCity_Harbor_Text_2A68D2, MSGBOX_DEFAULT
+ msgbox EventTicket_Text_ThatPass, MSGBOX_DEFAULT
closemessage
- call LilycoveCity_Harbor_EventScript_21E4EE
- msgbox LilycoveCity_Harbor_Text_2C6A71, MSGBOX_DEFAULT
- goto LilycoveCity_Harbor_EventScript_21E33F
+ call LilycoveCity_Harbor_EventScript_GetEventTicketSailor
+ msgbox EventTicket_Text_OddTicketGetOnBoard, MSGBOX_DEFAULT
+ goto LilycoveCity_Harbor_EventScript_GoToBirthIslandFirstTime
end
-LilycoveCity_Harbor_EventScript_21E33F:: @ 821E33F
+LilycoveCity_Harbor_EventScript_GoToBirthIslandFirstTime:: @ 821E33F
closemessage
- call LilycoveCity_Harbor_EventScript_21E514
+ call LilycoveCity_Harbor_EventScript_BoardFerryWithSailor
warp MAP_BIRTH_ISLAND_HARBOR, 255, 8, 4
waitstate
release
end
-LilycoveCity_Harbor_EventScript_21E350:: @ 821E350
+LilycoveCity_Harbor_EventScript_OldSeaMapFirstTime:: @ 821E350
setflag FLAG_HAS_OLD_SEA_MAP
- msgbox LilycoveCity_Harbor_Text_2A6848, MSGBOX_DEFAULT
+ msgbox EventTicket_Text_ShowOldSeaMap, MSGBOX_DEFAULT
closemessage
- call LilycoveCity_Harbor_EventScript_21E4EE
- msgbox LilycoveCity_Harbor_Text_2C68A5, MSGBOX_DEFAULT
+ call LilycoveCity_Harbor_EventScript_GetEventTicketSailor
+ msgbox EventTicket_Text_OldSeaMapTooFar, MSGBOX_DEFAULT
closemessage
applymovement 4, Common_Movement_WalkInPlaceUp
waitmovement 0
@@ -253,80 +254,80 @@ LilycoveCity_Harbor_EventScript_21E350:: @ 821E350
waitmovement 0
applymovement 4, Common_Movement_Delay48
waitmovement 0
- compare VAR_FACING, 2
- call_if_eq LilycoveCity_Harbor_EventScript_21E656
- compare VAR_FACING, 4
- call_if_eq LilycoveCity_Harbor_EventScript_21E661
+ compare VAR_FACING, DIR_NORTH
+ call_if_eq LilycoveCity_Harbor_EventScript_MoveSailorOutOfWayNorth
+ compare VAR_FACING, DIR_EAST
+ call_if_eq LilycoveCity_Harbor_EventScript_MoveSailorOutOfWayEast
addobject 5
- compare VAR_FACING, 2
- call_if_eq LilycoveCity_Harbor_EventScript_21E675
- compare VAR_FACING, 4
- call_if_eq LilycoveCity_Harbor_EventScript_21E680
- msgbox LilycoveCity_Harbor_Text_2C6951, MSGBOX_DEFAULT
- compare VAR_FACING, 2
- call_if_eq LilycoveCity_Harbor_EventScript_21E68B
- compare VAR_FACING, 4
- call_if_eq LilycoveCity_Harbor_EventScript_21E696
- msgbox LilycoveCity_Harbor_Text_2C69AA, MSGBOX_DEFAULT
+ compare VAR_FACING, DIR_NORTH
+ call_if_eq LilycoveCity_Harbor_EventScript_BrineyFaceSailorNorth
+ compare VAR_FACING, DIR_EAST
+ call_if_eq LilycoveCity_Harbor_EventScript_BrineyFaceSailorEast
+ msgbox EventTicket_Text_BrineyHoldOnASecond, MSGBOX_DEFAULT
+ compare VAR_FACING, DIR_NORTH
+ call_if_eq LilycoveCity_Harbor_EventScript_BrineyFacePlayerNorth
+ compare VAR_FACING, DIR_EAST
+ call_if_eq LilycoveCity_Harbor_EventScript_BrineyFacePlayerEast
+ msgbox EventTicket_Text_BrineyLetsSail, MSGBOX_DEFAULT
closemessage
- compare VAR_FACING, 2
- call_if_eq LilycoveCity_Harbor_EventScript_21E6A1
- compare VAR_FACING, 4
- call_if_eq LilycoveCity_Harbor_EventScript_21E6BA
+ compare VAR_FACING, DIR_NORTH
+ call_if_eq LilycoveCity_Harbor_EventScript_BoardFerryWithBrineyAndSailorNorth
+ compare VAR_FACING, DIR_EAST
+ call_if_eq LilycoveCity_Harbor_EventScript_BoardFerryWithBrineyAndSailorEast
setvar VAR_0x8004, 2
- call LilycoveCity_Harbor_EventScript_2721E2
+ call Common_EventScript_FerryDepart
warp MAP_FARAWAY_ISLAND_ENTRANCE, 255, 13, 38
waitstate
release
end
-LilycoveCity_Harbor_EventScript_21E40C:: @ 821E40C
+LilycoveCity_Harbor_EventScript_GoToFarawayIslandFirstTime:: @ 821E40C
closemessage
- call LilycoveCity_Harbor_EventScript_21E514
+ call LilycoveCity_Harbor_EventScript_BoardFerryWithSailor
warp MAP_FARAWAY_ISLAND_ENTRANCE, 255, 13, 38
waitstate
release
end
-LilycoveCity_Harbor_EventScript_21E41D:: @ 821E41D
+LilycoveCity_Harbor_EventScript_MysticTicketFirstTime:: @ 821E41D
setflag FLAG_HAS_MYSTIC_TICKET
- msgbox LilycoveCity_Harbor_Text_2A68D2, MSGBOX_DEFAULT
+ msgbox EventTicket_Text_ThatPass, MSGBOX_DEFAULT
closemessage
- call LilycoveCity_Harbor_EventScript_21E4EE
- msgbox LilycoveCity_Harbor_Text_2C6A71, MSGBOX_DEFAULT
- goto LilycoveCity_Harbor_EventScript_21E43C
+ call LilycoveCity_Harbor_EventScript_GetEventTicketSailor
+ msgbox EventTicket_Text_OddTicketGetOnBoard, MSGBOX_DEFAULT
+ goto LilycoveCity_Harbor_EventScript_GoToNavelRockFirstTime
end
-LilycoveCity_Harbor_EventScript_21E43C:: @ 821E43C
+LilycoveCity_Harbor_EventScript_GoToNavelRockFirstTime:: @ 821E43C
closemessage
- call LilycoveCity_Harbor_EventScript_21E514
+ call LilycoveCity_Harbor_EventScript_BoardFerryWithSailor
warp MAP_NAVEL_ROCK_HARBOR, 255, 8, 4
waitstate
release
end
-LilycoveCity_Harbor_EventScript_21E44D:: @ 821E44D
- msgbox LilycoveCity_Harbor_Text_2A68D2, MSGBOX_DEFAULT
+LilycoveCity_Harbor_EventScript_MultipleEventTicketsFirstTime:: @ 821E44D
+ msgbox EventTicket_Text_ThatPass, MSGBOX_DEFAULT
closemessage
- call LilycoveCity_Harbor_EventScript_21E4EE
- message LilycoveCity_Harbor_Text_2C6BD4
+ call LilycoveCity_Harbor_EventScript_GetEventTicketSailor
+ message EventTicket_Text_OddTicketsWhereTo
waitmessage
setvar VAR_0x8004, 1
- special sub_80E2548
+ special ScriptMenu_CreateLilycoveSSTidalMultichoice
waitstate
- special sub_80E2878
+ special GetLilycoveSSTidalSelection
switch VAR_RESULT
- case 2, LilycoveCity_Harbor_EventScript_21E30F
- case 3, LilycoveCity_Harbor_EventScript_21E43C
- case 4, LilycoveCity_Harbor_EventScript_21E33F
- case 5, LilycoveCity_Harbor_EventScript_21E40C
- case 6, LilycoveCity_Harbor_EventScript_21E4B6
- case 127, LilycoveCity_Harbor_EventScript_21E4B6
+ case 2, LilycoveCity_Harbor_EventScript_GoToSouthernIslandFirstTime
+ case 3, LilycoveCity_Harbor_EventScript_GoToNavelRockFirstTime
+ case 4, LilycoveCity_Harbor_EventScript_GoToBirthIslandFirstTime
+ case 5, LilycoveCity_Harbor_EventScript_GoToFarawayIslandFirstTime
+ case 6, LilycoveCity_Harbor_EventScript_ExitFirstTimeTicketSailSelect
+ case MULTI_B_PRESSED, LilycoveCity_Harbor_EventScript_ExitFirstTimeTicketSailSelect
release
end
-LilycoveCity_Harbor_EventScript_21E4B6:: @ 821E4B6
- msgbox LilycoveCity_Harbor_Text_2A6A82, MSGBOX_DEFAULT
+LilycoveCity_Harbor_EventScript_ExitFirstTimeTicketSailSelect:: @ 821E4B6
+ msgbox EventTicket_Text_AsYouLike, MSGBOX_DEFAULT
closemessage
applymovement 4, Common_Movement_WalkInPlaceUp
waitmovement 0
@@ -337,11 +338,11 @@ LilycoveCity_Harbor_EventScript_21E4B6:: @ 821E4B6
waitmovement 0
showobjectat 1, MAP_LILYCOVE_CITY_HARBOR
delay 30
- msgbox LilycoveCity_Harbor_Text_21E842, MSGBOX_DEFAULT
+ msgbox LilycoveCity_Harbor_Text_SailAnotherTime, MSGBOX_DEFAULT
release
end
-LilycoveCity_Harbor_EventScript_21E4EE:: @ 821E4EE
+LilycoveCity_Harbor_EventScript_GetEventTicketSailor:: @ 821E4EE
applymovement VAR_LAST_TALKED, Common_Movement_WalkInPlaceUp
waitmovement 0
delay 30
@@ -353,194 +354,198 @@ LilycoveCity_Harbor_EventScript_21E4EE:: @ 821E4EE
waitmovement 0
return
-LilycoveCity_Harbor_EventScript_21E514:: @ 821E514
+LilycoveCity_Harbor_EventScript_BoardFerryWithSailor:: @ 821E514
applymovement 4, Common_Movement_WalkInPlaceUp
waitmovement 0
delay 30
removeobject 4
- compare VAR_FACING, 2
- call_if_eq LilycoveCity_Harbor_EventScript_21E61B
- compare VAR_FACING, 4
- call_if_eq LilycoveCity_Harbor_EventScript_21E610
+ compare VAR_FACING, DIR_NORTH
+ call_if_eq LilycoveCity_Harbor_EventScript_PlayerBoardFerryNorth
+ compare VAR_FACING, DIR_EAST
+ call_if_eq LilycoveCity_Harbor_EventScript_PlayerBoardFerryEast
delay 30
hideobjectat EVENT_OBJ_ID_PLAYER, MAP_PETALBURG_CITY
setvar VAR_0x8004, 2
- call LilycoveCity_Harbor_EventScript_2721E2
+ call Common_EventScript_FerryDepart
return
-LilycoveCity_Harbor_EventScript_21E54D:: @ 821E54D
- msgbox LilycoveCity_Harbor_Text_21E6F1, MSGBOX_DEFAULT
+LilycoveCity_Harbor_EventScript_FerryUnavailable:: @ 821E54D
+ msgbox LilycoveCity_Harbor_Text_FerryUnavailable, MSGBOX_DEFAULT
release
end
-LilycoveCity_Harbor_EventScript_21E557:: @ 821E557
- msgbox LilycoveCity_Harbor_Text_21E758, MSGBOX_DEFAULT
- message LilycoveCity_Harbor_Text_21E7ED
+LilycoveCity_Harbor_EventScript_NoEventTickets:: @ 821E557
+ msgbox LilycoveCity_Harbor_Text_MayISeeYourTicket, MSGBOX_DEFAULT
+ message LilycoveCity_Harbor_Text_FlashTicketWhereTo
waitmessage
- goto LilycoveCity_Harbor_EventScript_21E09F
+ goto LilycoveCity_Harbor_EventScript_FerryRegularLocationSelect
end
-LilycoveCity_Harbor_EventScript_21E56B:: @ 821E56B
- msgbox LilycoveCity_Harbor_Text_21E792, MSGBOX_DEFAULT
+@ Unused
+LilycoveCity_Harbor_EventScript_NoTicket:: @ 821E56B
+ msgbox LilycoveCity_Harbor_Text_NoTicket, MSGBOX_DEFAULT
release
end
-LilycoveCity_Harbor_EventScript_21E575:: @ 821E575
- msgbox LilycoveCity_Harbor_Text_21E864, MSGBOX_YESNO
+@ Unused
+LilycoveCity_Harbor_EventScript_GoToSlateportUnused:: @ 821E575
+ msgbox LilycoveCity_Harbor_Text_SlateportItIs, MSGBOX_YESNO
compare VAR_RESULT, 0
- goto_if_eq LilycoveCity_Harbor_EventScript_21E5C0
+ goto_if_eq LilycoveCity_Harbor_EventScript_FerryDestinationChangeMind
setvar VAR_PORTHOLE_STATE, 5
- call LilycoveCity_Harbor_EventScript_21E5CC
+ call LilycoveCity_Harbor_EventScript_BoardFerry
warp MAP_SS_TIDAL_CORRIDOR, 255, 1, 10
waitstate
release
end
-LilycoveCity_Harbor_EventScript_21E59D:: @ 821E59D
- msgbox LilycoveCity_Harbor_Text_21E880, MSGBOX_YESNO
+@ Unused
+LilycoveCity_Harbor_EventScript_GoToBattleFrontierUnused:: @ 821E59D
+ msgbox LilycoveCity_Harbor_Text_BattleFrontierItIs, MSGBOX_YESNO
compare VAR_RESULT, 0
- goto_if_eq LilycoveCity_Harbor_EventScript_21E5C0
- call LilycoveCity_Harbor_EventScript_21E5CC
+ goto_if_eq LilycoveCity_Harbor_EventScript_FerryDestinationChangeMind
+ call LilycoveCity_Harbor_EventScript_BoardFerry
warp MAP_BATTLE_FRONTIER_OUTSIDE_WEST, 255, 19, 67
waitstate
release
end
-LilycoveCity_Harbor_EventScript_21E5C0:: @ 821E5C0
- message LilycoveCity_Harbor_Text_21E8CC
+LilycoveCity_Harbor_EventScript_FerryDestinationChangeMind:: @ 821E5C0
+ message LilycoveCity_Harbor_Text_WhereWouldYouLikeToGo
waitmessage
- goto LilycoveCity_Harbor_EventScript_21E09F
+ goto LilycoveCity_Harbor_EventScript_FerryRegularLocationSelect
end
-LilycoveCity_Harbor_EventScript_21E5CC:: @ 821E5CC
- msgbox LilycoveCity_Harbor_Text_21E89D, MSGBOX_DEFAULT
+LilycoveCity_Harbor_EventScript_BoardFerry:: @ 821E5CC
+ msgbox LilycoveCity_Harbor_Text_PleaseBoard, MSGBOX_DEFAULT
closemessage
applymovement VAR_LAST_TALKED, Common_Movement_WalkInPlaceUp
waitmovement 0
delay 30
hideobjectat VAR_LAST_TALKED, MAP_LILYCOVE_CITY_HARBOR
- compare VAR_FACING, 2
- call_if_eq LilycoveCity_Harbor_EventScript_21E61B
- compare VAR_FACING, 4
- call_if_eq LilycoveCity_Harbor_EventScript_21E610
+ compare VAR_FACING, DIR_NORTH
+ call_if_eq LilycoveCity_Harbor_EventScript_PlayerBoardFerryNorth
+ compare VAR_FACING, DIR_EAST
+ call_if_eq LilycoveCity_Harbor_EventScript_PlayerBoardFerryEast
delay 30
hideobjectat EVENT_OBJ_ID_PLAYER, MAP_PETALBURG_CITY
setvar VAR_0x8004, 2
- call LilycoveCity_Harbor_EventScript_2721E2
+ call Common_EventScript_FerryDepart
return
-LilycoveCity_Harbor_EventScript_21E610:: @ 821E610
- applymovement EVENT_OBJ_ID_PLAYER, LilycoveCity_Harbor_Movement_21E630
+LilycoveCity_Harbor_EventScript_PlayerBoardFerryEast:: @ 821E610
+ applymovement EVENT_OBJ_ID_PLAYER, LilycoveCity_Harbor_Movement_PlayerBoardFerryEast
waitmovement 0
return
-LilycoveCity_Harbor_EventScript_21E61B:: @ 821E61B
- applymovement EVENT_OBJ_ID_PLAYER, LilycoveCity_Harbor_Movement_21E633
+LilycoveCity_Harbor_EventScript_PlayerBoardFerryNorth:: @ 821E61B
+ applymovement EVENT_OBJ_ID_PLAYER, LilycoveCity_Harbor_Movement_PlayerBoardFerryNorth
waitmovement 0
return
-LilycoveCity_Harbor_EventScript_21E626:: @ 821E626
- msgbox LilycoveCity_Harbor_Text_21E842, MSGBOX_DEFAULT
+LilycoveCity_Harbor_EventScript_ExitSailSelect:: @ 821E626
+ msgbox LilycoveCity_Harbor_Text_SailAnotherTime, MSGBOX_DEFAULT
release
end
-LilycoveCity_Harbor_Movement_21E630: @ 821E630
+LilycoveCity_Harbor_Movement_PlayerBoardFerryEast: @ 821E630
walk_right
walk_in_place_fastest_up
step_end
-LilycoveCity_Harbor_Movement_21E633: @ 821E633
+LilycoveCity_Harbor_Movement_PlayerBoardFerryNorth: @ 821E633
walk_up
step_end
+@ Unused
LilycoveCity_Harbor_Movement_21E635: @ 821E635
walk_up
step_end
-LilycoveCity_Harbor_EventScript_21E637:: @ 821E637
+LilycoveCity_Harbor_EventScript_Sailor:: @ 821E637
lock
faceplayer
- goto_if_set FLAG_SYS_GAME_CLEAR, LilycoveCity_Harbor_EventScript_21E64C
- msgbox LilycoveCity_Harbor_Text_21E8EE, MSGBOX_DEFAULT
+ goto_if_set FLAG_SYS_GAME_CLEAR, LilycoveCity_Harbor_EventScript_SailorFerryAvailable
+ msgbox LilycoveCity_Harbor_Text_SailorFerryUnavailable, MSGBOX_DEFAULT
release
end
-LilycoveCity_Harbor_EventScript_21E64C:: @ 821E64C
- msgbox LilycoveCity_Harbor_Text_21E976, MSGBOX_DEFAULT
+LilycoveCity_Harbor_EventScript_SailorFerryAvailable:: @ 821E64C
+ msgbox LilycoveCity_Harbor_Text_SailorFerryAvailable, MSGBOX_DEFAULT
release
end
-LilycoveCity_Harbor_EventScript_21E656:: @ 821E656
- applymovement 4, LilycoveCity_Harbor_Movement_21E66C
+LilycoveCity_Harbor_EventScript_MoveSailorOutOfWayNorth:: @ 821E656
+ applymovement 4, LilycoveCity_Harbor_Movement_SailorOutOfWayNorth
waitmovement 0
return
-LilycoveCity_Harbor_EventScript_21E661:: @ 821E661
- applymovement 4, LilycoveCity_Harbor_Movement_21E671
+LilycoveCity_Harbor_EventScript_MoveSailorOutOfWayEast:: @ 821E661
+ applymovement 4, LilycoveCity_Harbor_Movement_SailorOutOfWayEast
waitmovement 0
return
-LilycoveCity_Harbor_Movement_21E66C: @ 821E66C
+LilycoveCity_Harbor_Movement_SailorOutOfWayNorth: @ 821E66C
walk_in_place_fastest_right
lock_facing_direction
walk_left
unlock_facing_direction
step_end
-LilycoveCity_Harbor_Movement_21E671: @ 821E671
+LilycoveCity_Harbor_Movement_SailorOutOfWayEast: @ 821E671
lock_facing_direction
walk_down
unlock_facing_direction
step_end
-LilycoveCity_Harbor_EventScript_21E675:: @ 821E675
+LilycoveCity_Harbor_EventScript_BrineyFaceSailorNorth:: @ 821E675
applymovement 5, Common_Movement_WalkInPlaceLeft
waitmovement 0
return
-LilycoveCity_Harbor_EventScript_21E680:: @ 821E680
+LilycoveCity_Harbor_EventScript_BrineyFaceSailorEast:: @ 821E680
applymovement 5, Common_Movement_WalkInPlaceDown
waitmovement 0
return
-LilycoveCity_Harbor_EventScript_21E68B:: @ 821E68B
+LilycoveCity_Harbor_EventScript_BrineyFacePlayerNorth:: @ 821E68B
applymovement 5, Common_Movement_WalkInPlaceDown
waitmovement 0
return
-LilycoveCity_Harbor_EventScript_21E696:: @ 821E696
+LilycoveCity_Harbor_EventScript_BrineyFacePlayerEast:: @ 821E696
applymovement 5, Common_Movement_WalkInPlaceLeft
waitmovement 0
return
-LilycoveCity_Harbor_EventScript_21E6A1:: @ 821E6A1
- applymovement 5, LilycoveCity_Harbor_Movement_21E6D3
- applymovement EVENT_OBJ_ID_PLAYER, LilycoveCity_Harbor_Movement_21E6D7
- applymovement 4, LilycoveCity_Harbor_Movement_21E6DC
+LilycoveCity_Harbor_EventScript_BoardFerryWithBrineyAndSailorNorth:: @ 821E6A1
+ applymovement 5, LilycoveCity_Harbor_Movement_BrineyBoardFerry
+ applymovement EVENT_OBJ_ID_PLAYER, LilycoveCity_Harbor_Movement_PlayerBoardWithBrineyNorth
+ applymovement 4, LilycoveCity_Harbor_Movement_SailorBoardWithBrineyNorth
waitmovement 0
return
-LilycoveCity_Harbor_EventScript_21E6BA:: @ 821E6BA
- applymovement 5, LilycoveCity_Harbor_Movement_21E6D3
- applymovement EVENT_OBJ_ID_PLAYER, LilycoveCity_Harbor_Movement_21E6E4
- applymovement 4, LilycoveCity_Harbor_Movement_21E6EA
+LilycoveCity_Harbor_EventScript_BoardFerryWithBrineyAndSailorEast:: @ 821E6BA
+ applymovement 5, LilycoveCity_Harbor_Movement_BrineyBoardFerry
+ applymovement EVENT_OBJ_ID_PLAYER, LilycoveCity_Harbor_Movement_PlayerBoardWithBrineyEast
+ applymovement 4, LilycoveCity_Harbor_Movement_SailorBoardWithBrineyEast
waitmovement 0
return
-LilycoveCity_Harbor_Movement_21E6D3: @ 821E6D3
+LilycoveCity_Harbor_Movement_BrineyBoardFerry: @ 821E6D3
walk_in_place_fastest_up
delay_8
set_invisible
step_end
-LilycoveCity_Harbor_Movement_21E6D7: @ 821E6D7
+LilycoveCity_Harbor_Movement_PlayerBoardWithBrineyNorth: @ 821E6D7
delay_16
walk_up
delay_16
set_invisible
step_end
-LilycoveCity_Harbor_Movement_21E6DC: @ 821E6DC
+LilycoveCity_Harbor_Movement_SailorBoardWithBrineyNorth: @ 821E6DC
delay_16
delay_16
delay_16
@@ -550,7 +555,7 @@ LilycoveCity_Harbor_Movement_21E6DC: @ 821E6DC
set_invisible
step_end
-LilycoveCity_Harbor_Movement_21E6E4: @ 821E6E4
+LilycoveCity_Harbor_Movement_PlayerBoardWithBrineyEast: @ 821E6E4
delay_16
walk_right
walk_in_place_fastest_up
@@ -558,7 +563,7 @@ LilycoveCity_Harbor_Movement_21E6E4: @ 821E6E4
set_invisible
step_end
-LilycoveCity_Harbor_Movement_21E6EA: @ 821E6EA
+LilycoveCity_Harbor_Movement_SailorBoardWithBrineyEast: @ 821E6EA
delay_16
delay_16
delay_16
@@ -567,51 +572,50 @@ LilycoveCity_Harbor_Movement_21E6EA: @ 821E6EA
set_invisible
step_end
-LilycoveCity_Harbor_Text_21E6F1: @ 821E6F1
+LilycoveCity_Harbor_Text_FerryUnavailable: @ 821E6F1
.string "I beg your pardon?\n"
.string "You're looking for a ship?\p"
.string "I'm sorry, the ferry service isn't\n"
.string "available at present…$"
-LilycoveCity_Harbor_Text_21E758: @ 821E758
+LilycoveCity_Harbor_Text_MayISeeYourTicket: @ 821E758
.string "Hello, are you here for the ferry?\n"
.string "May I see your TICKET?$"
-
-LilycoveCity_Harbor_Text_21E792: @ 821E792
+LilycoveCity_Harbor_Text_NoTicket: @ 821E792
.string "{PLAYER} doesn't have the TICKET…\p"
.string "I'm terribly sorry.\p"
.string "You must have a TICKET to board\n"
.string "the ferry.$"
-LilycoveCity_Harbor_Text_21E7ED: @ 821E7ED
+LilycoveCity_Harbor_Text_FlashTicketWhereTo: @ 821E7ED
.string "{PLAYER} flashed the TICKET.\p"
.string "Perfect! That's all you need!\p"
.string "And where would you like to go?$"
-LilycoveCity_Harbor_Text_21E842: @ 821E842
+LilycoveCity_Harbor_Text_SailAnotherTime: @ 821E842
.string "Please sail with us another time!$"
-LilycoveCity_Harbor_Text_21E864: @ 821E864
+LilycoveCity_Harbor_Text_SlateportItIs: @ 821E864
.string "SLATEPORT CITY it is, then!$"
-LilycoveCity_Harbor_Text_21E880: @ 821E880
+LilycoveCity_Harbor_Text_BattleFrontierItIs: @ 821E880
.string "BATTLE FRONTIER it is, then!$"
-LilycoveCity_Harbor_Text_21E89D: @ 821E89D
+LilycoveCity_Harbor_Text_PleaseBoard: @ 821E89D
.string "Please board the ferry and wait for\n"
.string "departure.$"
-LilycoveCity_Harbor_Text_21E8CC: @ 821E8CC
+LilycoveCity_Harbor_Text_WhereWouldYouLikeToGo: @ 821E8CC
.string "Then, where would you like to go?$"
-LilycoveCity_Harbor_Text_21E8EE: @ 821E8EE
+LilycoveCity_Harbor_Text_SailorFerryUnavailable: @ 821E8EE
.string "Until they finish making the ferry,\n"
.string "we sailors have nothing to do…\p"
.string "I wish they'd get a move on, the folks\n"
.string "at the SHIPYARD in SLATEPORT.$"
-LilycoveCity_Harbor_Text_21E976: @ 821E976
+LilycoveCity_Harbor_Text_SailorFerryAvailable: @ 821E976
.string "The ferry S.S. TIDAL is finally in\n"
.string "operation.\p"
.string "The folks at the SHIPYARD in SLATEPORT\n"
diff --git a/data/maps/LilycoveCity_LilycoveMuseum_1F/scripts.inc b/data/maps/LilycoveCity_LilycoveMuseum_1F/scripts.inc
index 8f2cdde28..8ac18ba85 100644
--- a/data/maps/LilycoveCity_LilycoveMuseum_1F/scripts.inc
+++ b/data/maps/LilycoveCity_LilycoveMuseum_1F/scripts.inc
@@ -10,7 +10,7 @@ LilycoveCity_LilycoveMuseum_1F_EventScript_218CC2:: @ 8218CC2
applymovement 2, Common_Movement_FacePlayer
message LilycoveCity_LilycoveMuseum_1F_Text_218EBC
waitmessage
- multichoice 20, 8, 16, 1
+ multichoice 20, 8, MULTI_VIEWED_PAINTINGS, 1
compare VAR_RESULT, 0
goto_if_eq LilycoveCity_LilycoveMuseum_1F_EventScript_218CF5
compare VAR_RESULT, 1
diff --git a/data/maps/LilycoveCity_LilycoveMuseum_2F/scripts.inc b/data/maps/LilycoveCity_LilycoveMuseum_2F/scripts.inc
index add7ef22f..71aead3e4 100644
--- a/data/maps/LilycoveCity_LilycoveMuseum_2F/scripts.inc
+++ b/data/maps/LilycoveCity_LilycoveMuseum_2F/scripts.inc
@@ -118,7 +118,7 @@ LilycoveCity_LilycoveMuseum_2F_EventScript_2198C3:: @ 82198C3
LilycoveCity_LilycoveMuseum_2F_EventScript_2198EA:: @ 82198EA
applymovement 1, Common_Movement_FacePlayer
msgbox LilycoveCity_LilycoveMuseum_2F_Text_219EC5, MSGBOX_DEFAULT
- givedecoration_std 44
+ givedecoration_std DECOR_GLASS_ORNAMENT
compare VAR_RESULT, 0
goto_if_eq LilycoveCity_LilycoveMuseum_2F_EventScript_219911
setflag FLAG_RECEIVED_GLASS_ORNAMENT
diff --git a/data/maps/LilycoveCity_PokemonCenter_1F/scripts.inc b/data/maps/LilycoveCity_PokemonCenter_1F/scripts.inc
index 236eb3d23..c2e1deb5d 100644
--- a/data/maps/LilycoveCity_PokemonCenter_1F/scripts.inc
+++ b/data/maps/LilycoveCity_PokemonCenter_1F/scripts.inc
@@ -9,7 +9,7 @@ LilycoveCity_PokemonCenter_1F_OnTransition: @ 821C5BD
end
LilycoveCity_PokemonCenter_1F_EventScript_21C5C6:: @ 821C5C6
- special sub_818D9C0
+ special SetLilycoveLadyGfx
compare VAR_RESULT, 0
goto_if_eq LilycoveCity_PokemonCenter_1F_EventScript_21C5E0
compare VAR_RESULT, 1
diff --git a/data/maps/LilycoveCity_PokemonTrainerFanClub/scripts.inc b/data/maps/LilycoveCity_PokemonTrainerFanClub/scripts.inc
index 62fdd3427..d9ba545fb 100644
--- a/data/maps/LilycoveCity_PokemonTrainerFanClub/scripts.inc
+++ b/data/maps/LilycoveCity_PokemonTrainerFanClub/scripts.inc
@@ -558,13 +558,13 @@ LilycoveCity_PokemonTrainerFanClub_EventScript_21CE4D:: @ 821CE4D
special BufferStreakTrainerText
message LilycoveCity_PokemonTrainerFanClub_Text_281C95
waitmessage
- setvar VAR_0x8004, 2
- special sub_813A128
+ setvar VAR_0x8004, SCROLL_MULTI_POKEMON_FAN_CLUB_RATER
+ special ShowScrollableMultichoice
waitstate
setvar VAR_0x8004, 8
switch VAR_RESULT
case 11, LilycoveCity_PokemonTrainerFanClub_EventScript_21CE9F
- case 127, LilycoveCity_PokemonTrainerFanClub_EventScript_21CE9F
+ case MULTI_B_PRESSED, LilycoveCity_PokemonTrainerFanClub_EventScript_21CE9F
setvar VAR_0x8004, 8
special BufferStreakTrainerText
copyvar VAR_0x8006, VAR_0x800A
diff --git a/data/maps/LinkContestRoom1/scripts.inc b/data/maps/LinkContestRoom1/scripts.inc
index e0cd24eff..9fb83a7a9 100644
--- a/data/maps/LinkContestRoom1/scripts.inc
+++ b/data/maps/LinkContestRoom1/scripts.inc
@@ -172,131 +172,131 @@ LinkContestRoom1_EventScript_23B8F8:: @ 823B8F8
end
LinkContestRoom1_EventScript_23BA6B:: @ 823BA6B
- setvar VAR_TEMP_1, 5
+ setvar VAR_TEMP_1, EVENT_OBJ_GFX_NINJA_BOY
return
LinkContestRoom1_EventScript_23BA71:: @ 823BA71
- setvar VAR_TEMP_1, 6
+ setvar VAR_TEMP_1, EVENT_OBJ_GFX_TWIN
return
LinkContestRoom1_EventScript_23BA77:: @ 823BA77
- setvar VAR_TEMP_1, 7
+ setvar VAR_TEMP_1, EVENT_OBJ_GFX_BOY_1
return
LinkContestRoom1_EventScript_23BA7D:: @ 823BA7D
- setvar VAR_TEMP_1, 8
+ setvar VAR_TEMP_1, EVENT_OBJ_GFX_GIRL_1
return
LinkContestRoom1_EventScript_23BA83:: @ 823BA83
- setvar VAR_TEMP_1, 10
+ setvar VAR_TEMP_1, EVENT_OBJ_GFX_GIRL_2
return
LinkContestRoom1_EventScript_23BA89:: @ 823BA89
- setvar VAR_TEMP_1, 11
+ setvar VAR_TEMP_1, EVENT_OBJ_GFX_LITTLE_BOY
return
LinkContestRoom1_EventScript_23BA8F:: @ 823BA8F
- setvar VAR_TEMP_1, 12
+ setvar VAR_TEMP_1, EVENT_OBJ_GFX_LITTLE_GIRL
return
LinkContestRoom1_EventScript_23BA95:: @ 823BA95
- setvar VAR_TEMP_1, 13
+ setvar VAR_TEMP_1, EVENT_OBJ_GFX_BOY_3
return
LinkContestRoom1_EventScript_23BA9B:: @ 823BA9B
- setvar VAR_TEMP_1, 14
+ setvar VAR_TEMP_1, EVENT_OBJ_GFX_GIRL_3
return
LinkContestRoom1_EventScript_23BAA1:: @ 823BAA1
- setvar VAR_TEMP_1, 15
+ setvar VAR_TEMP_1, EVENT_OBJ_GFX_RICH_BOY
return
LinkContestRoom1_EventScript_23BAA7:: @ 823BAA7
- setvar VAR_TEMP_1, 17
+ setvar VAR_TEMP_1, EVENT_OBJ_GFX_FAT_MAN
return
LinkContestRoom1_EventScript_23BAAD:: @ 823BAAD
- setvar VAR_TEMP_1, 18
+ setvar VAR_TEMP_1, EVENT_OBJ_GFX_POKEFAN_F
return
LinkContestRoom1_EventScript_23BAB3:: @ 823BAB3
- setvar VAR_TEMP_1, 19
+ setvar VAR_TEMP_1, EVENT_OBJ_GFX_MAN_1
return
LinkContestRoom1_EventScript_23BAB9:: @ 823BAB9
- setvar VAR_TEMP_1, 20
+ setvar VAR_TEMP_1, EVENT_OBJ_GFX_WOMAN_2
return
LinkContestRoom1_EventScript_23BABF:: @ 823BABF
- setvar VAR_TEMP_1, 21
+ setvar VAR_TEMP_1, EVENT_OBJ_GFX_EXPERT_M
return
LinkContestRoom1_EventScript_23BAC5:: @ 823BAC5
- setvar VAR_TEMP_1, 22
+ setvar VAR_TEMP_1, EVENT_OBJ_GFX_EXPERT_F
return
LinkContestRoom1_EventScript_23BACB:: @ 823BACB
- setvar VAR_TEMP_1, 25
+ setvar VAR_TEMP_1, EVENT_OBJ_GFX_POKEFAN_M
return
LinkContestRoom1_EventScript_23BAD1:: @ 823BAD1
- setvar VAR_TEMP_1, 26
+ setvar VAR_TEMP_1, EVENT_OBJ_GFX_WOMAN_4
return
LinkContestRoom1_EventScript_23BAD7:: @ 823BAD7
- setvar VAR_TEMP_1, 27
+ setvar VAR_TEMP_1, EVENT_OBJ_GFX_COOK
return
LinkContestRoom1_EventScript_23BADD:: @ 823BADD
- setvar VAR_TEMP_1, 47
+ setvar VAR_TEMP_1, EVENT_OBJ_GFX_LASS
return
LinkContestRoom1_EventScript_23BAE3:: @ 823BAE3
- setvar VAR_TEMP_1, 30
+ setvar VAR_TEMP_1, EVENT_OBJ_GFX_OLD_WOMAN
return
LinkContestRoom1_EventScript_23BAE9:: @ 823BAE9
- setvar VAR_TEMP_1, 31
+ setvar VAR_TEMP_1, EVENT_OBJ_GFX_CAMPER
return
LinkContestRoom1_EventScript_23BAEF:: @ 823BAEF
- setvar VAR_TEMP_1, 32
+ setvar VAR_TEMP_1, EVENT_OBJ_GFX_PICNICKER
return
LinkContestRoom1_EventScript_23BAF5:: @ 823BAF5
- setvar VAR_TEMP_1, 33
+ setvar VAR_TEMP_1, EVENT_OBJ_GFX_MAN_3
return
LinkContestRoom1_EventScript_23BAFB:: @ 823BAFB
- setvar VAR_TEMP_1, 34
+ setvar VAR_TEMP_1, EVENT_OBJ_GFX_WOMAN_5
return
LinkContestRoom1_EventScript_23BB01:: @ 823BB01
- setvar VAR_TEMP_1, 35
+ setvar VAR_TEMP_1, EVENT_OBJ_GFX_YOUNGSTER
return
LinkContestRoom1_EventScript_23BB07:: @ 823BB07
- setvar VAR_TEMP_1, 36
+ setvar VAR_TEMP_1, EVENT_OBJ_GFX_BUG_CATCHER
return
LinkContestRoom1_EventScript_23BB0D:: @ 823BB0D
- setvar VAR_TEMP_1, 37
+ setvar VAR_TEMP_1, EVENT_OBJ_GFX_PSYCHIC_M
return
LinkContestRoom1_EventScript_23BB13:: @ 823BB13
- setvar VAR_TEMP_1, 38
+ setvar VAR_TEMP_1, EVENT_OBJ_GFX_SCHOOL_KID_M
return
LinkContestRoom1_EventScript_23BB19:: @ 823BB19
- setvar VAR_TEMP_1, 44
+ setvar VAR_TEMP_1, EVENT_OBJ_GFX_BLACK_BELT
return
LinkContestRoom1_EventScript_23BB1F:: @ 823BB1F
- setvar VAR_TEMP_1, 45
+ setvar VAR_TEMP_1, EVENT_OBJ_GFX_BEAUTY
return
LinkContestRoom1_EventScript_23BB25:: @ 823BB25
- setvar VAR_TEMP_1, 46
+ setvar VAR_TEMP_1, EVENT_OBJ_GFX_SCIENTIST_1
return
LinkContestRoom1_EventScript_23BB2B:: @ 823BB2B
@@ -312,97 +312,97 @@ LinkContestRoom1_EventScript_23BB2B:: @ 823BB2B
return
LinkContestRoom1_EventScript_23BB78:: @ 823BB78
- createvobject EVENT_OBJ_GFX_NINJA_BOY, 20, 3, 2, 3, 1
- createvobject EVENT_OBJ_GFX_SCIENTIST_1, 24, 11, 2, 3, 1
+ createvobject EVENT_OBJ_GFX_NINJA_BOY, 20, 3, 2, 3, DIR_SOUTH
+ createvobject EVENT_OBJ_GFX_SCIENTIST_1, 24, 11, 2, 3, DIR_SOUTH
return
LinkContestRoom1_EventScript_23BB8B:: @ 823BB8B
- createvobject EVENT_OBJ_GFX_BEAUTY, 0, 2, 3, 3, 4
- createvobject EVENT_OBJ_GFX_MAN_5, 1, 2, 4, 3, 4
- createvobject EVENT_OBJ_GFX_HIKER, 2, 2, 7, 3, 4
- createvobject EVENT_OBJ_GFX_SCIENTIST_1, 3, 2, 8, 3, 4
- createvobject EVENT_OBJ_GFX_NINJA_BOY, 10, 12, 3, 3, 3
- createvobject EVENT_OBJ_GFX_WOMAN_2, 11, 12, 4, 3, 3
- createvobject EVENT_OBJ_GFX_WOMAN_3, 12, 12, 7, 3, 3
- createvobject EVENT_OBJ_GFX_LITTLE_GIRL, 13, 12, 8, 3, 3
- createvobject EVENT_OBJ_GFX_LASS, 20, 3, 2, 3, 1
- createvobject EVENT_OBJ_GFX_SCIENTIST_1, 24, 11, 2, 3, 1
+ createvobject EVENT_OBJ_GFX_BEAUTY, 0, 2, 3, 3, DIR_EAST
+ createvobject EVENT_OBJ_GFX_MAN_5, 1, 2, 4, 3, DIR_EAST
+ createvobject EVENT_OBJ_GFX_HIKER, 2, 2, 7, 3, DIR_EAST
+ createvobject EVENT_OBJ_GFX_SCIENTIST_1, 3, 2, 8, 3, DIR_EAST
+ createvobject EVENT_OBJ_GFX_NINJA_BOY, 10, 12, 3, 3, DIR_WEST
+ createvobject EVENT_OBJ_GFX_WOMAN_2, 11, 12, 4, 3, DIR_WEST
+ createvobject EVENT_OBJ_GFX_WOMAN_3, 12, 12, 7, 3, DIR_WEST
+ createvobject EVENT_OBJ_GFX_LITTLE_GIRL, 13, 12, 8, 3, DIR_WEST
+ createvobject EVENT_OBJ_GFX_LASS, 20, 3, 2, 3, DIR_SOUTH
+ createvobject EVENT_OBJ_GFX_SCIENTIST_1, 24, 11, 2, 3, DIR_SOUTH
return
LinkContestRoom1_EventScript_23BBE6:: @ 823BBE6
- createvobject EVENT_OBJ_GFX_BEAUTY, 0, 2, 3, 3, 4
- createvobject EVENT_OBJ_GFX_MAN_5, 1, 2, 4, 3, 4
- createvobject EVENT_OBJ_GFX_HIKER, 2, 2, 7, 3, 4
- createvobject EVENT_OBJ_GFX_GENTLEMAN, 3, 2, 8, 3, 4
- createvobject EVENT_OBJ_GFX_NINJA_BOY, 10, 12, 3, 3, 3
- createvobject EVENT_OBJ_GFX_WOMAN_2, 11, 12, 4, 3, 3
- createvobject EVENT_OBJ_GFX_WOMAN_3, 12, 12, 7, 3, 3
- createvobject EVENT_OBJ_GFX_BEAUTY, 13, 12, 8, 3, 3
- createvobject EVENT_OBJ_GFX_EXPERT_F, 20, 3, 2, 3, 1
- createvobject EVENT_OBJ_GFX_MAN_2, 20, 6, 2, 3, 1
- createvobject EVENT_OBJ_GFX_WOMAN_5, 20, 7, 2, 3, 1
- createvobject EVENT_OBJ_GFX_SCIENTIST_1, 24, 8, 2, 3, 1
- createvobject EVENT_OBJ_GFX_GENTLEMAN, 24, 11, 2, 3, 1
- createvobject EVENT_OBJ_GFX_LITTLE_BOY, 25, 3, 9, 3, 2
- createvobject EVENT_OBJ_GFX_YOUNGSTER, 26, 4, 9, 3, 2
- createvobject EVENT_OBJ_GFX_FAT_MAN, 27, 5, 9, 3, 2
- createvobject EVENT_OBJ_GFX_HEX_MANIAC, 28, 9, 9, 3, 2
- createvobject EVENT_OBJ_GFX_SCHOOL_KID_M, 29, 10, 9, 3, 2
- createvobject EVENT_OBJ_GFX_MART_EMPLOYEE, 30, 11, 9, 3, 2
+ createvobject EVENT_OBJ_GFX_BEAUTY, 0, 2, 3, 3, DIR_EAST
+ createvobject EVENT_OBJ_GFX_MAN_5, 1, 2, 4, 3, DIR_EAST
+ createvobject EVENT_OBJ_GFX_HIKER, 2, 2, 7, 3, DIR_EAST
+ createvobject EVENT_OBJ_GFX_GENTLEMAN, 3, 2, 8, 3, DIR_EAST
+ createvobject EVENT_OBJ_GFX_NINJA_BOY, 10, 12, 3, 3, DIR_WEST
+ createvobject EVENT_OBJ_GFX_WOMAN_2, 11, 12, 4, 3, DIR_WEST
+ createvobject EVENT_OBJ_GFX_WOMAN_3, 12, 12, 7, 3, DIR_WEST
+ createvobject EVENT_OBJ_GFX_BEAUTY, 13, 12, 8, 3, DIR_WEST
+ createvobject EVENT_OBJ_GFX_EXPERT_F, 20, 3, 2, 3, DIR_SOUTH
+ createvobject EVENT_OBJ_GFX_MAN_2, 20, 6, 2, 3, DIR_SOUTH
+ createvobject EVENT_OBJ_GFX_WOMAN_5, 20, 7, 2, 3, DIR_SOUTH
+ createvobject EVENT_OBJ_GFX_SCIENTIST_1, 24, 8, 2, 3, DIR_SOUTH
+ createvobject EVENT_OBJ_GFX_GENTLEMAN, 24, 11, 2, 3, DIR_SOUTH
+ createvobject EVENT_OBJ_GFX_LITTLE_BOY, 25, 3, 9, 3, DIR_NORTH
+ createvobject EVENT_OBJ_GFX_YOUNGSTER, 26, 4, 9, 3, DIR_NORTH
+ createvobject EVENT_OBJ_GFX_FAT_MAN, 27, 5, 9, 3, DIR_NORTH
+ createvobject EVENT_OBJ_GFX_HEX_MANIAC, 28, 9, 9, 3, DIR_NORTH
+ createvobject EVENT_OBJ_GFX_SCHOOL_KID_M, 29, 10, 9, 3, DIR_NORTH
+ createvobject EVENT_OBJ_GFX_MART_EMPLOYEE, 30, 11, 9, 3, DIR_NORTH
return
LinkContestRoom1_EventScript_23BC92:: @ 823BC92
- createvobject EVENT_OBJ_GFX_BEAUTY, 0, 2, 3, 3, 4
- createvobject EVENT_OBJ_GFX_MAN_5, 1, 2, 4, 3, 4
- createvobject EVENT_OBJ_GFX_HIKER, 2, 2, 7, 3, 4
- createvobject EVENT_OBJ_GFX_LITTLE_GIRL, 3, 2, 8, 3, 4
- createvobject EVENT_OBJ_GFX_MANIAC, 4, 1, 3, 3, 4
- createvobject EVENT_OBJ_GFX_WOMAN_5, 6, 1, 5, 3, 4
- createvobject EVENT_OBJ_GFX_WOMAN_4, 7, 1, 6, 3, 4
- createvobject EVENT_OBJ_GFX_GENTLEMAN, 9, 1, 8, 3, 4
- createvobject EVENT_OBJ_GFX_NINJA_BOY, 10, 12, 3, 3, 3
- createvobject EVENT_OBJ_GFX_WOMAN_2, 11, 12, 4, 3, 3
- createvobject EVENT_OBJ_GFX_WOMAN_3, 12, 12, 7, 3, 3
- createvobject EVENT_OBJ_GFX_BEAUTY, 13, 12, 8, 3, 3
- createvobject EVENT_OBJ_GFX_FISHERMAN, 14, 13, 3, 3, 3
- createvobject EVENT_OBJ_GFX_RUNNING_TRIATHLETE_F, 15, 13, 4, 3, 3
- createvobject EVENT_OBJ_GFX_MAN_4, 17, 13, 6, 3, 3
- createvobject EVENT_OBJ_GFX_MART_EMPLOYEE, 18, 13, 7, 3, 3
- createvobject EVENT_OBJ_GFX_DEVON_EMPLOYEE, 19, 13, 8, 3, 3
- createvobject EVENT_OBJ_GFX_POKEFAN_M, 20, 3, 2, 3, 1
- createvobject EVENT_OBJ_GFX_CAMPER, 21, 6, 2, 3, 1
- createvobject EVENT_OBJ_GFX_MAN_3, 22, 7, 2, 3, 1
- createvobject EVENT_OBJ_GFX_SCIENTIST_1, 24, 11, 2, 3, 1
- createvobject EVENT_OBJ_GFX_SAILOR, 25, 3, 9, 3, 2
- createvobject EVENT_OBJ_GFX_YOUNGSTER, 26, 4, 9, 3, 2
- createvobject EVENT_OBJ_GFX_GENTLEMAN, 27, 5, 9, 3, 2
- createvobject EVENT_OBJ_GFX_HEX_MANIAC, 28, 9, 9, 3, 2
- createvobject EVENT_OBJ_GFX_SCHOOL_KID_M, 29, 10, 9, 3, 2
- createvobject EVENT_OBJ_GFX_MART_EMPLOYEE, 30, 11, 9, 3, 2
+ createvobject EVENT_OBJ_GFX_BEAUTY, 0, 2, 3, 3, DIR_EAST
+ createvobject EVENT_OBJ_GFX_MAN_5, 1, 2, 4, 3, DIR_EAST
+ createvobject EVENT_OBJ_GFX_HIKER, 2, 2, 7, 3, DIR_EAST
+ createvobject EVENT_OBJ_GFX_LITTLE_GIRL, 3, 2, 8, 3, DIR_EAST
+ createvobject EVENT_OBJ_GFX_MANIAC, 4, 1, 3, 3, DIR_EAST
+ createvobject EVENT_OBJ_GFX_WOMAN_5, 6, 1, 5, 3, DIR_EAST
+ createvobject EVENT_OBJ_GFX_WOMAN_4, 7, 1, 6, 3, DIR_EAST
+ createvobject EVENT_OBJ_GFX_GENTLEMAN, 9, 1, 8, 3, DIR_EAST
+ createvobject EVENT_OBJ_GFX_NINJA_BOY, 10, 12, 3, 3, DIR_WEST
+ createvobject EVENT_OBJ_GFX_WOMAN_2, 11, 12, 4, 3, DIR_WEST
+ createvobject EVENT_OBJ_GFX_WOMAN_3, 12, 12, 7, 3, DIR_WEST
+ createvobject EVENT_OBJ_GFX_BEAUTY, 13, 12, 8, 3, DIR_WEST
+ createvobject EVENT_OBJ_GFX_FISHERMAN, 14, 13, 3, 3, DIR_WEST
+ createvobject EVENT_OBJ_GFX_RUNNING_TRIATHLETE_F, 15, 13, 4, 3, DIR_WEST
+ createvobject EVENT_OBJ_GFX_MAN_4, 17, 13, 6, 3, DIR_WEST
+ createvobject EVENT_OBJ_GFX_MART_EMPLOYEE, 18, 13, 7, 3, DIR_WEST
+ createvobject EVENT_OBJ_GFX_DEVON_EMPLOYEE, 19, 13, 8, 3, DIR_WEST
+ createvobject EVENT_OBJ_GFX_POKEFAN_M, 20, 3, 2, 3, DIR_SOUTH
+ createvobject EVENT_OBJ_GFX_CAMPER, 21, 6, 2, 3, DIR_SOUTH
+ createvobject EVENT_OBJ_GFX_MAN_3, 22, 7, 2, 3, DIR_SOUTH
+ createvobject EVENT_OBJ_GFX_SCIENTIST_1, 24, 11, 2, 3, DIR_SOUTH
+ createvobject EVENT_OBJ_GFX_SAILOR, 25, 3, 9, 3, DIR_NORTH
+ createvobject EVENT_OBJ_GFX_YOUNGSTER, 26, 4, 9, 3, DIR_NORTH
+ createvobject EVENT_OBJ_GFX_GENTLEMAN, 27, 5, 9, 3, DIR_NORTH
+ createvobject EVENT_OBJ_GFX_HEX_MANIAC, 28, 9, 9, 3, DIR_NORTH
+ createvobject EVENT_OBJ_GFX_SCHOOL_KID_M, 29, 10, 9, 3, DIR_NORTH
+ createvobject EVENT_OBJ_GFX_MART_EMPLOYEE, 30, 11, 9, 3, DIR_NORTH
return
LinkContestRoom1_EventScript_23BD86:: @ 823BD86
- createvobject EVENT_OBJ_GFX_BEAUTY, 0, 2, 3, 3, 4
- createvobject EVENT_OBJ_GFX_MAN_5, 1, 2, 4, 3, 4
- createvobject EVENT_OBJ_GFX_HIKER, 2, 2, 7, 3, 4
- createvobject EVENT_OBJ_GFX_LITTLE_GIRL, 3, 2, 8, 3, 4
- createvobject EVENT_OBJ_GFX_MANIAC, 4, 1, 3, 3, 4
- createvobject EVENT_OBJ_GFX_WOMAN_5, 6, 1, 5, 3, 4
- createvobject EVENT_OBJ_GFX_WOMAN_4, 7, 1, 6, 3, 4
- createvobject EVENT_OBJ_GFX_GENTLEMAN, 9, 1, 8, 3, 4
- createvobject EVENT_OBJ_GFX_NINJA_BOY, 10, 12, 3, 3, 3
- createvobject EVENT_OBJ_GFX_WOMAN_2, 11, 12, 4, 3, 3
- createvobject EVENT_OBJ_GFX_WOMAN_3, 12, 12, 7, 3, 3
- createvobject EVENT_OBJ_GFX_BEAUTY, 13, 12, 8, 3, 3
- createvobject EVENT_OBJ_GFX_FISHERMAN, 14, 13, 3, 3, 3
- createvobject EVENT_OBJ_GFX_RUNNING_TRIATHLETE_F, 15, 13, 4, 3, 3
- createvobject EVENT_OBJ_GFX_MAN_4, 17, 13, 6, 3, 3
- createvobject EVENT_OBJ_GFX_MART_EMPLOYEE, 18, 13, 7, 3, 3
- createvobject EVENT_OBJ_GFX_DEVON_EMPLOYEE, 19, 13, 8, 3, 3
- createvobject EVENT_OBJ_GFX_POKEFAN_M, 20, 3, 2, 3, 1
- createvobject EVENT_OBJ_GFX_CAMPER, 21, 6, 2, 3, 1
- createvobject EVENT_OBJ_GFX_MAN_3, 22, 7, 2, 3, 1
- createvobject EVENT_OBJ_GFX_SCIENTIST_1, 24, 11, 2, 3, 1
+ createvobject EVENT_OBJ_GFX_BEAUTY, 0, 2, 3, 3, DIR_EAST
+ createvobject EVENT_OBJ_GFX_MAN_5, 1, 2, 4, 3, DIR_EAST
+ createvobject EVENT_OBJ_GFX_HIKER, 2, 2, 7, 3, DIR_EAST
+ createvobject EVENT_OBJ_GFX_LITTLE_GIRL, 3, 2, 8, 3, DIR_EAST
+ createvobject EVENT_OBJ_GFX_MANIAC, 4, 1, 3, 3, DIR_EAST
+ createvobject EVENT_OBJ_GFX_WOMAN_5, 6, 1, 5, 3, DIR_EAST
+ createvobject EVENT_OBJ_GFX_WOMAN_4, 7, 1, 6, 3, DIR_EAST
+ createvobject EVENT_OBJ_GFX_GENTLEMAN, 9, 1, 8, 3, DIR_EAST
+ createvobject EVENT_OBJ_GFX_NINJA_BOY, 10, 12, 3, 3, DIR_WEST
+ createvobject EVENT_OBJ_GFX_WOMAN_2, 11, 12, 4, 3, DIR_WEST
+ createvobject EVENT_OBJ_GFX_WOMAN_3, 12, 12, 7, 3, DIR_WEST
+ createvobject EVENT_OBJ_GFX_BEAUTY, 13, 12, 8, 3, DIR_WEST
+ createvobject EVENT_OBJ_GFX_FISHERMAN, 14, 13, 3, 3, DIR_WEST
+ createvobject EVENT_OBJ_GFX_RUNNING_TRIATHLETE_F, 15, 13, 4, 3, DIR_WEST
+ createvobject EVENT_OBJ_GFX_MAN_4, 17, 13, 6, 3, DIR_WEST
+ createvobject EVENT_OBJ_GFX_MART_EMPLOYEE, 18, 13, 7, 3, DIR_WEST
+ createvobject EVENT_OBJ_GFX_DEVON_EMPLOYEE, 19, 13, 8, 3, DIR_WEST
+ createvobject EVENT_OBJ_GFX_POKEFAN_M, 20, 3, 2, 3, DIR_SOUTH
+ createvobject EVENT_OBJ_GFX_CAMPER, 21, 6, 2, 3, DIR_SOUTH
+ createvobject EVENT_OBJ_GFX_MAN_3, 22, 7, 2, 3, DIR_SOUTH
+ createvobject EVENT_OBJ_GFX_SCIENTIST_1, 24, 11, 2, 3, DIR_SOUTH
return
LinkContestRoom1_EventScript_23BE44:: @ 823BE44
diff --git a/data/maps/LittlerootTown/scripts.inc b/data/maps/LittlerootTown/scripts.inc
index 8f10f2b4d..d42f277eb 100644
--- a/data/maps/LittlerootTown/scripts.inc
+++ b/data/maps/LittlerootTown/scripts.inc
@@ -208,7 +208,7 @@ LittlerootTown_EventScript_1E7FEC:: @ 81E7FEC
addobject 8
addobject 7
checkplayergender
- compare VAR_RESULT, 0
+ compare VAR_RESULT, MALE
goto_if_eq LittlerootTown_EventScript_1E8004
goto LittlerootTown_EventScript_1E8013
end
diff --git a/data/maps/LittlerootTown_BrendansHouse_1F/scripts.inc b/data/maps/LittlerootTown_BrendansHouse_1F/scripts.inc
index 17cca3ea9..397bdfb8f 100644
--- a/data/maps/LittlerootTown_BrendansHouse_1F/scripts.inc
+++ b/data/maps/LittlerootTown_BrendansHouse_1F/scripts.inc
@@ -17,7 +17,7 @@ LittlerootTown_BrendansHouse_1F_EventScript_1F777A:: @ 81F777A
LittlerootTown_BrendansHouse_1F_EventScript_1F778D:: @ 81F778D
checkplayergender
- compare VAR_RESULT, 0
+ compare VAR_RESULT, MALE
goto_if_eq LittlerootTown_BrendansHouse_1F_EventScript_1F779A
return
diff --git a/data/maps/LittlerootTown_BrendansHouse_2F/scripts.inc b/data/maps/LittlerootTown_BrendansHouse_2F/scripts.inc
index 3bb088ccf..394db3e22 100644
--- a/data/maps/LittlerootTown_BrendansHouse_2F/scripts.inc
+++ b/data/maps/LittlerootTown_BrendansHouse_2F/scripts.inc
@@ -22,7 +22,7 @@ LittlerootTown_BrendansHouse_2F_EventScript_1F841A:: @ 81F841A
LittlerootTown_BrendansHouse_2F_EventScript_1F8433:: @ 81F8433
checkplayergender
- compare VAR_RESULT, 0
+ compare VAR_RESULT, MALE
goto_if_eq LittlerootTown_BrendansHouse_2F_EventScript_1F8456
compare VAR_DEX_UPGRADE_JOHTO_STARTER_STATE, 2
goto_if_ge LittlerootTown_BrendansHouse_2F_EventScript_1F9309
@@ -35,7 +35,7 @@ LittlerootTown_BrendansHouse_2F_EventScript_1F8456:: @ 81F8456
LittlerootTown_BrendansHouse_2F_EventScript_1F8457:: @ 81F8457
checkplayergender
- compare VAR_RESULT, 1
+ compare VAR_RESULT, FEMALE
goto_if_eq LittlerootTown_BrendansHouse_2F_EventScript_1F8464
return
@@ -49,7 +49,7 @@ LittlerootTown_BrendansHouse_2F_MapScript2_1F846A: @ 81F846A
LittlerootTown_BrendansHouse_2F_EventScript_1F8474:: @ 81F8474
checkplayergender
- compare VAR_RESULT, 0
+ compare VAR_RESULT, MALE
goto_if_eq EventScript_275D0C
end
diff --git a/data/maps/LittlerootTown_MaysHouse_1F/scripts.inc b/data/maps/LittlerootTown_MaysHouse_1F/scripts.inc
index d983c9e64..510f8c249 100644
--- a/data/maps/LittlerootTown_MaysHouse_1F/scripts.inc
+++ b/data/maps/LittlerootTown_MaysHouse_1F/scripts.inc
@@ -17,7 +17,7 @@ LittlerootTown_MaysHouse_1F_EventScript_1F88CA:: @ 81F88CA
LittlerootTown_MaysHouse_1F_EventScript_1F88DD:: @ 81F88DD
checkplayergender
- compare VAR_RESULT, 1
+ compare VAR_RESULT, FEMALE
goto_if_eq LittlerootTown_MaysHouse_1F_EventScript_1F88EA
return
diff --git a/data/maps/LittlerootTown_MaysHouse_2F/scripts.inc b/data/maps/LittlerootTown_MaysHouse_2F/scripts.inc
index dde6df71d..13fefa5a3 100644
--- a/data/maps/LittlerootTown_MaysHouse_2F/scripts.inc
+++ b/data/maps/LittlerootTown_MaysHouse_2F/scripts.inc
@@ -22,7 +22,7 @@ LittlerootTown_MaysHouse_2F_EventScript_1F92CD:: @ 81F92CD
LittlerootTown_MaysHouse_2F_EventScript_1F92E6:: @ 81F92E6
checkplayergender
- compare VAR_RESULT, 1
+ compare VAR_RESULT, FEMALE
goto_if_eq LittlerootTown_MaysHouse_2F_EventScript_1F9309
compare VAR_DEX_UPGRADE_JOHTO_STARTER_STATE, 2
goto_if_ge LittlerootTown_MaysHouse_2F_EventScript_1F9309
@@ -36,7 +36,7 @@ LittlerootTown_MaysHouse_2F_EventScript_1F9309:: @ 81F9309
LittlerootTown_MaysHouse_2F_EventScript_1F930A:: @ 81F930A
checkplayergender
- compare VAR_RESULT, 0
+ compare VAR_RESULT, MALE
goto_if_eq LittlerootTown_MaysHouse_2F_EventScript_1F9317
return
@@ -50,7 +50,7 @@ LittlerootTown_MaysHouse_2F_MapScript2_1F931D: @ 81F931D
LittlerootTown_MaysHouse_2F_EventScript_1F9327:: @ 81F9327
checkplayergender
- compare VAR_RESULT, 1
+ compare VAR_RESULT, FEMALE
goto_if_eq EventScript_275D0C
end
diff --git a/data/maps/LittlerootTown_ProfessorBirchsLab/scripts.inc b/data/maps/LittlerootTown_ProfessorBirchsLab/scripts.inc
index c4f704520..9949df08c 100644
--- a/data/maps/LittlerootTown_ProfessorBirchsLab/scripts.inc
+++ b/data/maps/LittlerootTown_ProfessorBirchsLab/scripts.inc
@@ -48,18 +48,18 @@ LittlerootTown_ProfessorBirchsLab_MapScript2_1F9D06: @ 81F9D06
.2byte 0
LittlerootTown_ProfessorBirchsLab_EventScript_1F9D40:: @ 81F9D40
- turnobject EVENT_OBJ_ID_PLAYER, 2
+ turnobject EVENT_OBJ_ID_PLAYER, DIR_NORTH
end
LittlerootTown_ProfessorBirchsLab_EventScript_1F9D45:: @ 81F9D45
- turnobject EVENT_OBJ_ID_PLAYER, 2
+ turnobject EVENT_OBJ_ID_PLAYER, DIR_NORTH
addobject 2
addobject 3
- turnobject 3, 2
+ turnobject 3, DIR_NORTH
setobjectxy 3, 5, 5
- turnobject 2, 1
+ turnobject 2, DIR_SOUTH
setobjectxy 2, 6, 4
- turnobject 1, 4
+ turnobject 1, DIR_EAST
setobjectxy 1, 10, 10
end
@@ -72,15 +72,15 @@ LittlerootTown_ProfessorBirchsLab_EventScript_1F9D75:: @ 81F9D75
addobject 5
addobject 6
addobject 3
- turnobject 4, 1
+ turnobject 4, DIR_SOUTH
setobjectxy 4, 8, 4
- turnobject 5, 1
+ turnobject 5, DIR_SOUTH
setobjectxy 5, 9, 4
- turnobject 6, 1
+ turnobject 6, DIR_SOUTH
setobjectxy 6, 10, 4
- turnobject 2, 1
+ turnobject 2, DIR_SOUTH
setobjectxy 2, 6, 4
- turnobject 3, 4
+ turnobject 3, DIR_EAST
setobjectxy 3, 5, 5
end
@@ -335,7 +335,7 @@ LittlerootTown_ProfessorBirchsLab_EventScript_1FA061:: @ 81FA061
LittlerootTown_ProfessorBirchsLab_EventScript_1FA06C:: @ 81FA06C
bufferspeciesname 0, SPECIES_CYNDAQUIL
setvar VAR_TEMP_1, SPECIES_CYNDAQUIL
- givemon SPECIES_CYNDAQUIL, 5, ITEM_NONE, 0x0, 0x0, 0
+ givemon SPECIES_CYNDAQUIL, 5, ITEM_NONE
compare VAR_RESULT, 0
goto_if_eq LittlerootTown_ProfessorBirchsLab_EventScript_1FA0A1
compare VAR_RESULT, 1
@@ -380,7 +380,7 @@ LittlerootTown_ProfessorBirchsLab_EventScript_1FA0FD:: @ 81FA0FD
LittlerootTown_ProfessorBirchsLab_EventScript_1FA10D:: @ 81FA10D
bufferspeciesname 0, SPECIES_TOTODILE
setvar VAR_TEMP_1, SPECIES_TOTODILE
- givemon SPECIES_TOTODILE, 5, ITEM_NONE, 0x0, 0x0, 0
+ givemon SPECIES_TOTODILE, 5, ITEM_NONE
compare VAR_RESULT, 0
goto_if_eq LittlerootTown_ProfessorBirchsLab_EventScript_1FA142
compare VAR_RESULT, 1
@@ -425,7 +425,7 @@ LittlerootTown_ProfessorBirchsLab_EventScript_1FA19E:: @ 81FA19E
LittlerootTown_ProfessorBirchsLab_EventScript_1FA1AE:: @ 81FA1AE
bufferspeciesname 0, SPECIES_CHIKORITA
setvar VAR_TEMP_1, SPECIES_CHIKORITA
- givemon SPECIES_CHIKORITA, 5, ITEM_NONE, 0x0, 0x0, 0
+ givemon SPECIES_CHIKORITA, 5, ITEM_NONE
compare VAR_RESULT, 0
goto_if_eq LittlerootTown_ProfessorBirchsLab_EventScript_1FA1E3
compare VAR_RESULT, 1
diff --git a/data/maps/MauvilleCity_BikeShop/scripts.inc b/data/maps/MauvilleCity_BikeShop/scripts.inc
index fe6832423..a5b20cf60 100644
--- a/data/maps/MauvilleCity_BikeShop/scripts.inc
+++ b/data/maps/MauvilleCity_BikeShop/scripts.inc
@@ -25,7 +25,7 @@ MauvilleCity_BikeShop_EventScript_20EBF7:: @ 820EBF7
MauvilleCity_BikeShop_EventScript_20EC16:: @ 820EC16
message MauvilleCity_BikeShop_Text_20EF32
waitmessage
- multichoice 21, 8, 12, 1
+ multichoice 21, 8, MULTI_BIKE, 1
switch VAR_RESULT
case 0, MauvilleCity_BikeShop_EventScript_20EC53
case 1, MauvilleCity_BikeShop_EventScript_20EC6D
@@ -112,13 +112,13 @@ MauvilleCity_BikeShop_EventScript_20ED3A:: @ 820ED3A
end
MauvilleCity_BikeShop_EventScript_20ED46:: @ 820ED46
- multichoice 0, 0, 43, 0
+ multichoice 0, 0, MULTI_MACH_BIKE_INFO, 0
switch VAR_RESULT
case 0, MauvilleCity_BikeShop_EventScript_20ED88
case 1, MauvilleCity_BikeShop_EventScript_20ED94
case 2, MauvilleCity_BikeShop_EventScript_20EDA0
case 3, MauvilleCity_BikeShop_EventScript_20EDAC
- case 127, MauvilleCity_BikeShop_EventScript_20EDAC
+ case MULTI_B_PRESSED, MauvilleCity_BikeShop_EventScript_20EDAC
end
MauvilleCity_BikeShop_EventScript_20ED88:: @ 820ED88
@@ -150,13 +150,13 @@ MauvilleCity_BikeShop_EventScript_20EDAE:: @ 820EDAE
end
MauvilleCity_BikeShop_EventScript_20EDBA:: @ 820EDBA
- multichoice 0, 0, 44, 0
+ multichoice 0, 0, MULTI_ACRO_BIKE_INFO, 0
switch VAR_RESULT
case 0, MauvilleCity_BikeShop_EventScript_20EDFC
case 1, MauvilleCity_BikeShop_EventScript_20EE08
case 2, MauvilleCity_BikeShop_EventScript_20EE14
case 3, MauvilleCity_BikeShop_EventScript_20EE20
- case 127, MauvilleCity_BikeShop_EventScript_20EE20
+ case MULTI_B_PRESSED, MauvilleCity_BikeShop_EventScript_20EE20
end
MauvilleCity_BikeShop_EventScript_20EDFC:: @ 820EDFC
diff --git a/data/maps/MauvilleCity_GameCorner/scripts.inc b/data/maps/MauvilleCity_GameCorner/scripts.inc
index 88b1ded16..a6ee8ec85 100644
--- a/data/maps/MauvilleCity_GameCorner/scripts.inc
+++ b/data/maps/MauvilleCity_GameCorner/scripts.inc
@@ -15,7 +15,7 @@ MauvilleCity_GameCorner_EventScript_20FBB9:: @ 820FBB9
goto MauvilleCity_GameCorner_EventScript_20FBE5
MauvilleCity_GameCorner_EventScript_20FBE5:: @ 820FBE5
- multichoicedefault 15, 0, 49, 0, 0
+ multichoicedefault 15, 0, MULTI_GAME_CORNER_COINS, 0, 0
switch VAR_RESULT
case 0, MauvilleCity_GameCorner_EventScript_20FC33
case 1, MauvilleCity_GameCorner_EventScript_20FC75
@@ -23,7 +23,7 @@ MauvilleCity_GameCorner_EventScript_20FBE5:: @ 820FBE5
end
MauvilleCity_GameCorner_EventScript_20FC0C:: @ 820FC0C
- multichoicedefault 15, 0, 49, 1, 0
+ multichoicedefault 15, 0, MULTI_GAME_CORNER_COINS, 1, 0
switch VAR_RESULT
case 0, MauvilleCity_GameCorner_EventScript_20FC33
case 1, MauvilleCity_GameCorner_EventScript_20FC75
@@ -34,13 +34,12 @@ MauvilleCity_GameCorner_EventScript_20FC33:: @ 820FC33
checkcoins VAR_TEMP_1
compare VAR_TEMP_1, 9950
goto_if_ge MauvilleCity_GameCorner_EventScript_20FCE1
- checkmoney 0x3e8, 0
+ checkmoney 1000, 0
compare VAR_RESULT, 0
goto_if_eq MauvilleCity_GameCorner_EventScript_20FCC1
givecoins 50
- takemoney 0x3e8, 0
+ takemoney 1000, 0
updatemoneybox 0, 0
- nop
updatecoinsbox 1, 6
playse SE_REGI
msgbox MauvilleCity_GameCorner_Text_210529, MSGBOX_DEFAULT
@@ -55,13 +54,12 @@ MauvilleCity_GameCorner_EventScript_20FC75:: @ 820FC75
checkcoins VAR_TEMP_1
compare VAR_TEMP_1, 9500
goto_if_ge MauvilleCity_GameCorner_EventScript_20FCE1
- checkmoney 0x2710, 0
+ checkmoney 10000, 0
compare VAR_RESULT, 0
goto_if_eq MauvilleCity_GameCorner_EventScript_20FCC1
givecoins 500
- takemoney 0x2710, 0
+ takemoney 10000, 0
updatemoneybox 0, 0
- nop
updatecoinsbox 1, 6
playse SE_REGI
msgbox MauvilleCity_GameCorner_Text_210529, MSGBOX_DEFAULT
@@ -127,7 +125,7 @@ MauvilleCity_GameCorner_EventScript_20FD20:: @ 820FD20
goto MauvilleCity_GameCorner_EventScript_20FD2B
MauvilleCity_GameCorner_EventScript_20FD2B:: @ 820FD2B
- multichoice 12, 0, 48, 0
+ multichoice 12, 0, MULTI_GAME_CORNER_DOLLS, 0
switch VAR_RESULT
case 0, MauvilleCity_GameCorner_EventScript_20FD67
case 1, MauvilleCity_GameCorner_EventScript_20FD75
@@ -138,17 +136,17 @@ MauvilleCity_GameCorner_EventScript_20FD2B:: @ 820FD2B
MauvilleCity_GameCorner_EventScript_20FD67:: @ 820FD67
setvar VAR_TEMP_1, 1
- bufferdecorationname 0, 88
+ bufferdecorationname 0, DECOR_TREECKO_DOLL
goto MauvilleCity_GameCorner_EventScript_20FD91
MauvilleCity_GameCorner_EventScript_20FD75:: @ 820FD75
setvar VAR_TEMP_1, 2
- bufferdecorationname 0, 89
+ bufferdecorationname 0, DECOR_TORCHIC_DOLL
goto MauvilleCity_GameCorner_EventScript_20FD91
MauvilleCity_GameCorner_EventScript_20FD83:: @ 820FD83
setvar VAR_TEMP_1, 3
- bufferdecorationname 0, 90
+ bufferdecorationname 0, DECOR_MUDKIP_DOLL
goto MauvilleCity_GameCorner_EventScript_20FD91
MauvilleCity_GameCorner_EventScript_20FD91:: @ 820FD91
@@ -165,12 +163,12 @@ MauvilleCity_GameCorner_EventScript_20FDCB:: @ 820FDCB
checkcoins VAR_TEMP_2
compare VAR_TEMP_2, 1000
goto_if_lt MauvilleCity_GameCorner_EventScript_20FE79
- bufferdecorationname 1, 88
- checkdecorspace 88
+ bufferdecorationname 1, DECOR_TREECKO_DOLL
+ checkdecorspace DECOR_TREECKO_DOLL
compare VAR_RESULT, 0
goto_if_eq MauvilleCity_GameCorner_EventScript_20FE87
takecoins 1000
- givedecoration 88
+ givedecoration DECOR_TREECKO_DOLL
updatecoinsbox 1, 1
playse SE_REGI
msgbox MauvilleCity_GameCorner_Text_210646, MSGBOX_DEFAULT
@@ -181,12 +179,12 @@ MauvilleCity_GameCorner_EventScript_20FE05:: @ 820FE05
checkcoins VAR_TEMP_2
compare VAR_TEMP_2, 1000
goto_if_lt MauvilleCity_GameCorner_EventScript_20FE79
- bufferdecorationname 1, 89
- checkdecorspace 89
+ bufferdecorationname 1, DECOR_TORCHIC_DOLL
+ checkdecorspace DECOR_TORCHIC_DOLL
compare VAR_RESULT, 0
goto_if_eq MauvilleCity_GameCorner_EventScript_20FE87
takecoins 1000
- givedecoration 89
+ givedecoration DECOR_TORCHIC_DOLL
updatecoinsbox 1, 1
playse SE_REGI
msgbox MauvilleCity_GameCorner_Text_210646, MSGBOX_DEFAULT
@@ -197,12 +195,12 @@ MauvilleCity_GameCorner_EventScript_20FE3F:: @ 820FE3F
checkcoins VAR_TEMP_2
compare VAR_TEMP_2, 1000
goto_if_lt MauvilleCity_GameCorner_EventScript_20FE79
- bufferdecorationname 1, 90
- checkdecorspace 90
+ bufferdecorationname 1, DECOR_MUDKIP_DOLL
+ checkdecorspace DECOR_MUDKIP_DOLL
compare VAR_RESULT, 0
goto_if_eq MauvilleCity_GameCorner_EventScript_20FE87
takecoins 1000
- givedecoration 90
+ givedecoration DECOR_MUDKIP_DOLL
updatecoinsbox 1, 1
playse SE_REGI
msgbox MauvilleCity_GameCorner_Text_210646, MSGBOX_DEFAULT
@@ -248,7 +246,7 @@ MauvilleCity_GameCorner_EventScript_20FECE:: @ 820FECE
goto MauvilleCity_GameCorner_EventScript_20FED9
MauvilleCity_GameCorner_EventScript_20FED9:: @ 820FED9
- multichoice 12, 0, 55, 0
+ multichoice 12, 0, MULTI_GAME_CORNER_TMS, 0
switch VAR_RESULT
case 0, MauvilleCity_GameCorner_EventScript_20FF2B
case 1, MauvilleCity_GameCorner_EventScript_20FF3E
@@ -290,7 +288,7 @@ MauvilleCity_GameCorner_EventScript_20FF77:: @ 820FF77
goto MauvilleCity_GameCorner_EventScript_20FF8A
MauvilleCity_GameCorner_EventScript_20FF8A:: @ 820FF8A
- special sub_81398C0
+ special BufferTMHMMoveName
msgbox MauvilleCity_GameCorner_Text_210629, MSGBOX_YESNO
compare VAR_RESULT, 0
goto_if_eq MauvilleCity_GameCorner_EventScript_210118
@@ -415,34 +413,34 @@ MauvilleCity_GameCorner_EventScript_210137:: @ 8210137
end
MauvilleCity_GameCorner_EventScript_21017C:: @ 821017C
- bufferdecorationname 1, 88
- checkdecorspace 88
+ bufferdecorationname 1, DECOR_TREECKO_DOLL
+ checkdecorspace DECOR_TREECKO_DOLL
compare VAR_RESULT, 0
goto_if_eq MauvilleCity_GameCorner_EventScript_2101FA
msgbox MauvilleCity_GameCorner_Text_21079C, MSGBOX_DEFAULT
- givedecoration_std 88
+ givedecoration_std DECOR_TREECKO_DOLL
setflag FLAG_RECEIVED_STARTER_DOLL
goto MauvilleCity_GameCorner_EventScript_210213
end
MauvilleCity_GameCorner_EventScript_2101A6:: @ 82101A6
- bufferdecorationname 1, 89
- checkdecorspace 89
+ bufferdecorationname 1, DECOR_TORCHIC_DOLL
+ checkdecorspace DECOR_TORCHIC_DOLL
compare VAR_RESULT, 0
goto_if_eq MauvilleCity_GameCorner_EventScript_2101FA
msgbox MauvilleCity_GameCorner_Text_21079C, MSGBOX_DEFAULT
- givedecoration_std 89
+ givedecoration_std DECOR_TORCHIC_DOLL
setflag FLAG_RECEIVED_STARTER_DOLL
goto MauvilleCity_GameCorner_EventScript_210213
end
MauvilleCity_GameCorner_EventScript_2101D0:: @ 82101D0
- bufferdecorationname 1, 90
- checkdecorspace 90
+ bufferdecorationname 1, DECOR_MUDKIP_DOLL
+ checkdecorspace DECOR_MUDKIP_DOLL
compare VAR_RESULT, 0
goto_if_eq MauvilleCity_GameCorner_EventScript_2101FA
msgbox MauvilleCity_GameCorner_Text_21079C, MSGBOX_DEFAULT
- givedecoration_std 90
+ givedecoration_std DECOR_MUDKIP_DOLL
setflag FLAG_RECEIVED_STARTER_DOLL
goto MauvilleCity_GameCorner_EventScript_210213
end
diff --git a/data/maps/MossdeepCity_SpaceCenter_1F/scripts.inc b/data/maps/MossdeepCity_SpaceCenter_1F/scripts.inc
index b129e137e..144113d72 100644
--- a/data/maps/MossdeepCity_SpaceCenter_1F/scripts.inc
+++ b/data/maps/MossdeepCity_SpaceCenter_1F/scripts.inc
@@ -236,7 +236,7 @@ MossdeepCity_SpaceCenter_1F_EventScript_22321F:: @ 822321F
msgbox MossdeepCity_SpaceCenter_1F_Text_223B90, MSGBOX_DEFAULT
trainerbattle_no_intro TRAINER_GRUNT_23, MossdeepCity_SpaceCenter_1F_Text_223BC2
setflag FLAG_DEFEATED_GRUNT_SPACE_CENTER_1F
- moveobjectoffscreen 9
+ copyobjectxytoperm 9
switch VAR_FACING
case 3, MossdeepCity_SpaceCenter_1F_EventScript_223278
case 3, MossdeepCity_SpaceCenter_1F_EventScript_223289
diff --git a/data/maps/MossdeepCity_SpaceCenter_2F/scripts.inc b/data/maps/MossdeepCity_SpaceCenter_2F/scripts.inc
index 11abafa0c..903dc8136 100644
--- a/data/maps/MossdeepCity_SpaceCenter_2F/scripts.inc
+++ b/data/maps/MossdeepCity_SpaceCenter_2F/scripts.inc
@@ -70,9 +70,9 @@ MossdeepCity_SpaceCenter_2F_EventScript_223E09:: @ 8223E09
applymovement 7, MossdeepCity_SpaceCenter_2F_Movement_223E89
waitmovement 0
setvar VAR_MOSSDEEP_SPACE_CENTER_STATE_2, 2
- moveobjectoffscreen 5
- moveobjectoffscreen 7
- moveobjectoffscreen 6
+ copyobjectxytoperm 5
+ copyobjectxytoperm 7
+ copyobjectxytoperm 6
releaseall
end
@@ -300,11 +300,11 @@ MossdeepCity_SpaceCenter_2F_EventScript_224071:: @ 8224071
removeobject 8
removeobject 9
setobjectxy 3, 5, 6
- turnobject 3, 1
+ turnobject 3, DIR_SOUTH
setobjectxy 2, 11, 8
- turnobject 2, 2
+ turnobject 2, DIR_NORTH
setobjectxy 1, 6, 2
- turnobject 1, 2
+ turnobject 1, DIR_NORTH
call MossdeepCity_SpaceCenter_2F_EventScript_224131
fadescreen 0
msgbox MossdeepCity_SpaceCenter_2F_Text_224A4A, MSGBOX_DEFAULT
@@ -331,11 +331,11 @@ MossdeepCity_SpaceCenter_2F_EventScript_224131:: @ 8224131
return
MossdeepCity_SpaceCenter_2F_EventScript_22414D:: @ 822414D
- turnobject 4, 2
+ turnobject 4, DIR_NORTH
return
MossdeepCity_SpaceCenter_2F_EventScript_224152:: @ 8224152
- turnobject 4, 4
+ turnobject 4, DIR_EAST
return
MossdeepCity_SpaceCenter_2F_EventScript_224157:: @ 8224157
diff --git a/data/maps/MossdeepCity_StevensHouse/scripts.inc b/data/maps/MossdeepCity_StevensHouse/scripts.inc
index 69b5a01d4..62ddcf9ca 100644
--- a/data/maps/MossdeepCity_StevensHouse/scripts.inc
+++ b/data/maps/MossdeepCity_StevensHouse/scripts.inc
@@ -85,7 +85,7 @@ MossdeepCity_StevensHouse_EventScript_22285B:: @ 822285B
MossdeepCity_StevensHouse_EventScript_222865:: @ 8222865
setvar VAR_TEMP_1, SPECIES_BELDUM
- givemon SPECIES_BELDUM, 5, ITEM_NONE, 0x0, 0x0, 0
+ givemon SPECIES_BELDUM, 5, ITEM_NONE
compare VAR_RESULT, 0
goto_if_eq MossdeepCity_StevensHouse_EventScript_222895
compare VAR_RESULT, 1
diff --git a/data/maps/MtChimney/scripts.inc b/data/maps/MtChimney/scripts.inc
index d770f095c..c646fc1cf 100644
--- a/data/maps/MtChimney/scripts.inc
+++ b/data/maps/MtChimney/scripts.inc
@@ -104,7 +104,7 @@ MtChimney_EventScript_22EEF3:: @ 822EEF3
msgbox MtChimney_Text_22FE04, MSGBOX_YESNO
compare VAR_RESULT, 0
goto_if_eq MtChimney_EventScript_22EF69
- checkmoney 0xc8, 0
+ checkmoney 200, 0
compare VAR_RESULT, 0
goto_if_eq MtChimney_EventScript_22EF76
msgbox MtChimney_Text_22FE4D, MSGBOX_DEFAULT
@@ -129,9 +129,8 @@ MtChimney_EventScript_22EF51:: @ 822EF51
end
MtChimney_EventScript_22EF5E:: @ 822EF5E
- takemoney 0xc8, 0
+ takemoney 200, 0
updatemoneybox 0, 0
- nop
return
MtChimney_EventScript_22EF69:: @ 822EF69
diff --git a/data/maps/NavelRock_Harbor/scripts.inc b/data/maps/NavelRock_Harbor/scripts.inc
index 332e6dbea..873b4fd3b 100644
--- a/data/maps/NavelRock_Harbor/scripts.inc
+++ b/data/maps/NavelRock_Harbor/scripts.inc
@@ -4,10 +4,10 @@ NavelRock_Harbor_MapScripts:: @ 82690BC
NavelRock_Harbor_EventScript_2690BD:: @ 82690BD
lock
faceplayer
- msgbox NavelRock_Harbor_Text_2C6CE6, MSGBOX_YESNO
+ msgbox NavelRock_Harbor_Text_SailorReturn, MSGBOX_YESNO
compare VAR_RESULT, 0
goto_if_eq NavelRock_Harbor_EventScript_269102
- msgbox NavelRock_Harbor_Text_2A6A5D, MSGBOX_DEFAULT
+ msgbox EventTicket_Text_SailHome, MSGBOX_DEFAULT
closemessage
applymovement VAR_LAST_TALKED, Common_Movement_WalkInPlaceDown
waitmovement 0
@@ -21,7 +21,7 @@ NavelRock_Harbor_EventScript_2690BD:: @ 82690BD
end
NavelRock_Harbor_EventScript_269102:: @ 8269102
- msgbox NavelRock_Harbor_Text_2A6A82, MSGBOX_DEFAULT
+ msgbox EventTicket_Text_AsYouLike, MSGBOX_DEFAULT
release
end
diff --git a/data/maps/PetalburgCity_Gym/scripts.inc b/data/maps/PetalburgCity_Gym/scripts.inc
index a64c314a5..749ed18f2 100644
--- a/data/maps/PetalburgCity_Gym/scripts.inc
+++ b/data/maps/PetalburgCity_Gym/scripts.inc
@@ -78,7 +78,7 @@ PetalburgCity_Gym_MapScript2_20498B: @ 820498B
.2byte 0
PetalburgCity_Gym_EventScript_204995:: @ 8204995
- turnobject EVENT_OBJ_ID_PLAYER, 2
+ turnobject EVENT_OBJ_ID_PLAYER, DIR_NORTH
end
PetalburgCity_Gym_MapScript2_20499A: @ 820499A
@@ -418,7 +418,7 @@ PetalburgCity_Gym_EventScript_204E3B:: @ 8204E3B
setflag FLAG_DEFEATED_PETALBURG_GYM
setvar VAR_PETALBURG_GYM_STATE, 7
setflag FLAG_BADGE05_GET
- special sub_813B9A0
+ special ResetHealLocationFromDewford
call PetalburgCity_Gym_EventScript_2721F8
setflag FLAG_HIDE_MAUVILLE_GYM_WATTSON
clearflag FLAG_HIDE_MAUVILLE_CITY_WATTSON
diff --git a/data/maps/PetalburgCity_WallysHouse/scripts.inc b/data/maps/PetalburgCity_WallysHouse/scripts.inc
index b285b220c..be2a6280e 100644
--- a/data/maps/PetalburgCity_WallysHouse/scripts.inc
+++ b/data/maps/PetalburgCity_WallysHouse/scripts.inc
@@ -8,8 +8,8 @@ PetalburgCity_WallysHouse_MapScript2_204234: @ 8204234
.2byte 0
PetalburgCity_WallysHouse_EventScript_20423E:: @ 820423E
- turnobject EVENT_OBJ_ID_PLAYER, 4
- turnobject 1, 3
+ turnobject EVENT_OBJ_ID_PLAYER, DIR_EAST
+ turnobject 1, DIR_WEST
end
PetalburgCity_WallysHouse_MapScript2_204247: @ 8204247
diff --git a/data/maps/Route104/scripts.inc b/data/maps/Route104/scripts.inc
index 1a677001d..fd195b973 100644
--- a/data/maps/Route104/scripts.inc
+++ b/data/maps/Route104/scripts.inc
@@ -114,7 +114,7 @@ Route104_EventScript_1ECD4B:: @ 81ECD4B
waitmovement 0
applymovement 34, Route104_Movement_1ECDCA
waitmovement 0
- moveobjectoffscreen 34
+ copyobjectxytoperm 34
msgbox Route104_Text_1EDCED, MSGBOX_YESNO
compare VAR_RESULT, 1
goto_if_eq Route104_EventScript_1ECDED
@@ -203,7 +203,7 @@ Route104_EventScript_1ECE6F:: @ 81ECE6F
waitmovement 0
applymovement 34, Route104_Movement_1ECDCA
waitmovement 0
- moveobjectoffscreen 34
+ copyobjectxytoperm 34
msgbox Route104_Text_1EE009, MSGBOX_YESNO
compare VAR_RESULT, 1
goto_if_eq Route104_EventScript_1ECF09
@@ -416,7 +416,7 @@ Route104_EventScript_1ED139:: @ 81ED139
copyvar VAR_BRINEY_LOCATION, VAR_0x8008
resetobjectpriority EVENT_OBJ_ID_PLAYER, MAP_ROUTE104
resetobjectpriority 2, MAP_DEWFORD_TOWN
- moveobjectoffscreen 2
+ copyobjectxytoperm 2
setvar VAR_BOARD_BRINEY_BOAT_STATE, 0
goto_if_unset FLAG_DELIVERED_STEVEN_LETTER, Route104_EventScript_1ED1B4
goto_if_set FLAG_DELIVERED_STEVEN_LETTER, Route104_EventScript_1ED1BE
diff --git a/data/maps/Route104_MrBrineysHouse/scripts.inc b/data/maps/Route104_MrBrineysHouse/scripts.inc
index c2877f0d9..b2baff82b 100644
--- a/data/maps/Route104_MrBrineysHouse/scripts.inc
+++ b/data/maps/Route104_MrBrineysHouse/scripts.inc
@@ -41,11 +41,11 @@ Route104_MrBrineysHouse_EventScript_229D8A:: @ 8229D8A
Route104_MrBrineysHouse_EventScript_229DAE:: @ 8229DAE
message Route104_MrBrineysHouse_Text_22A268
waitmessage
- multichoicedefault 20, 8, 14, 1, 0
+ multichoicedefault 20, 8, MULTI_BRINEY_OFF_DEWFORD, 1, 0
switch VAR_RESULT
case 0, Route104_MrBrineysHouse_EventScript_229E27
case 1, Route104_MrBrineysHouse_EventScript_229E1D
- case 127, Route104_MrBrineysHouse_EventScript_229E1D
+ case MULTI_B_PRESSED, Route104_MrBrineysHouse_EventScript_229E1D
end
Route104_MrBrineysHouse_EventScript_229DE1:: @ 8229DE1
diff --git a/data/maps/Route104_PrettyPetalFlowerShop/scripts.inc b/data/maps/Route104_PrettyPetalFlowerShop/scripts.inc
index b4d10cf0f..c70318fc9 100644
--- a/data/maps/Route104_PrettyPetalFlowerShop/scripts.inc
+++ b/data/maps/Route104_PrettyPetalFlowerShop/scripts.inc
@@ -88,7 +88,7 @@ Route104_PrettyPetalFlowerShop_EventScript_22A442:: @ 822A442
goto_if_set FLAG_DAILY_FLOWER_SHOP_RECEIVED_BERRY, Route104_PrettyPetalFlowerShop_EventScript_22A482
msgbox Route104_PrettyPetalFlowerShop_Text_2A7A98, MSGBOX_DEFAULT
random 8
- addvar VAR_RESULT, 133
+ addvar VAR_RESULT, FIRST_BERRY_INDEX
giveitem_std VAR_RESULT
compare VAR_RESULT, 0
goto_if_eq Common_EventScript_ShowBagIsFull
diff --git a/data/maps/Route109/scripts.inc b/data/maps/Route109/scripts.inc
index a036296e3..e4c04f0d2 100644
--- a/data/maps/Route109/scripts.inc
+++ b/data/maps/Route109/scripts.inc
@@ -58,7 +58,7 @@ Route109_EventScript_1EE7D5:: @ 81EE7D5
copyvar VAR_BRINEY_LOCATION, VAR_0x8008
resetobjectpriority EVENT_OBJ_ID_PLAYER, MAP_ROUTE109
resetobjectpriority 2, MAP_DEWFORD_TOWN
- moveobjectoffscreen 2
+ copyobjectxytoperm 2
release
end
@@ -287,11 +287,11 @@ Route109_EventScript_1EE921:: @ 81EE921
Route109_EventScript_1EE93F:: @ 81EE93F
message Route109_Text_1EEE17
waitmessage
- multichoicedefault 21, 8, 14, 1, 0
+ multichoicedefault 21, 8, MULTI_BRINEY_OFF_DEWFORD, 1, 0
switch VAR_RESULT
case 0, Route109_EventScript_1EE972
case 1, Route109_EventScript_1EE98B
- case 127, Route109_EventScript_1EE98B
+ case MULTI_B_PRESSED, Route109_EventScript_1EE98B
end
Route109_EventScript_1EE972:: @ 81EE972
diff --git a/data/maps/Route109_SeashoreHouse/scripts.inc b/data/maps/Route109_SeashoreHouse/scripts.inc
index e52ab08f9..d74b6b671 100644
--- a/data/maps/Route109_SeashoreHouse/scripts.inc
+++ b/data/maps/Route109_SeashoreHouse/scripts.inc
@@ -49,16 +49,15 @@ Route109_SeashoreHouse_EventScript_269460:: @ 8269460
end
Route109_SeashoreHouse_EventScript_269484:: @ 8269484
- checkmoney 0x12c, 0
+ checkmoney 300, 0
compare VAR_RESULT, 0
goto_if_eq Route109_SeashoreHouse_EventScript_2694C8
checkitemspace ITEM_SODA_POP, 1
compare VAR_RESULT, 0
goto_if_eq Route109_SeashoreHouse_EventScript_2694D5
msgbox Route109_SeashoreHouse_Text_2697C8, MSGBOX_DEFAULT
- takemoney 0x12c, 0
+ takemoney 300, 0
updatemoneybox 0, 0
- nop
giveitem_std ITEM_SODA_POP
hidemoneybox
nop
diff --git a/data/maps/Route110_TrickHouseEnd/scripts.inc b/data/maps/Route110_TrickHouseEnd/scripts.inc
index 52a0f19f5..048e64174 100644
--- a/data/maps/Route110_TrickHouseEnd/scripts.inc
+++ b/data/maps/Route110_TrickHouseEnd/scripts.inc
@@ -23,7 +23,7 @@ Route110_TrickHouseEnd_MapScript2_26ACDE: @ 826ACDE
Route110_TrickHouseEnd_EventScript_26ACE8:: @ 826ACE8
addobject 1
showobjectat 1, MAP_ROUTE110_TRICK_HOUSE_END
- turnobject 1, 4
+ turnobject 1, DIR_EAST
end
Route110_TrickHouseEnd_MapScript2_26ACF5: @ 826ACF5
@@ -176,17 +176,17 @@ Route110_TrickHouseEnd_EventScript_26AF28:: @ 826AF28
end
Route110_TrickHouseEnd_EventScript_26AFA5:: @ 826AFA5
- multichoice 0, 0, 88, 1
+ multichoice 0, 0, MULTI_TENT, 1
switch VAR_RESULT
case 0, Route110_TrickHouseEnd_EventScript_26AFBF
goto Route110_TrickHouseEnd_EventScript_26AFC7
Route110_TrickHouseEnd_EventScript_26AFBF:: @ 826AFBF
- givedecoration_std 31
+ givedecoration_std DECOR_RED_TENT
return
Route110_TrickHouseEnd_EventScript_26AFC7:: @ 826AFC7
- givedecoration_std 32
+ givedecoration_std DECOR_BLUE_TENT
return
Route110_TrickHouseEnd_EventScript_26AFCF:: @ 826AFCF
@@ -233,7 +233,7 @@ Route110_TrickHouseEnd_EventScript_26B036:: @ 826B036
Route110_TrickHouseEnd_EventScript_26B041:: @ 826B041
lockall
- turnobject 1, 3
+ turnobject 1, DIR_WEST
playse SE_PIN
applymovement 1, Common_Movement_ExclamationMark
waitmovement 0
@@ -248,7 +248,7 @@ Route110_TrickHouseEnd_EventScript_26B041:: @ 826B041
applymovement EVENT_OBJ_ID_PLAYER, Route110_TrickHouseEnd_Movement_26B089
waitmovement 0
delay 4
- turnobject 1, 4
+ turnobject 1, DIR_EAST
releaseall
end
diff --git a/data/maps/Route110_TrickHouseEntrance/scripts.inc b/data/maps/Route110_TrickHouseEntrance/scripts.inc
index 9c2fc3aec..0e729d333 100644
--- a/data/maps/Route110_TrickHouseEntrance/scripts.inc
+++ b/data/maps/Route110_TrickHouseEntrance/scripts.inc
@@ -132,8 +132,8 @@ Route110_TrickHouseEntrance_MapScript2_269BD3: @ 8269BD3
Route110_TrickHouseEntrance_EventScript_269C15:: @ 8269C15
addobject 1
showobjectat 1, MAP_ROUTE110_TRICK_HOUSE_ENTRANCE
- turnobject 1, 4
- turnobject EVENT_OBJ_ID_PLAYER, 3
+ turnobject 1, DIR_EAST
+ turnobject EVENT_OBJ_ID_PLAYER, DIR_WEST
end
Route110_TrickHouseEntrance_EventScript_269C26:: @ 8269C26
@@ -189,13 +189,13 @@ Route110_TrickHouseEntrance_EventScript_269CCC:: @ 8269CCC
Route110_TrickHouseEntrance_EventScript_269CD0:: @ 8269CD0
addobject 1
setobjectxy 1, 5, 2
- turnobject 1, 2
+ turnobject 1, DIR_NORTH
end
Route110_TrickHouseEntrance_EventScript_269CDF:: @ 8269CDF
addobject 1
setobjectxy 1, 5, 2
- turnobject 1, 1
+ turnobject 1, DIR_SOUTH
end
Route110_TrickHouseEntrance_MapScript2_269CEE: @ 8269CEE
@@ -451,17 +451,17 @@ Route110_TrickHouseEntrance_EventScript_26A039:: @ 826A039
end
Route110_TrickHouseEntrance_EventScript_26A070:: @ 826A070
- multichoice 0, 0, 88, 1
+ multichoice 0, 0, MULTI_TENT, 1
switch VAR_RESULT
case 0, Route110_TrickHouseEntrance_EventScript_26A08A
goto Route110_TrickHouseEntrance_EventScript_26A092
Route110_TrickHouseEntrance_EventScript_26A08A:: @ 826A08A
- givedecoration_std 31
+ givedecoration_std DECOR_RED_TENT
return
Route110_TrickHouseEntrance_EventScript_26A092:: @ 826A092
- givedecoration_std 32
+ givedecoration_std DECOR_BLUE_TENT
return
Route110_TrickHouseEntrance_EventScript_26A09A:: @ 826A09A
diff --git a/data/maps/Route110_TrickHousePuzzle5/scripts.inc b/data/maps/Route110_TrickHousePuzzle5/scripts.inc
index 9ae8dc759..b678840b6 100644
--- a/data/maps/Route110_TrickHousePuzzle5/scripts.inc
+++ b/data/maps/Route110_TrickHousePuzzle5/scripts.inc
@@ -327,7 +327,7 @@ Route110_TrickHousePuzzle5_EventScript_26CEF2:: @ 826CEF2
Route110_TrickHousePuzzle5_EventScript_26CF45:: @ 826CF45
msgbox Route110_TrickHousePuzzle5_Text_26D757, MSGBOX_DEFAULT
- multichoice 0, 0, 25, 1
+ multichoice 0, 0, MULTI_MECHADOLL1_Q1, 1
switch VAR_RESULT
case 2, Route110_TrickHousePuzzle5_EventScript_26D1A0
goto Route110_TrickHousePuzzle5_EventScript_26D152
@@ -335,7 +335,7 @@ Route110_TrickHousePuzzle5_EventScript_26CF45:: @ 826CF45
Route110_TrickHousePuzzle5_EventScript_26CF68:: @ 826CF68
msgbox Route110_TrickHousePuzzle5_Text_26D7AA, MSGBOX_DEFAULT
- multichoice 0, 0, 26, 1
+ multichoice 0, 0, MULTI_MECHADOLL1_Q2, 1
switch VAR_RESULT
case 0, Route110_TrickHousePuzzle5_EventScript_26D1A0
goto Route110_TrickHousePuzzle5_EventScript_26D152
@@ -343,7 +343,7 @@ Route110_TrickHousePuzzle5_EventScript_26CF68:: @ 826CF68
Route110_TrickHousePuzzle5_EventScript_26CF8B:: @ 826CF8B
msgbox Route110_TrickHousePuzzle5_Text_26D7FC, MSGBOX_DEFAULT
- multichoice 0, 0, 27, 1
+ multichoice 0, 0, MULTI_MECHADOLL1_Q3, 1
switch VAR_RESULT
case 0, Route110_TrickHousePuzzle5_EventScript_26D1A0
goto Route110_TrickHousePuzzle5_EventScript_26D152
@@ -351,7 +351,7 @@ Route110_TrickHousePuzzle5_EventScript_26CF8B:: @ 826CF8B
Route110_TrickHousePuzzle5_EventScript_26CFAE:: @ 826CFAE
msgbox Route110_TrickHousePuzzle5_Text_26D940, MSGBOX_DEFAULT
- multichoice 0, 0, 28, 1
+ multichoice 0, 0, MULTI_MECHADOLL2_Q1, 1
switch VAR_RESULT
case 1, Route110_TrickHousePuzzle5_EventScript_26D1A0
goto Route110_TrickHousePuzzle5_EventScript_26D152
@@ -359,7 +359,7 @@ Route110_TrickHousePuzzle5_EventScript_26CFAE:: @ 826CFAE
Route110_TrickHousePuzzle5_EventScript_26CFD1:: @ 826CFD1
msgbox Route110_TrickHousePuzzle5_Text_26D98C, MSGBOX_DEFAULT
- multichoice 0, 0, 29, 1
+ multichoice 0, 0, MULTI_MECHADOLL2_Q2, 1
switch VAR_RESULT
case 2, Route110_TrickHousePuzzle5_EventScript_26D1A0
goto Route110_TrickHousePuzzle5_EventScript_26D152
@@ -367,7 +367,7 @@ Route110_TrickHousePuzzle5_EventScript_26CFD1:: @ 826CFD1
Route110_TrickHousePuzzle5_EventScript_26CFF4:: @ 826CFF4
msgbox Route110_TrickHousePuzzle5_Text_26D9CE, MSGBOX_DEFAULT
- multichoice 0, 0, 30, 1
+ multichoice 0, 0, MULTI_MECHADOLL2_Q3, 1
switch VAR_RESULT
case 0, Route110_TrickHousePuzzle5_EventScript_26D1A0
goto Route110_TrickHousePuzzle5_EventScript_26D152
@@ -375,7 +375,7 @@ Route110_TrickHousePuzzle5_EventScript_26CFF4:: @ 826CFF4
Route110_TrickHousePuzzle5_EventScript_26D017:: @ 826D017
msgbox Route110_TrickHousePuzzle5_Text_26DA64, MSGBOX_DEFAULT
- multichoice 0, 0, 31, 1
+ multichoice 0, 0, MULTI_MECHADOLL3_Q1, 1
switch VAR_RESULT
case 0, Route110_TrickHousePuzzle5_EventScript_26D1A0
goto Route110_TrickHousePuzzle5_EventScript_26D152
@@ -383,7 +383,7 @@ Route110_TrickHousePuzzle5_EventScript_26D017:: @ 826D017
Route110_TrickHousePuzzle5_EventScript_26D03A:: @ 826D03A
msgbox Route110_TrickHousePuzzle5_Text_26DAAD, MSGBOX_DEFAULT
- multichoice 0, 0, 32, 1
+ multichoice 0, 0, MULTI_MECHADOLL3_Q2, 1
switch VAR_RESULT
case 2, Route110_TrickHousePuzzle5_EventScript_26D1A0
goto Route110_TrickHousePuzzle5_EventScript_26D152
@@ -391,7 +391,7 @@ Route110_TrickHousePuzzle5_EventScript_26D03A:: @ 826D03A
Route110_TrickHousePuzzle5_EventScript_26D05D:: @ 826D05D
msgbox Route110_TrickHousePuzzle5_Text_26DAFF, MSGBOX_DEFAULT
- multichoice 0, 0, 33, 1
+ multichoice 0, 0, MULTI_MECHADOLL3_Q3, 1
switch VAR_RESULT
case 1, Route110_TrickHousePuzzle5_EventScript_26D1A0
goto Route110_TrickHousePuzzle5_EventScript_26D152
@@ -399,7 +399,7 @@ Route110_TrickHousePuzzle5_EventScript_26D05D:: @ 826D05D
Route110_TrickHousePuzzle5_EventScript_26D080:: @ 826D080
msgbox Route110_TrickHousePuzzle5_Text_26DB94, MSGBOX_DEFAULT
- multichoice 0, 0, 34, 1
+ multichoice 0, 0, MULTI_MECHADOLL4_Q1, 1
switch VAR_RESULT
case 0, Route110_TrickHousePuzzle5_EventScript_26D1A0
goto Route110_TrickHousePuzzle5_EventScript_26D152
@@ -407,7 +407,7 @@ Route110_TrickHousePuzzle5_EventScript_26D080:: @ 826D080
Route110_TrickHousePuzzle5_EventScript_26D0A3:: @ 826D0A3
msgbox Route110_TrickHousePuzzle5_Text_26DBD7, MSGBOX_DEFAULT
- multichoice 0, 0, 35, 1
+ multichoice 0, 0, MULTI_MECHADOLL4_Q2, 1
switch VAR_RESULT
case 0, Route110_TrickHousePuzzle5_EventScript_26D1A0
goto Route110_TrickHousePuzzle5_EventScript_26D152
@@ -415,7 +415,7 @@ Route110_TrickHousePuzzle5_EventScript_26D0A3:: @ 826D0A3
Route110_TrickHousePuzzle5_EventScript_26D0C6:: @ 826D0C6
msgbox Route110_TrickHousePuzzle5_Text_26DC2A, MSGBOX_DEFAULT
- multichoice 0, 0, 36, 1
+ multichoice 0, 0, MULTI_MECHADOLL4_Q3, 1
switch VAR_RESULT
case 1, Route110_TrickHousePuzzle5_EventScript_26D1A0
goto Route110_TrickHousePuzzle5_EventScript_26D152
@@ -423,7 +423,7 @@ Route110_TrickHousePuzzle5_EventScript_26D0C6:: @ 826D0C6
Route110_TrickHousePuzzle5_EventScript_26D0E9:: @ 826D0E9
msgbox Route110_TrickHousePuzzle5_Text_26DCCB, MSGBOX_DEFAULT
- multichoice 0, 0, 37, 1
+ multichoice 0, 0, MULTI_MECHADOLL5_Q1, 1
switch VAR_RESULT
case 1, Route110_TrickHousePuzzle5_EventScript_26D1A0
goto Route110_TrickHousePuzzle5_EventScript_26D152
@@ -431,7 +431,7 @@ Route110_TrickHousePuzzle5_EventScript_26D0E9:: @ 826D0E9
Route110_TrickHousePuzzle5_EventScript_26D10C:: @ 826D10C
msgbox Route110_TrickHousePuzzle5_Text_26DD1B, MSGBOX_DEFAULT
- multichoice 0, 0, 38, 1
+ multichoice 0, 0, MULTI_MECHADOLL5_Q2, 1
switch VAR_RESULT
case 0, Route110_TrickHousePuzzle5_EventScript_26D1A0
goto Route110_TrickHousePuzzle5_EventScript_26D152
@@ -439,7 +439,7 @@ Route110_TrickHousePuzzle5_EventScript_26D10C:: @ 826D10C
Route110_TrickHousePuzzle5_EventScript_26D12F:: @ 826D12F
msgbox Route110_TrickHousePuzzle5_Text_26DD5F, MSGBOX_DEFAULT
- multichoice 0, 0, 39, 1
+ multichoice 0, 0, MULTI_MECHADOLL5_Q3, 1
switch VAR_RESULT
case 2, Route110_TrickHousePuzzle5_EventScript_26D1A0
goto Route110_TrickHousePuzzle5_EventScript_26D152
diff --git a/data/maps/Route111/scripts.inc b/data/maps/Route111/scripts.inc
index c913d7e6e..6e820d426 100644
--- a/data/maps/Route111/scripts.inc
+++ b/data/maps/Route111/scripts.inc
@@ -128,7 +128,7 @@ Route111_EventScript_1F0E60:: @ 81F0E60
showobjectat EVENT_OBJ_ID_PLAYER, MAP_LITTLEROOT_TOWN
removeobject 45
delay 16
- turnobject EVENT_OBJ_ID_PLAYER, 2
+ turnobject EVENT_OBJ_ID_PLAYER, DIR_NORTH
delay 16
special StartMirageTowerDisintegration
waitstate
diff --git a/data/maps/Route113_GlassWorkshop/scripts.inc b/data/maps/Route113_GlassWorkshop/scripts.inc
index b685389d9..22acd676d 100644
--- a/data/maps/Route113_GlassWorkshop/scripts.inc
+++ b/data/maps/Route113_GlassWorkshop/scripts.inc
@@ -52,8 +52,8 @@ Route113_GlassWorkshop_EventScript_26ED9D:: @ 826ED9D
Route113_GlassWorkshop_EventScript_26EDA7:: @ 826EDA7
setvar VAR_0x8009, 0
- setvar VAR_0x8004, 1
- special sub_813A128
+ setvar VAR_0x8004, SCROLL_MULTI_GLASS_WORKSHOP_VENDOR
+ special ShowScrollableMultichoice
waitstate
switch VAR_RESULT
case 0, Route113_GlassWorkshop_EventScript_26EE1E
@@ -64,11 +64,11 @@ Route113_GlassWorkshop_EventScript_26EDA7:: @ 826EDA7
case 5, Route113_GlassWorkshop_EventScript_26EF4A
case 6, Route113_GlassWorkshop_EventScript_26EF8B
case 7, Route113_GlassWorkshop_EventScript_26EFCC
- case 127, Route113_GlassWorkshop_EventScript_26EFCC
+ case MULTI_B_PRESSED, Route113_GlassWorkshop_EventScript_26EFCC
end
Route113_GlassWorkshop_EventScript_26EE1E:: @ 826EE1E
- setvar VAR_0x8008, 39
+ setvar VAR_0x8008, ITEM_BLUE_FLUTE
bufferitemname 0, VAR_0x8008
setvar VAR_0x800A, 250
compare VAR_ASH_GATHER_COUNT, 250
@@ -82,7 +82,7 @@ Route113_GlassWorkshop_EventScript_26EE1E:: @ 826EE1E
end
Route113_GlassWorkshop_EventScript_26EE5A:: @ 826EE5A
- setvar VAR_0x8008, 40
+ setvar VAR_0x8008, ITEM_YELLOW_FLUTE
bufferitemname 0, VAR_0x8008
setvar VAR_0x800A, 500
compare VAR_ASH_GATHER_COUNT, 500
@@ -96,7 +96,7 @@ Route113_GlassWorkshop_EventScript_26EE5A:: @ 826EE5A
end
Route113_GlassWorkshop_EventScript_26EE96:: @ 826EE96
- setvar VAR_0x8008, 41
+ setvar VAR_0x8008, ITEM_RED_FLUTE
bufferitemname 0, VAR_0x8008
setvar VAR_0x800A, 500
compare VAR_ASH_GATHER_COUNT, 500
@@ -110,7 +110,7 @@ Route113_GlassWorkshop_EventScript_26EE96:: @ 826EE96
end
Route113_GlassWorkshop_EventScript_26EED2:: @ 826EED2
- setvar VAR_0x8008, 43
+ setvar VAR_0x8008, ITEM_WHITE_FLUTE
bufferitemname 0, VAR_0x8008
setvar VAR_0x800A, 1000
compare VAR_ASH_GATHER_COUNT, 1000
@@ -124,7 +124,7 @@ Route113_GlassWorkshop_EventScript_26EED2:: @ 826EED2
end
Route113_GlassWorkshop_EventScript_26EF0E:: @ 826EF0E
- setvar VAR_0x8008, 42
+ setvar VAR_0x8008, ITEM_BLACK_FLUTE
bufferitemname 0, VAR_0x8008
setvar VAR_0x800A, 1000
compare VAR_ASH_GATHER_COUNT, 1000
@@ -139,7 +139,7 @@ Route113_GlassWorkshop_EventScript_26EF0E:: @ 826EF0E
Route113_GlassWorkshop_EventScript_26EF4A:: @ 826EF4A
setvar VAR_0x8009, 1
- setvar VAR_0x8008, 13
+ setvar VAR_0x8008, DECOR_PRETTY_CHAIR
bufferdecorationname 0, VAR_0x8008
setvar VAR_0x800A, 6000
compare VAR_ASH_GATHER_COUNT, 6000
@@ -154,7 +154,7 @@ Route113_GlassWorkshop_EventScript_26EF4A:: @ 826EF4A
Route113_GlassWorkshop_EventScript_26EF8B:: @ 826EF8B
setvar VAR_0x8009, 1
- setvar VAR_0x8008, 6
+ setvar VAR_0x8008, DECOR_PRETTY_DESK
bufferdecorationname 0, VAR_0x8008
setvar VAR_0x800A, 8000
compare VAR_ASH_GATHER_COUNT, 8000
@@ -174,14 +174,14 @@ Route113_GlassWorkshop_EventScript_26EFCC:: @ 826EFCC
Route113_GlassWorkshop_EventScript_26EFD6:: @ 826EFD6
setvar VAR_0x800A, 250
- subvar VAR_0x800A, 16456
+ subvar VAR_0x800A, VAR_ASH_GATHER_COUNT
buffernumberstring 0, VAR_0x800A
msgbox Route113_GlassWorkshop_Text_26F34E, MSGBOX_DEFAULT
release
end
Route113_GlassWorkshop_EventScript_26EFEE:: @ 826EFEE
- subvar VAR_0x800A, 16456
+ subvar VAR_0x800A, VAR_ASH_GATHER_COUNT
buffernumberstring 1, VAR_0x800A
message Route113_GlassWorkshop_Text_26F543
waitmessage
@@ -247,50 +247,50 @@ Route113_GlassWorkshop_EventScript_26F090:: @ 826F090
Route113_GlassWorkshop_EventScript_26F0E3:: @ 826F0E3
setvar VAR_0x8009, 0
- setvar VAR_0x8008, 39
+ setvar VAR_0x8008, ITEM_BLUE_FLUTE
bufferitemname 0, VAR_0x8008
goto Route113_GlassWorkshop_EventScript_26F16F
end
Route113_GlassWorkshop_EventScript_26F0F7:: @ 826F0F7
setvar VAR_0x8009, 0
- setvar VAR_0x8008, 40
+ setvar VAR_0x8008, ITEM_YELLOW_FLUTE
bufferitemname 0, VAR_0x8008
goto Route113_GlassWorkshop_EventScript_26F16F
end
Route113_GlassWorkshop_EventScript_26F10B:: @ 826F10B
setvar VAR_0x8009, 0
- setvar VAR_0x8008, 41
+ setvar VAR_0x8008, ITEM_RED_FLUTE
bufferitemname 0, VAR_0x8008
goto Route113_GlassWorkshop_EventScript_26F16F
end
Route113_GlassWorkshop_EventScript_26F11F:: @ 826F11F
setvar VAR_0x8009, 0
- setvar VAR_0x8008, 43
+ setvar VAR_0x8008, ITEM_WHITE_FLUTE
bufferitemname 0, VAR_0x8008
goto Route113_GlassWorkshop_EventScript_26F16F
end
Route113_GlassWorkshop_EventScript_26F133:: @ 826F133
setvar VAR_0x8009, 0
- setvar VAR_0x8008, 42
+ setvar VAR_0x8008, ITEM_BLACK_FLUTE
bufferitemname 0, VAR_0x8008
goto Route113_GlassWorkshop_EventScript_26F16F
end
Route113_GlassWorkshop_EventScript_26F147:: @ 826F147
setvar VAR_0x8009, 1
- setvar VAR_0x8008, 13
- bufferdecorationname 0, 13
+ setvar VAR_0x8008, DECOR_PRETTY_CHAIR
+ bufferdecorationname 0, DECOR_PRETTY_CHAIR
goto Route113_GlassWorkshop_EventScript_26F16F
end
Route113_GlassWorkshop_EventScript_26F15B:: @ 826F15B
setvar VAR_0x8009, 1
- setvar VAR_0x8008, 6
- bufferdecorationname 0, 6
+ setvar VAR_0x8008, DECOR_PRETTY_DESK
+ bufferdecorationname 0, DECOR_PRETTY_DESK
goto Route113_GlassWorkshop_EventScript_26F16F
end
diff --git a/data/maps/Route114/scripts.inc b/data/maps/Route114/scripts.inc
index 925f693fa..faa79b861 100644
--- a/data/maps/Route114/scripts.inc
+++ b/data/maps/Route114/scripts.inc
@@ -32,7 +32,7 @@ Route114_EventScript_1F2582:: @ 81F2582
msgbox Route114_Text_2A6FCB, MSGBOX_DEFAULT
random 5
addvar VAR_RESULT, 15
- addvar VAR_RESULT, 133
+ addvar VAR_RESULT, FIRST_BERRY_INDEX
giveitem_std VAR_RESULT
compare VAR_RESULT, 0
goto_if_eq Common_EventScript_ShowBagIsFull
diff --git a/data/maps/Route114_LanettesHouse/scripts.inc b/data/maps/Route114_LanettesHouse/scripts.inc
index e24f6ce65..85b22724b 100644
--- a/data/maps/Route114_LanettesHouse/scripts.inc
+++ b/data/maps/Route114_LanettesHouse/scripts.inc
@@ -12,7 +12,7 @@ Route114_LanettesHouse_EventScript_22B2D2:: @ 822B2D2
goto_if_set FLAG_RECEIVED_DOLL_LANETTE, Route114_LanettesHouse_EventScript_22B2FF
setflag FLAG_SYS_PC_LANETTE
msgbox Route114_LanettesHouse_Text_22B34E, MSGBOX_DEFAULT
- givedecoration_std 99
+ givedecoration_std DECOR_LOTAD_DOLL
compare VAR_RESULT, 0
goto_if_eq Route114_LanettesHouse_EventScript_272067
setflag FLAG_RECEIVED_DOLL_LANETTE
diff --git a/data/maps/Route117/map.json b/data/maps/Route117/map.json
index b29b58639..12420784c 100644
--- a/data/maps/Route117/map.json
+++ b/data/maps/Route117/map.json
@@ -61,7 +61,7 @@
"movement_range_y": 0,
"trainer_type": "0",
"trainer_sight_or_berry_tree_id": "0",
- "script": "Route117_EventScript_291C18",
+ "script": "Route117_EventScript_DaycareMan",
"flag": "0"
},
{
diff --git a/data/maps/Route117_PokemonDayCare/map.json b/data/maps/Route117_PokemonDayCare/map.json
index c233701e5..9cb052633 100644
--- a/data/maps/Route117_PokemonDayCare/map.json
+++ b/data/maps/Route117_PokemonDayCare/map.json
@@ -24,7 +24,7 @@
"movement_range_y": 0,
"trainer_type": "0",
"trainer_sight_or_berry_tree_id": "0",
- "script": "Route117_PokemonDayCare_EventScript_291D11",
+ "script": "Route117_PokemonDayCare_EventScript_DaycareWoman",
"flag": "0"
}
],
diff --git a/data/maps/Route119_WeatherInstitute_2F/scripts.inc b/data/maps/Route119_WeatherInstitute_2F/scripts.inc
index d5a2de5ce..c15673dad 100644
--- a/data/maps/Route119_WeatherInstitute_2F/scripts.inc
+++ b/data/maps/Route119_WeatherInstitute_2F/scripts.inc
@@ -77,14 +77,14 @@ Route119_WeatherInstitute_2F_EventScript_26FFC8:: @ 826FFC8
fadescreen 0
applymovement 5, Route119_WeatherInstitute_2F_Movement_270187
waitmovement 0
- moveobjectoffscreen 5
+ copyobjectxytoperm 5
goto Route119_WeatherInstitute_2F_EventScript_27004D
end
Route119_WeatherInstitute_2F_EventScript_27004D:: @ 827004D
msgbox Route119_WeatherInstitute_2F_Text_270650, MSGBOX_DEFAULT
setvar VAR_TEMP_1, SPECIES_CASTFORM
- givemon SPECIES_CASTFORM, 25, ITEM_MYSTIC_WATER, 0x0, 0x0, 0
+ givemon SPECIES_CASTFORM, 25, ITEM_MYSTIC_WATER
compare VAR_RESULT, 0
goto_if_eq Route119_WeatherInstitute_2F_EventScript_270085
compare VAR_RESULT, 1
diff --git a/data/maps/Route120/scripts.inc b/data/maps/Route120/scripts.inc
index fdd302fdb..23f9c13e0 100644
--- a/data/maps/Route120/scripts.inc
+++ b/data/maps/Route120/scripts.inc
@@ -120,27 +120,27 @@ Route120_EventScript_1F5527:: @ 81F5527
end
Route120_EventScript_1F55CA:: @ 81F55CA
- setvar VAR_0x8004, 143
+ setvar VAR_0x8004, ITEM_FIGY_BERRY
goto Route120_EventScript_1F5601
end
Route120_EventScript_1F55D5:: @ 81F55D5
- setvar VAR_0x8004, 144
+ setvar VAR_0x8004, ITEM_WIKI_BERRY
goto Route120_EventScript_1F5601
end
Route120_EventScript_1F55E0:: @ 81F55E0
- setvar VAR_0x8004, 145
+ setvar VAR_0x8004, ITEM_MAGO_BERRY
goto Route120_EventScript_1F5601
end
Route120_EventScript_1F55EB:: @ 81F55EB
- setvar VAR_0x8004, 146
+ setvar VAR_0x8004, ITEM_AGUAV_BERRY
goto Route120_EventScript_1F5601
end
Route120_EventScript_1F55F6:: @ 81F55F6
- setvar VAR_0x8004, 147
+ setvar VAR_0x8004, ITEM_IAPAPA_BERRY
goto Route120_EventScript_1F5601
end
diff --git a/data/maps/Route121_SafariZoneEntrance/scripts.inc b/data/maps/Route121_SafariZoneEntrance/scripts.inc
index 69f5ea80d..d0c950cf5 100644
--- a/data/maps/Route121_SafariZoneEntrance/scripts.inc
+++ b/data/maps/Route121_SafariZoneEntrance/scripts.inc
@@ -61,14 +61,13 @@ Route121_SafariZoneEntrance_EventScript_22BC48:: @ 822BC48
compare VAR_RESULT, 0
goto_if_eq Route121_SafariZoneEntrance_EventScript_22BCEA
call Route121_SafariZoneEntrance_EventScript_22BCBF
- checkmoney 0x1f4, 0
+ checkmoney 500, 0
compare VAR_RESULT, 0
goto_if_eq Route121_SafariZoneEntrance_EventScript_22BCF8
playse SE_REGI
msgbox Route121_SafariZoneEntrance_Text_2A501B, MSGBOX_DEFAULT
- takemoney 0x1f4, 0
+ takemoney 500, 0
updatemoneybox 0, 0
- nop
msgbox Route121_SafariZoneEntrance_Text_2A5036, MSGBOX_DEFAULT
playfanfare MUS_FANFA4
message Route121_SafariZoneEntrance_Text_2A5052
diff --git a/data/maps/Route123_BerryMastersHouse/scripts.inc b/data/maps/Route123_BerryMastersHouse/scripts.inc
index 939cfed80..979509440 100644
--- a/data/maps/Route123_BerryMastersHouse/scripts.inc
+++ b/data/maps/Route123_BerryMastersHouse/scripts.inc
@@ -14,7 +14,7 @@ Route123_BerryMastersHouse_EventScript_26F845:: @ 826F845
msgbox Route123_BerryMastersHouse_Text_2A7386, MSGBOX_DEFAULT
random 10
addvar VAR_RESULT, 20
- addvar VAR_RESULT, 133
+ addvar VAR_RESULT, FIRST_BERRY_INDEX
giveitem_std VAR_RESULT
compare VAR_RESULT, 0
goto_if_eq Common_EventScript_ShowBagIsFull
@@ -22,7 +22,7 @@ Route123_BerryMastersHouse_EventScript_26F845:: @ 826F845
msgbox Route123_BerryMastersHouse_Text_2A7428, MSGBOX_DEFAULT
random 10
addvar VAR_RESULT, 20
- addvar VAR_RESULT, 133
+ addvar VAR_RESULT, FIRST_BERRY_INDEX
giveitem_std VAR_RESULT
compare VAR_RESULT, 0
goto_if_eq Common_EventScript_ShowBagIsFull
@@ -75,7 +75,7 @@ Route123_BerryMastersHouse_EventScript_26F909:: @ 826F909
Route123_BerryMastersHouse_EventScript_26F94C:: @ 826F94C
msgbox Route123_BerryMastersHouse_Text_2A75D0, MSGBOX_DEFAULT
random 10
- addvar VAR_RESULT, 133
+ addvar VAR_RESULT, FIRST_BERRY_INDEX
giveitem_std VAR_RESULT
compare VAR_RESULT, 0
goto_if_eq Common_EventScript_ShowBagIsFull
diff --git a/data/maps/Route124_DivingTreasureHuntersHouse/scripts.inc b/data/maps/Route124_DivingTreasureHuntersHouse/scripts.inc
index e1fb3d6f8..0fa59783d 100644
--- a/data/maps/Route124_DivingTreasureHuntersHouse/scripts.inc
+++ b/data/maps/Route124_DivingTreasureHuntersHouse/scripts.inc
@@ -86,7 +86,7 @@ Route124_DivingTreasureHuntersHouse_EventScript_270ADE:: @ 8270ADE
end
Route124_DivingTreasureHuntersHouse_EventScript_270B8F:: @ 8270B8F
- multichoice 0, 0, 58, 0
+ multichoice 0, 0, MULTI_SHARDS_R, 0
switch VAR_RESULT
case 0, Route124_DivingTreasureHuntersHouse_EventScript_270E84
case 1, Route124_DivingTreasureHuntersHouse_EventScript_270F4D
@@ -94,7 +94,7 @@ Route124_DivingTreasureHuntersHouse_EventScript_270B8F:: @ 8270B8F
end
Route124_DivingTreasureHuntersHouse_EventScript_270BB5:: @ 8270BB5
- multichoice 0, 0, 59, 0
+ multichoice 0, 0, MULTI_SHARDS_Y, 0
switch VAR_RESULT
case 0, Route124_DivingTreasureHuntersHouse_EventScript_270E93
case 1, Route124_DivingTreasureHuntersHouse_EventScript_270F4D
@@ -102,7 +102,7 @@ Route124_DivingTreasureHuntersHouse_EventScript_270BB5:: @ 8270BB5
end
Route124_DivingTreasureHuntersHouse_EventScript_270BDB:: @ 8270BDB
- multichoice 0, 0, 60, 0
+ multichoice 0, 0, MULTI_SHARDS_RY, 0
switch VAR_RESULT
case 0, Route124_DivingTreasureHuntersHouse_EventScript_270E84
case 1, Route124_DivingTreasureHuntersHouse_EventScript_270E93
@@ -111,7 +111,7 @@ Route124_DivingTreasureHuntersHouse_EventScript_270BDB:: @ 8270BDB
end
Route124_DivingTreasureHuntersHouse_EventScript_270C0C:: @ 8270C0C
- multichoice 0, 0, 61, 0
+ multichoice 0, 0, MULTI_SHARDS_B, 0
switch VAR_RESULT
case 0, Route124_DivingTreasureHuntersHouse_EventScript_270EA2
case 1, Route124_DivingTreasureHuntersHouse_EventScript_270F4D
@@ -119,7 +119,7 @@ Route124_DivingTreasureHuntersHouse_EventScript_270C0C:: @ 8270C0C
end
Route124_DivingTreasureHuntersHouse_EventScript_270C32:: @ 8270C32
- multichoice 0, 0, 62, 0
+ multichoice 0, 0, MULTI_SHARDS_RB, 0
switch VAR_RESULT
case 0, Route124_DivingTreasureHuntersHouse_EventScript_270E84
case 1, Route124_DivingTreasureHuntersHouse_EventScript_270EA2
@@ -128,7 +128,7 @@ Route124_DivingTreasureHuntersHouse_EventScript_270C32:: @ 8270C32
end
Route124_DivingTreasureHuntersHouse_EventScript_270C63:: @ 8270C63
- multichoice 0, 0, 63, 0
+ multichoice 0, 0, MULTI_SHARDS_YB, 0
switch VAR_RESULT
case 0, Route124_DivingTreasureHuntersHouse_EventScript_270E93
case 1, Route124_DivingTreasureHuntersHouse_EventScript_270EA2
@@ -137,7 +137,7 @@ Route124_DivingTreasureHuntersHouse_EventScript_270C63:: @ 8270C63
end
Route124_DivingTreasureHuntersHouse_EventScript_270C94:: @ 8270C94
- multichoice 0, 0, 64, 0
+ multichoice 0, 0, MULTI_SHARDS_RYB, 0
switch VAR_RESULT
case 0, Route124_DivingTreasureHuntersHouse_EventScript_270E84
case 1, Route124_DivingTreasureHuntersHouse_EventScript_270E93
@@ -147,7 +147,7 @@ Route124_DivingTreasureHuntersHouse_EventScript_270C94:: @ 8270C94
end
Route124_DivingTreasureHuntersHouse_EventScript_270CD0:: @ 8270CD0
- multichoice 0, 0, 65, 0
+ multichoice 0, 0, MULTI_SHARDS_G, 0
switch VAR_RESULT
case 0, Route124_DivingTreasureHuntersHouse_EventScript_270EB1
case 1, Route124_DivingTreasureHuntersHouse_EventScript_270F4D
@@ -155,7 +155,7 @@ Route124_DivingTreasureHuntersHouse_EventScript_270CD0:: @ 8270CD0
end
Route124_DivingTreasureHuntersHouse_EventScript_270CF6:: @ 8270CF6
- multichoice 0, 0, 66, 0
+ multichoice 0, 0, MULTI_SHARDS_RG, 0
switch VAR_RESULT
case 0, Route124_DivingTreasureHuntersHouse_EventScript_270E84
case 1, Route124_DivingTreasureHuntersHouse_EventScript_270EB1
@@ -164,7 +164,7 @@ Route124_DivingTreasureHuntersHouse_EventScript_270CF6:: @ 8270CF6
end
Route124_DivingTreasureHuntersHouse_EventScript_270D27:: @ 8270D27
- multichoice 0, 0, 67, 0
+ multichoice 0, 0, MULTI_SHARDS_YG, 0
switch VAR_RESULT
case 0, Route124_DivingTreasureHuntersHouse_EventScript_270E93
case 1, Route124_DivingTreasureHuntersHouse_EventScript_270EB1
@@ -173,7 +173,7 @@ Route124_DivingTreasureHuntersHouse_EventScript_270D27:: @ 8270D27
end
Route124_DivingTreasureHuntersHouse_EventScript_270D58:: @ 8270D58
- multichoice 0, 0, 68, 0
+ multichoice 0, 0, MULTI_SHARDS_RYG, 0
switch VAR_RESULT
case 0, Route124_DivingTreasureHuntersHouse_EventScript_270E84
case 1, Route124_DivingTreasureHuntersHouse_EventScript_270E93
@@ -183,7 +183,7 @@ Route124_DivingTreasureHuntersHouse_EventScript_270D58:: @ 8270D58
end
Route124_DivingTreasureHuntersHouse_EventScript_270D94:: @ 8270D94
- multichoice 0, 0, 69, 0
+ multichoice 0, 0, MULTI_SHARDS_BG, 0
switch VAR_RESULT
case 0, Route124_DivingTreasureHuntersHouse_EventScript_270EA2
case 1, Route124_DivingTreasureHuntersHouse_EventScript_270EB1
@@ -192,7 +192,7 @@ Route124_DivingTreasureHuntersHouse_EventScript_270D94:: @ 8270D94
end
Route124_DivingTreasureHuntersHouse_EventScript_270DC5:: @ 8270DC5
- multichoice 0, 0, 70, 0
+ multichoice 0, 0, MULTI_SHARDS_RBG, 0
switch VAR_RESULT
case 0, Route124_DivingTreasureHuntersHouse_EventScript_270E84
case 1, Route124_DivingTreasureHuntersHouse_EventScript_270EA2
@@ -202,7 +202,7 @@ Route124_DivingTreasureHuntersHouse_EventScript_270DC5:: @ 8270DC5
end
Route124_DivingTreasureHuntersHouse_EventScript_270E01:: @ 8270E01
- multichoice 0, 0, 71, 0
+ multichoice 0, 0, MULTI_SHARDS_YBG, 0
switch VAR_RESULT
case 0, Route124_DivingTreasureHuntersHouse_EventScript_270E93
case 1, Route124_DivingTreasureHuntersHouse_EventScript_270EA2
@@ -212,7 +212,7 @@ Route124_DivingTreasureHuntersHouse_EventScript_270E01:: @ 8270E01
end
Route124_DivingTreasureHuntersHouse_EventScript_270E3D:: @ 8270E3D
- multichoice 0, 0, 72, 0
+ multichoice 0, 0, MULTI_SHARDS_RYBG, 0
switch VAR_RESULT
case 0, Route124_DivingTreasureHuntersHouse_EventScript_270E84
case 1, Route124_DivingTreasureHuntersHouse_EventScript_270E93
@@ -223,23 +223,23 @@ Route124_DivingTreasureHuntersHouse_EventScript_270E3D:: @ 8270E3D
end
Route124_DivingTreasureHuntersHouse_EventScript_270E84:: @ 8270E84
- setvar VAR_0x8008, 48
- setvar VAR_0x8009, 95
+ setvar VAR_0x8008, ITEM_RED_SHARD
+ setvar VAR_0x8009, ITEM_FIRE_STONE
goto Route124_DivingTreasureHuntersHouse_EventScript_270EC0
Route124_DivingTreasureHuntersHouse_EventScript_270E93:: @ 8270E93
- setvar VAR_0x8008, 50
- setvar VAR_0x8009, 96
+ setvar VAR_0x8008, ITEM_YELLOW_SHARD
+ setvar VAR_0x8009, ITEM_THUNDER_STONE
goto Route124_DivingTreasureHuntersHouse_EventScript_270EC0
Route124_DivingTreasureHuntersHouse_EventScript_270EA2:: @ 8270EA2
- setvar VAR_0x8008, 49
- setvar VAR_0x8009, 97
+ setvar VAR_0x8008, ITEM_BLUE_SHARD
+ setvar VAR_0x8009, ITEM_WATER_STONE
goto Route124_DivingTreasureHuntersHouse_EventScript_270EC0
Route124_DivingTreasureHuntersHouse_EventScript_270EB1:: @ 8270EB1
- setvar VAR_0x8008, 51
- setvar VAR_0x8009, 98
+ setvar VAR_0x8008, ITEM_GREEN_SHARD
+ setvar VAR_0x8009, ITEM_LEAF_STONE
goto Route124_DivingTreasureHuntersHouse_EventScript_270EC0
Route124_DivingTreasureHuntersHouse_EventScript_270EC0:: @ 8270EC0
diff --git a/data/maps/RustboroCity/scripts.inc b/data/maps/RustboroCity/scripts.inc
index cd5f4c84d..3caeebfc6 100644
--- a/data/maps/RustboroCity/scripts.inc
+++ b/data/maps/RustboroCity/scripts.inc
@@ -78,7 +78,7 @@ RustboroCity_EventScript_1E07AC:: @ 81E07AC
RustboroCity_EventScript_1E07BD:: @ 81E07BD
setflag FLAG_ADDED_MATCH_CALL_TO_POKENAV
- special sp106_CreateStartMenu
+ special ScriptMenu_CreateStartMenuForPokenavTutorial
waitstate
switch VAR_RESULT
case 0, RustboroCity_EventScript_1E07AC
@@ -88,7 +88,7 @@ RustboroCity_EventScript_1E07BD:: @ 81E07BD
case 5, RustboroCity_EventScript_1E07AC
case 6, RustboroCity_EventScript_1E07AC
case 7, RustboroCity_EventScript_1E07AC
- case 127, RustboroCity_EventScript_1E07AC
+ case MULTI_B_PRESSED, RustboroCity_EventScript_1E07AC
special sub_81C72A4
waitstate
delay 20
@@ -494,7 +494,7 @@ RustboroCity_EventScript_1E0B2E:: @ 81E0B2E
call_if_eq RustboroCity_EventScript_1E0BF3
setflag FLAG_INTERACTED_WITH_DEVON_EMPLOYEE_GOODS_STOLEN
setvar VAR_RUSTBORO_CITY_STATE, 3
- moveobjectoffscreen 9
+ copyobjectxytoperm 9
msgbox RustboroCity_Text_1E183E, MSGBOX_DEFAULT
releaseall
end
diff --git a/data/maps/RustboroCity_DevonCorp_2F/scripts.inc b/data/maps/RustboroCity_DevonCorp_2F/scripts.inc
index e5ac226c5..f920bda55 100644
--- a/data/maps/RustboroCity_DevonCorp_2F/scripts.inc
+++ b/data/maps/RustboroCity_DevonCorp_2F/scripts.inc
@@ -157,7 +157,7 @@ RustboroCity_DevonCorp_2F_EventScript_211A2C:: @ 8211A2C
RustboroCity_DevonCorp_2F_EventScript_211A3E:: @ 8211A3E
setvar VAR_TEMP_1, SPECIES_LILEEP
- givemon SPECIES_LILEEP, 20, ITEM_NONE, 0x0, 0x0, 0
+ givemon SPECIES_LILEEP, 20, ITEM_NONE
compare VAR_RESULT, 0
goto_if_eq RustboroCity_DevonCorp_2F_EventScript_211A6E
compare VAR_RESULT, 1
@@ -206,7 +206,7 @@ RustboroCity_DevonCorp_2F_EventScript_211AD7:: @ 8211AD7
RustboroCity_DevonCorp_2F_EventScript_211AE1:: @ 8211AE1
setvar VAR_TEMP_1, SPECIES_ANORITH
- givemon SPECIES_ANORITH, 20, ITEM_NONE, 0x0, 0x0, 0
+ givemon SPECIES_ANORITH, 20, ITEM_NONE
compare VAR_RESULT, 0
goto_if_eq RustboroCity_DevonCorp_2F_EventScript_211B11
compare VAR_RESULT, 1
@@ -256,12 +256,12 @@ RustboroCity_DevonCorp_2F_EventScript_211B7A:: @ 8211B7A
RustboroCity_DevonCorp_2F_EventScript_211B84:: @ 8211B84
message RustboroCity_DevonCorp_2F_Text_212092
waitmessage
- multichoice 17, 6, 93, 0
+ multichoice 17, 6, MULTI_FOSSIL, 0
switch VAR_RESULT
case 0, RustboroCity_DevonCorp_2F_EventScript_211BC1
case 1, RustboroCity_DevonCorp_2F_EventScript_211BC7
case 2, RustboroCity_DevonCorp_2F_EventScript_211BCD
- case 127, RustboroCity_DevonCorp_2F_EventScript_211BCD
+ case MULTI_B_PRESSED, RustboroCity_DevonCorp_2F_EventScript_211BCD
end
RustboroCity_DevonCorp_2F_EventScript_211BC1:: @ 8211BC1
diff --git a/data/maps/RustboroCity_DevonCorp_3F/scripts.inc b/data/maps/RustboroCity_DevonCorp_3F/scripts.inc
index 6b83e195c..3ce08c9f1 100644
--- a/data/maps/RustboroCity_DevonCorp_3F/scripts.inc
+++ b/data/maps/RustboroCity_DevonCorp_3F/scripts.inc
@@ -19,7 +19,7 @@ RustboroCity_DevonCorp_3F_MapScript2_212455: @ 8212455
.2byte 0
RustboroCity_DevonCorp_3F_EventScript_21245F:: @ 821245F
- turnobject EVENT_OBJ_ID_PLAYER, 4
+ turnobject EVENT_OBJ_ID_PLAYER, DIR_EAST
end
RustboroCity_DevonCorp_3F_MapScript2_212464: @ 8212464
diff --git a/data/maps/RustboroCity_Flat1_2F/scripts.inc b/data/maps/RustboroCity_Flat1_2F/scripts.inc
index ec59115ef..e5b6c493a 100644
--- a/data/maps/RustboroCity_Flat1_2F/scripts.inc
+++ b/data/maps/RustboroCity_Flat1_2F/scripts.inc
@@ -73,7 +73,7 @@ RustboroCity_Flat1_2F_EventScript_215221:: @ 8215221
end
RustboroCity_Flat1_2F_EventScript_215238:: @ 8215238
- turnobject 6, 4
+ turnobject 6, DIR_EAST
return
RustboroCity_Flat1_2F_EventScript_21523D:: @ 821523D
diff --git a/data/maps/RustboroCity_PokemonSchool/scripts.inc b/data/maps/RustboroCity_PokemonSchool/scripts.inc
index ff52ee5ac..4d0abc9c3 100644
--- a/data/maps/RustboroCity_PokemonSchool/scripts.inc
+++ b/data/maps/RustboroCity_PokemonSchool/scripts.inc
@@ -10,7 +10,7 @@ RustboroCity_PokemonSchool_EventScript_213EA9:: @ 8213EA9
RustboroCity_PokemonSchool_EventScript_213EB8:: @ 8213EB8
message RustboroCity_PokemonSchool_Text_2140F9
waitmessage
- multichoicegrid 8, 1, 13, 3, 0
+ multichoicegrid 8, 1, MULTI_STATUS_INFO, 3, 0
switch VAR_RESULT
case 0, RustboroCity_PokemonSchool_EventScript_213F17
case 1, RustboroCity_PokemonSchool_EventScript_213F25
@@ -18,7 +18,7 @@ RustboroCity_PokemonSchool_EventScript_213EB8:: @ 8213EB8
case 3, RustboroCity_PokemonSchool_EventScript_213F41
case 4, RustboroCity_PokemonSchool_EventScript_213F4F
case 5, RustboroCity_PokemonSchool_EventScript_213F5D
- case 127, RustboroCity_PokemonSchool_EventScript_213F5D
+ case MULTI_B_PRESSED, RustboroCity_PokemonSchool_EventScript_213F5D
end
RustboroCity_PokemonSchool_EventScript_213F17:: @ 8213F17
diff --git a/data/maps/RusturfTunnel/scripts.inc b/data/maps/RusturfTunnel/scripts.inc
index 8d2a4be80..8cb20e372 100644
--- a/data/maps/RusturfTunnel/scripts.inc
+++ b/data/maps/RusturfTunnel/scripts.inc
@@ -285,8 +285,8 @@ RusturfTunnel_EventScript_22D083:: @ 822D083
applymovement 6, RusturfTunnel_Movement_22D0AB
applymovement 7, RusturfTunnel_Movement_22D0AB
waitmovement 0
- moveobjectoffscreen 6
- moveobjectoffscreen 7
+ copyobjectxytoperm 6
+ copyobjectxytoperm 7
setvar VAR_RUSTURF_TUNNEL_STATE, 3
releaseall
end
diff --git a/data/maps/SeafloorCavern_Entrance/scripts.inc b/data/maps/SeafloorCavern_Entrance/scripts.inc
index 1bf570549..bc4f04b7f 100644
--- a/data/maps/SeafloorCavern_Entrance/scripts.inc
+++ b/data/maps/SeafloorCavern_Entrance/scripts.inc
@@ -26,7 +26,7 @@ SeafloorCavern_Entrance_EventScript_234485:: @ 8234485
call_if_eq SeafloorCavern_Entrance_EventScript_234539
delay 30
setvar VAR_HAS_TALKED_TO_SEAFLOOR_CAVERN_ENTRANCE_GRUNT, 1
- moveobjectoffscreen 1
+ copyobjectxytoperm 1
msgbox SeafloorCavern_Entrance_Text_234544, MSGBOX_DEFAULT
closemessage
applymovement 1, Common_Movement_WalkInPlaceUp
diff --git a/data/maps/SkyPillar_Top/scripts.inc b/data/maps/SkyPillar_Top/scripts.inc
index 0e9b4c3a1..1dae8c867 100644
--- a/data/maps/SkyPillar_Top/scripts.inc
+++ b/data/maps/SkyPillar_Top/scripts.inc
@@ -40,7 +40,7 @@ SkyPillar_Top_MapScript2_239713: @ 8239713
.2byte 0
SkyPillar_Top_EventScript_23971D:: @ 823971D
- turnobject 1, 1
+ turnobject 1, DIR_SOUTH
end
SkyPillar_Top_EventScript_239722:: @ 8239722
@@ -71,7 +71,7 @@ SkyPillar_Top_EventScript_239768:: @ 8239768
end
SkyPillar_Top_EventScript_239771:: @ 8239771
- setvar VAR_0x8004, 406
+ setvar VAR_0x8004, SPECIES_RAYQUAZA
goto SkyPillar_Top_EventScript_239785
end
diff --git a/data/maps/SlateportCity/scripts.inc b/data/maps/SlateportCity/scripts.inc
index a1ddb122d..d245cdff4 100644
--- a/data/maps/SlateportCity/scripts.inc
+++ b/data/maps/SlateportCity/scripts.inc
@@ -748,8 +748,8 @@ SlateportCity_EventScript_1DD3C0:: @ 81DD3C0
SlateportCity_EventScript_1DD3CA:: @ 81DD3CA
message SlateportCity_Text_1DEE67
waitmessage
- setvar VAR_0x8004, 7
- special sub_813A128
+ setvar VAR_0x8004, SCROLL_MULTI_BERRY_POWDER_VENDOR
+ special ShowScrollableMultichoice
waitstate
switch VAR_RESULT
case 0, SlateportCity_EventScript_1DD46E
@@ -764,82 +764,82 @@ SlateportCity_EventScript_1DD3CA:: @ 81DD3CA
case 9, SlateportCity_EventScript_1DD522
case 10, SlateportCity_EventScript_1DD536
case 11, SlateportCity_EventScript_1DD54A
- case 127, SlateportCity_EventScript_1DD54A
+ case MULTI_B_PRESSED, SlateportCity_EventScript_1DD54A
end
SlateportCity_EventScript_1DD46E:: @ 81DD46E
bufferitemname 0, ITEM_ENERGY_POWDER
- setvar VAR_0x8008, 30
+ setvar VAR_0x8008, ITEM_ENERGY_POWDER
setvar VAR_0x8009, 50
goto SlateportCity_EventScript_1DD557
end
SlateportCity_EventScript_1DD482:: @ 81DD482
bufferitemname 0, ITEM_ENERGY_ROOT
- setvar VAR_0x8008, 31
+ setvar VAR_0x8008, ITEM_ENERGY_ROOT
setvar VAR_0x8009, 80
goto SlateportCity_EventScript_1DD557
end
SlateportCity_EventScript_1DD496:: @ 81DD496
bufferitemname 0, ITEM_HEAL_POWDER
- setvar VAR_0x8008, 32
+ setvar VAR_0x8008, ITEM_HEAL_POWDER
setvar VAR_0x8009, 50
goto SlateportCity_EventScript_1DD557
end
SlateportCity_EventScript_1DD4AA:: @ 81DD4AA
bufferitemname 0, ITEM_REVIVAL_HERB
- setvar VAR_0x8008, 33
+ setvar VAR_0x8008, ITEM_REVIVAL_HERB
setvar VAR_0x8009, 300
goto SlateportCity_EventScript_1DD557
end
SlateportCity_EventScript_1DD4BE:: @ 81DD4BE
bufferitemname 0, ITEM_PROTEIN
- setvar VAR_0x8008, 64
+ setvar VAR_0x8008, ITEM_PROTEIN
setvar VAR_0x8009, 1000
goto SlateportCity_EventScript_1DD557
end
SlateportCity_EventScript_1DD4D2:: @ 81DD4D2
bufferitemname 0, ITEM_IRON
- setvar VAR_0x8008, 65
+ setvar VAR_0x8008, ITEM_IRON
setvar VAR_0x8009, 1000
goto SlateportCity_EventScript_1DD557
end
SlateportCity_EventScript_1DD4E6:: @ 81DD4E6
bufferitemname 0, ITEM_CARBOS
- setvar VAR_0x8008, 66
+ setvar VAR_0x8008, ITEM_CARBOS
setvar VAR_0x8009, 1000
goto SlateportCity_EventScript_1DD557
end
SlateportCity_EventScript_1DD4FA:: @ 81DD4FA
bufferitemname 0, ITEM_CALCIUM
- setvar VAR_0x8008, 67
+ setvar VAR_0x8008, ITEM_CALCIUM
setvar VAR_0x8009, 1000
goto SlateportCity_EventScript_1DD557
end
SlateportCity_EventScript_1DD50E:: @ 81DD50E
bufferitemname 0, ITEM_ZINC
- setvar VAR_0x8008, 70
+ setvar VAR_0x8008, ITEM_ZINC
setvar VAR_0x8009, 1000
goto SlateportCity_EventScript_1DD557
end
SlateportCity_EventScript_1DD522:: @ 81DD522
bufferitemname 0, ITEM_HP_UP
- setvar VAR_0x8008, 63
+ setvar VAR_0x8008, ITEM_HP_UP
setvar VAR_0x8009, 1000
goto SlateportCity_EventScript_1DD557
end
SlateportCity_EventScript_1DD536:: @ 81DD536
bufferitemname 0, ITEM_PP_UP
- setvar VAR_0x8008, 69
+ setvar VAR_0x8008, ITEM_PP_UP
setvar VAR_0x8009, 3000
goto SlateportCity_EventScript_1DD557
end
diff --git a/data/maps/SlateportCity_BattleTentCorridor/scripts.inc b/data/maps/SlateportCity_BattleTentCorridor/scripts.inc
index 27f7fa3b9..5ab5b78e9 100644
--- a/data/maps/SlateportCity_BattleTentCorridor/scripts.inc
+++ b/data/maps/SlateportCity_BattleTentCorridor/scripts.inc
@@ -12,10 +12,10 @@ SlateportCity_BattleTentCorridor_EventScript_208E3B:: @ 8208E3B
compare VAR_0x8006, 1
goto_if_ne SlateportCity_BattleTentCorridor_EventScript_208E56
setobjectxy 1, 2, 2
- turnobject 1, 1
+ turnobject 1, DIR_SOUTH
SlateportCity_BattleTentCorridor_EventScript_208E56:: @ 8208E56
- turnobject EVENT_OBJ_ID_PLAYER, 2
+ turnobject EVENT_OBJ_ID_PLAYER, DIR_NORTH
end
SlateportCity_BattleTentCorridor_MapScript2_208E5B: @ 8208E5B
@@ -75,7 +75,7 @@ SlateportCity_BattleTentCorridor_EventScript_208F0D:: @ 8208F0D
call_if_eq SlateportCity_BattleTentCorridor_EventScript_209014
compare VAR_RESULT, 2
call_if_eq SlateportCity_BattleTentCorridor_EventScript_20901B
- multichoice 20, 6, 104, 1
+ multichoice 20, 6, MULTI_GO_ON_REST_RETIRE, 1
switch VAR_RESULT
case 0, SlateportCity_BattleTentCorridor_EventScript_208FBB
case 1, SlateportCity_BattleTentCorridor_EventScript_208F5B
@@ -91,11 +91,11 @@ SlateportCity_BattleTentCorridor_EventScript_208F5B:: @ 8208F5B
SlateportCity_BattleTentCorridor_EventScript_208F89:: @ 8208F89
message SlateportCity_BattleTentCorridor_Text_25A37A
waitmessage
- multichoicedefault 20, 8, 94, 1, 0
+ multichoicedefault 20, 8, MULTI_YESNO, 1, 0
switch VAR_RESULT
case 1, SlateportCity_BattleTentCorridor_EventScript_208F0D
case 0, SlateportCity_BattleTentCorridor_EventScript_209A1B
- case 127, SlateportCity_BattleTentCorridor_EventScript_208F0D
+ case MULTI_B_PRESSED, SlateportCity_BattleTentCorridor_EventScript_208F0D
SlateportCity_BattleTentCorridor_EventScript_208FBB:: @ 8208FBB
setvar VAR_0x8004, 8
@@ -104,7 +104,7 @@ SlateportCity_BattleTentCorridor_EventScript_208FBB:: @ 8208FBB
switch VAR_RESULT
case 0, SlateportCity_BattleTentCorridor_EventScript_208EB4
case 1, SlateportCity_BattleTentCorridor_EventScript_208FF1
- case 127, SlateportCity_BattleTentCorridor_EventScript_208EB4
+ case MULTI_B_PRESSED, SlateportCity_BattleTentCorridor_EventScript_208EB4
SlateportCity_BattleTentCorridor_EventScript_208FF1:: @ 8208FF1
fadescreen 1
diff --git a/data/maps/SlateportCity_BattleTentLobby/scripts.inc b/data/maps/SlateportCity_BattleTentLobby/scripts.inc
index 19416c91b..80545a7f2 100644
--- a/data/maps/SlateportCity_BattleTentLobby/scripts.inc
+++ b/data/maps/SlateportCity_BattleTentLobby/scripts.inc
@@ -9,7 +9,7 @@ SlateportCity_BattleTentLobby_MapScript2_20873B: @ 820873B
SlateportCity_BattleTentLobby_EventScript_208745:: @ 8208745
setvar VAR_TEMP_1, 1
- turnobject EVENT_OBJ_ID_PLAYER, 2
+ turnobject EVENT_OBJ_ID_PLAYER, DIR_NORTH
end
SlateportCity_BattleTentLobby_MapScript2_20874F: @ 820874F
@@ -128,12 +128,12 @@ SlateportCity_BattleTentLobby_EventScript_2088AA:: @ 82088AA
SlateportCity_BattleTentLobby_EventScript_2088CA:: @ 82088CA
message SlateportCity_BattleTentLobby_Text_2C586A
waitmessage
- multichoice 17, 6, 23, 0
+ multichoice 17, 6, MULTI_CHALLENGEINFO, 0
switch VAR_RESULT
case 0, SlateportCity_BattleTentLobby_EventScript_208906
case 1, SlateportCity_BattleTentLobby_EventScript_208A07
case 2, SlateportCity_BattleTentLobby_EventScript_208A2E
- case 127, SlateportCity_BattleTentLobby_EventScript_208A2E
+ case MULTI_B_PRESSED, SlateportCity_BattleTentLobby_EventScript_208A2E
SlateportCity_BattleTentLobby_EventScript_208906:: @ 8208906
setvar VAR_FRONTIER_FACILITY, 4
@@ -281,7 +281,7 @@ SlateportCity_BattleTentLobby_EventScript_208A99:: @ 8208A99
SlateportCity_BattleTentLobby_EventScript_208AA8:: @ 8208AA8
message SlateportCity_BattleTentLobby_Text_259743
waitmessage
- multichoice 17, 0, 111, 0
+ multichoice 17, 0, MULTI_SLATEPORT_TENT_RULES, 0
switch VAR_RESULT
case 0, SlateportCity_BattleTentLobby_EventScript_208B06
case 1, SlateportCity_BattleTentLobby_EventScript_208B14
@@ -289,7 +289,7 @@ SlateportCity_BattleTentLobby_EventScript_208AA8:: @ 8208AA8
case 3, SlateportCity_BattleTentLobby_EventScript_208B30
case 4, SlateportCity_BattleTentLobby_EventScript_208B3E
case 5, SlateportCity_BattleTentLobby_EventScript_208B4C
- case 127, SlateportCity_BattleTentLobby_EventScript_208B4C
+ case MULTI_B_PRESSED, SlateportCity_BattleTentLobby_EventScript_208B4C
end
SlateportCity_BattleTentLobby_EventScript_208B06:: @ 8208B06
diff --git a/data/maps/SlateportCity_Harbor/scripts.inc b/data/maps/SlateportCity_Harbor/scripts.inc
index 32fa9fa5d..b6888ddd5 100644
--- a/data/maps/SlateportCity_Harbor/scripts.inc
+++ b/data/maps/SlateportCity_Harbor/scripts.inc
@@ -77,7 +77,7 @@ SlateportCity_Harbor_EventScript_20C9F5:: @ 820C9F5
closemessage
setflag FLAG_HIDE_AQUA_HIDEOUT_1F_GRUNT_1_BLOCKING_ENTRANCE
setflag FLAG_HIDE_AQUA_HIDEOUT_1F_GRUNT_2_BLOCKING_ENTRANCE
- moveobjectoffscreen 4
+ copyobjectxytoperm 4
setobjectmovementtype 4, MOVEMENT_TYPE_FACE_RIGHT
releaseall
end
@@ -175,20 +175,20 @@ SlateportCity_Harbor_EventScript_20CB06:: @ 820CB06
SlateportCity_Harbor_EventScript_20CB1A:: @ 820CB1A
goto_if_set FLAG_MET_SCOTT_ON_SS_TIDAL, SlateportCity_Harbor_EventScript_20CB50
- multichoicedefault 18, 8, 56, 2, 0
+ multichoicedefault 18, 8, MULTI_SSTIDAL_SLATEPORT_NO_BF, 2, 0
switch VAR_RESULT
case 0, SlateportCity_Harbor_EventScript_20CB92
case 1, SlateportCity_Harbor_EventScript_20CC2D
- case 127, SlateportCity_Harbor_EventScript_20CC2D
+ case MULTI_B_PRESSED, SlateportCity_Harbor_EventScript_20CC2D
end
SlateportCity_Harbor_EventScript_20CB50:: @ 820CB50
- multichoicedefault 17, 6, 52, 2, 0
+ multichoicedefault 17, 6, MULTI_SSTIDAL_SLATEPORT_WITH_BF, 2, 0
switch VAR_RESULT
case 0, SlateportCity_Harbor_EventScript_20CB92
case 1, SlateportCity_Harbor_EventScript_20CBBA
case 2, SlateportCity_Harbor_EventScript_20CC2D
- case 127, SlateportCity_Harbor_EventScript_20CC2D
+ case MULTI_B_PRESSED, SlateportCity_Harbor_EventScript_20CC2D
end
SlateportCity_Harbor_EventScript_20CB88:: @ 820CB88
@@ -237,7 +237,7 @@ SlateportCity_Harbor_EventScript_20CBE9:: @ 820CBE9
delay 30
hideobjectat EVENT_OBJ_ID_PLAYER, MAP_PETALBURG_CITY
setvar VAR_0x8004, 5
- call SlateportCity_Harbor_EventScript_2721E2
+ call Common_EventScript_FerryDepart
return
SlateportCity_Harbor_EventScript_20CC2D:: @ 820CC2D
@@ -344,12 +344,12 @@ SlateportCity_Harbor_EventScript_20CD38:: @ 820CD38
end
SlateportCity_Harbor_EventScript_20CD44:: @ 820CD44
- multichoice 0, 0, 46, 0
+ multichoice 0, 0, MULTI_STERN_DEEPSEA, 0
switch VAR_RESULT
case 0, SlateportCity_Harbor_EventScript_20CD7B
case 1, SlateportCity_Harbor_EventScript_20CDBB
case 2, SlateportCity_Harbor_EventScript_20CDFB
- case 127, SlateportCity_Harbor_EventScript_20CDFB
+ case MULTI_B_PRESSED, SlateportCity_Harbor_EventScript_20CDFB
end
SlateportCity_Harbor_EventScript_20CD7B:: @ 820CD7B
diff --git a/data/maps/SlateportCity_House1/scripts.inc b/data/maps/SlateportCity_House1/scripts.inc
index 0a5808820..b1d07c5bb 100644
--- a/data/maps/SlateportCity_House1/scripts.inc
+++ b/data/maps/SlateportCity_House1/scripts.inc
@@ -28,7 +28,7 @@ SlateportCity_House1_EventScript_209AE9:: @ 8209AE9
SlateportCity_House1_EventScript_209AF3:: @ 8209AF3
specialvar VAR_RESULT, ScriptGetPartyMonSpecies
- compare VAR_RESULT, 412
+ compare VAR_RESULT, SPECIES_EGG
goto_if_eq SlateportCity_House1_EventScript_209B46
special TV_CopyNicknameToStringVar1AndEnsureTerminated
special TV_CheckMonOTIDEqualsPlayerID
diff --git a/data/maps/SlateportCity_OceanicMuseum_1F/scripts.inc b/data/maps/SlateportCity_OceanicMuseum_1F/scripts.inc
index 5a4947c8a..0516db1fc 100644
--- a/data/maps/SlateportCity_OceanicMuseum_1F/scripts.inc
+++ b/data/maps/SlateportCity_OceanicMuseum_1F/scripts.inc
@@ -34,13 +34,12 @@ SlateportCity_OceanicMuseum_1F_EventScript_20ADC1:: @ 820ADC1
end
SlateportCity_OceanicMuseum_1F_EventScript_20ADE8:: @ 820ADE8
- checkmoney 0x32, 0
+ checkmoney 50, 0
compare VAR_RESULT, 0
goto_if_eq SlateportCity_OceanicMuseum_1F_EventScript_20AE18
playse SE_REGI
- takemoney 0x32, 0
+ takemoney 50, 0
updatemoneybox 0, 0
- nop
msgbox SlateportCity_OceanicMuseum_1F_Text_20B026, MSGBOX_DEFAULT
setvar VAR_SLATEPORT_MUSEUM_1F_STATE, 1
hidemoneybox
diff --git a/data/maps/SootopolisCity/scripts.inc b/data/maps/SootopolisCity/scripts.inc
index 7d2143346..d481924a2 100644
--- a/data/maps/SootopolisCity/scripts.inc
+++ b/data/maps/SootopolisCity/scripts.inc
@@ -179,11 +179,11 @@ SootopolisCity_EventScript_1E58E5:: @ 81E58E5
end
SootopolisCity_EventScript_1E58FC:: @ 81E58FC
- turnobject EVENT_OBJ_ID_PLAYER, 2
+ turnobject EVENT_OBJ_ID_PLAYER, DIR_NORTH
return
SootopolisCity_EventScript_1E5901:: @ 81E5901
- turnobject EVENT_OBJ_ID_PLAYER, 2
+ turnobject EVENT_OBJ_ID_PLAYER, DIR_NORTH
setvar VAR_SKY_PILLAR_STATE, 3
return
@@ -217,7 +217,7 @@ SootopolisCity_EventScript_1E5946:: @ 81E5946
setweather WEATHER_ALTERNATING
doweather
setvar VAR_0x8004, 0
- special sub_813B7D8
+ special Script_DoRayquazaScene
waitstate
applymovement 10, Common_Movement_WalkInPlaceLeft
applymovement 9, Common_Movement_WalkInPlaceRight
@@ -317,7 +317,7 @@ SootopolisCity_EventScript_1E5A82:: @ 81E5A82
setweather WEATHER_ALTERNATING
doweather
setvar VAR_0x8004, 0
- special sub_813B7D8
+ special Script_DoRayquazaScene
waitstate
applymovement 10, Common_Movement_WalkInPlaceLeft
applymovement 9, Common_Movement_WalkInPlaceRight
@@ -509,7 +509,7 @@ SootopolisCity_EventScript_1E5C1E:: @ 81E5C1E
removeobject 10
addobject 11
setvar VAR_0x8004, 1
- special sub_813B7D8
+ special Script_DoRayquazaScene
waitstate
playse SE_T_KAMI
special SpawnCameraObject
@@ -562,7 +562,7 @@ SootopolisCity_EventScript_1E5CCE:: @ 81E5CCE
removeobject 10
addobject 11
setvar VAR_0x8004, 1
- special sub_813B7D8
+ special Script_DoRayquazaScene
waitstate
special SpawnCameraObject
applymovement EVENT_OBJ_ID_CAMERA, SootopolisCity_Movement_1E5E63
@@ -748,7 +748,7 @@ SootopolisCity_EventScript_1E5F1B:: @ 81E5F1B
msgbox SootopolisCity_Text_2A7BB0, MSGBOX_DEFAULT
random 10
addvar VAR_RESULT, 20
- addvar VAR_RESULT, 133
+ addvar VAR_RESULT, FIRST_BERRY_INDEX
giveitem_std VAR_RESULT
compare VAR_RESULT, 0
goto_if_eq Common_EventScript_ShowBagIsFull
@@ -1366,14 +1366,14 @@ SootopolisCity_EventScript_1E646F:: @ 81E646F
SootopolisCity_EventScript_1E64B2:: @ 81E64B2
applymovement 18, SootopolisCity_Movement_1E64EC
waitmovement 0
- moveobjectoffscreen 18
+ copyobjectxytoperm 18
setvar VAR_SOOTOPOLIS_WALLACE_STATE, 1
return
SootopolisCity_EventScript_1E64C5:: @ 81E64C5
applymovement 18, SootopolisCity_Movement_1E64EF
waitmovement 0
- moveobjectoffscreen 18
+ copyobjectxytoperm 18
setvar VAR_SOOTOPOLIS_WALLACE_STATE, 2
return
diff --git a/data/maps/SootopolisCity_Gym_1F/scripts.inc b/data/maps/SootopolisCity_Gym_1F/scripts.inc
index 99b9fb2ba..8db708e9c 100644
--- a/data/maps/SootopolisCity_Gym_1F/scripts.inc
+++ b/data/maps/SootopolisCity_Gym_1F/scripts.inc
@@ -222,6 +222,10 @@ SootopolisCity_Gym_1F_Text_225268: @ 8225268
.string "A grand illusion of water sculpted\n"
.string "by POKéMON and myself!$"
+@ NOTE: This defeat text actually causes a buffer overflow. It's about 50 bytes too long for
+@ the gDisplayedStringBattle buffer that it's put into, and it stomps all over the gBattleTextBuffs
+@ after, as well as the otherwise unused array after that. One wonders if that's the reason for
+@ the existence of that unused array of ints.
SootopolisCity_Gym_1F_Text_225432: @ 8225432
.string "Ahahaha, excellent!\n"
.string "Very well, you are the winner.\p"
diff --git a/data/maps/SootopolisCity_House6/scripts.inc b/data/maps/SootopolisCity_House6/scripts.inc
index 0f175478a..bd9c8fe51 100644
--- a/data/maps/SootopolisCity_House6/scripts.inc
+++ b/data/maps/SootopolisCity_House6/scripts.inc
@@ -9,7 +9,7 @@ SootopolisCity_House6_EventScript_226F5C:: @ 8226F5C
compare VAR_RESULT, 0
call_if_eq SootopolisCity_House6_EventScript_226F99
msgbox SootopolisCity_House6_Text_227034, MSGBOX_DEFAULT
- givedecoration_std 117
+ givedecoration_std DECOR_WAILMER_DOLL
compare VAR_RESULT, 0
goto_if_eq SootopolisCity_House6_EventScript_226FAD
setflag FLAG_RECEIVED_WAILMER_DOLL
@@ -27,7 +27,7 @@ SootopolisCity_House6_EventScript_226FA3:: @ 8226FA3
end
SootopolisCity_House6_EventScript_226FAD:: @ 8226FAD
- bufferdecorationname 1, 117
+ bufferdecorationname 1, DECOR_WAILMER_DOLL
msgbox gText_NoRoomLeftForAnother, MSGBOX_DEFAULT
msgbox SootopolisCity_House6_Text_22704A, MSGBOX_DEFAULT
release
diff --git a/data/maps/SootopolisCity_MysteryEventsHouse_1F/scripts.inc b/data/maps/SootopolisCity_MysteryEventsHouse_1F/scripts.inc
index 5f2352645..78938b7d8 100644
--- a/data/maps/SootopolisCity_MysteryEventsHouse_1F/scripts.inc
+++ b/data/maps/SootopolisCity_MysteryEventsHouse_1F/scripts.inc
@@ -36,7 +36,7 @@ SootopolisCity_MysteryEventsHouse_1F_EventScript_2279B7:: @ 82279B7
waitmovement 0
applymovement 1, SootopolisCity_MysteryEventsHouse_1F_Movement_227A21
waitmovement 0
- moveobjectoffscreen 1
+ copyobjectxytoperm 1
applymovement EVENT_OBJ_ID_PLAYER, Common_Movement_WalkInPlaceUp
waitmovement 0
compare VAR_SOOTOPOLIS_MYSTERY_EVENTS_STATE, 1
diff --git a/data/maps/SouthernIsland_Exterior/scripts.inc b/data/maps/SouthernIsland_Exterior/scripts.inc
index e3ecfa3db..2ee0ae602 100644
--- a/data/maps/SouthernIsland_Exterior/scripts.inc
+++ b/data/maps/SouthernIsland_Exterior/scripts.inc
@@ -9,10 +9,10 @@ SouthernIsland_Exterior_OnTransition: @ 82429CE
SouthernIsland_Exterior_EventScript_2429D2:: @ 82429D2
lock
faceplayer
- msgbox SouthernIsland_Exterior_Text_2A69F1, MSGBOX_YESNO
+ msgbox EventTicket_Text_SouthernIslandSailBack, MSGBOX_YESNO
compare VAR_RESULT, 0
goto_if_eq SouthernIsland_Exterior_EventScript_242A17
- msgbox SouthernIsland_Exterior_Text_2A6A5D, MSGBOX_DEFAULT
+ msgbox EventTicket_Text_SailHome, MSGBOX_DEFAULT
closemessage
applymovement VAR_LAST_TALKED, Common_Movement_WalkInPlaceDown
waitmovement 0
@@ -26,7 +26,7 @@ SouthernIsland_Exterior_EventScript_2429D2:: @ 82429D2
end
SouthernIsland_Exterior_EventScript_242A17:: @ 8242A17
- msgbox SouthernIsland_Exterior_Text_2A6A82, MSGBOX_DEFAULT
+ msgbox EventTicket_Text_AsYouLike, MSGBOX_DEFAULT
release
end
@@ -50,6 +50,6 @@ BattleFrontier_OutsideWest_Movement_242A39: @ 8242A39
step_end
SouthernIsland_Exterior_EventScript_242A3C:: @ 8242A3C
- msgbox SouthernIsland_Exterior_Text_2A6AD5, MSGBOX_SIGN
+ msgbox SouthernIsland_Exterior_Text_Sign, MSGBOX_SIGN
end
diff --git a/data/maps/SouthernIsland_Interior/scripts.inc b/data/maps/SouthernIsland_Interior/scripts.inc
index a87b59079..a9b8c5e0c 100644
--- a/data/maps/SouthernIsland_Interior/scripts.inc
+++ b/data/maps/SouthernIsland_Interior/scripts.inc
@@ -24,12 +24,12 @@ SouthernIsland_Interior_OnTransition: @ 8242A6E
SouthernIsland_Interior_EventScript_242A8A:: @ 8242A8A
setvar VAR_OBJ_GFX_ID_1, EVENT_OBJ_GFX_LATIOS
- setvar VAR_TEMP_4, 408
+ setvar VAR_TEMP_4, SPECIES_LATIOS
return
SouthernIsland_Interior_EventScript_242A95:: @ 8242A95
setvar VAR_OBJ_GFX_ID_1, EVENT_OBJ_GFX_LATIAS
- setvar VAR_TEMP_4, 407
+ setvar VAR_TEMP_4, SPECIES_LATIAS
return
SouthernIsland_Interior_EventScript_242AA0:: @ 8242AA0
@@ -108,21 +108,21 @@ SouthernIsland_Interior_EventScript_242B8F:: @ 8242B8F
end
SouthernIsland_Interior_EventScript_242B9A:: @ 8242B9A
- msgbox SouthernIsland_Interior_Text_2A6AA1, MSGBOX_DEFAULT
+ msgbox SouthernIsland_Interior_Text_Sign, MSGBOX_DEFAULT
releaseall
end
SouthernIsland_Interior_EventScript_242BA4:: @ 8242BA4
- setvar VAR_0x8004, 408
+ setvar VAR_0x8004, SPECIES_LATIOS
setvar VAR_0x8005, 50
- setvar VAR_0x8006, 191
+ setvar VAR_0x8006, ITEM_SOUL_DEW
special CreateObedientEnemyMon
return
SouthernIsland_Interior_EventScript_242BB7:: @ 8242BB7
- setvar VAR_0x8004, 407
+ setvar VAR_0x8004, SPECIES_LATIAS
setvar VAR_0x8005, 50
- setvar VAR_0x8006, 191
+ setvar VAR_0x8006, ITEM_SOUL_DEW
special CreateObedientEnemyMon
return
diff --git a/data/maps/TrainerHill_Elevator/scripts.inc b/data/maps/TrainerHill_Elevator/scripts.inc
index ecc48a9e9..bf3d0f9f7 100644
--- a/data/maps/TrainerHill_Elevator/scripts.inc
+++ b/data/maps/TrainerHill_Elevator/scripts.inc
@@ -39,18 +39,20 @@ TrainerHill_Elevator_EventScript_269375:: @ 8269375
waitstate
end
+@ Unused
TrainerHill_Elevator_EventScript_2693CE:: @ 82693CE
goto TrainerHill_Elevator_EventScript_2693D4
end
+@ Functionally unused
TrainerHill_Elevator_EventScript_2693D4:: @ 82693D4
- special sub_8139C10
+ special CloseDeptStoreElevatorWindow
releaseall
end
TrainerHill_Elevator_EventScript_2693D9:: @ 82693D9
waitse
- special ShakeScreenInElevator
+ special MoveElevator
waitstate
return
diff --git a/data/maps/TrainerHill_Entrance/scripts.inc b/data/maps/TrainerHill_Entrance/scripts.inc
index 5be00aa9d..d09768f2b 100644
--- a/data/maps/TrainerHill_Entrance/scripts.inc
+++ b/data/maps/TrainerHill_Entrance/scripts.inc
@@ -150,12 +150,12 @@ TrainerHill_Entrance_EventScript_268275:: @ 8268275
TrainerHill_Entrance_EventScript_26827D:: @ 826827D
message TrainerHill_Entrance_Text_2685F8
waitmessage
- multichoice 15, 6, 17, 0
+ multichoice 15, 6, MULTI_YESNOINFO, 0
switch VAR_RESULT
case 0, TrainerHill_Entrance_EventScript_2682C8
case 1, TrainerHill_Entrance_EventScript_268314
case 2, TrainerHill_Entrance_EventScript_2682BA
- case 127, TrainerHill_Entrance_EventScript_268314
+ case MULTI_B_PRESSED, TrainerHill_Entrance_EventScript_268314
end
TrainerHill_Entrance_EventScript_2682BA:: @ 82682BA
@@ -164,10 +164,10 @@ TrainerHill_Entrance_EventScript_2682BA:: @ 82682BA
end
TrainerHill_Entrance_EventScript_2682C8:: @ 82682C8
- multichoice 13, 2, 113, 0
+ multichoice 13, 2, MULTI_TAG_MATCH_TYPE, 0
switch VAR_RESULT
case 4, TrainerHill_Entrance_EventScript_268314
- case 127, TrainerHill_Entrance_EventScript_268314
+ case MULTI_B_PRESSED, TrainerHill_Entrance_EventScript_268314
setvar VAR_0x8004, TRAINER_HILL_FUNC_SET_TAG
copyvar VAR_0x8005, VAR_RESULT
special CallTrainerHillFunction
diff --git a/data/maps/UnknownLinkContestRoom_25_29/map.json b/data/maps/UnknownLinkContestRoom_25_29/map.json
index 956a68158..3e4387b6a 100644
--- a/data/maps/UnknownLinkContestRoom_25_29/map.json
+++ b/data/maps/UnknownLinkContestRoom_25_29/map.json
@@ -1,5 +1,5 @@
{
- "id": "MAP_UNKNOWN_MAP_25_29",
+ "id": "MAP_UNKNOWN_LINK_CONTEST_ROOM_25_29",
"name": "UnknownLinkContestRoom_25_29",
"layout": "LAYOUT_UNKNOWN_LINK_CONTEST_ROOM_25_29",
"music": "MUS_NIBI",
diff --git a/data/maps/UnknownLinkContestRoom_25_30/map.json b/data/maps/UnknownLinkContestRoom_25_30/map.json
index 526c6de2a..42a719c17 100644
--- a/data/maps/UnknownLinkContestRoom_25_30/map.json
+++ b/data/maps/UnknownLinkContestRoom_25_30/map.json
@@ -1,5 +1,5 @@
{
- "id": "MAP_UNKNOWN_MAP_25_30",
+ "id": "MAP_UNKNOWN_LINK_CONTEST_ROOM_25_30",
"name": "UnknownLinkContestRoom_25_30",
"layout": "LAYOUT_UNKNOWN_LINK_CONTEST_ROOM_25_30",
"music": "MUS_NIBI",
diff --git a/data/maps/UnknownLinkContestRoom_25_31/map.json b/data/maps/UnknownLinkContestRoom_25_31/map.json
index 9548c1125..ad18b00af 100644
--- a/data/maps/UnknownLinkContestRoom_25_31/map.json
+++ b/data/maps/UnknownLinkContestRoom_25_31/map.json
@@ -1,5 +1,5 @@
{
- "id": "MAP_UNKNOWN_MAP_25_31",
+ "id": "MAP_UNKNOWN_LINK_CONTEST_ROOM_25_31",
"name": "UnknownLinkContestRoom_25_31",
"layout": "LAYOUT_UNKNOWN_LINK_CONTEST_ROOM_25_31",
"music": "MUS_NIBI",
diff --git a/data/maps/UnknownLinkContestRoom_25_32/map.json b/data/maps/UnknownLinkContestRoom_25_32/map.json
index 27411d28e..0e1528e59 100644
--- a/data/maps/UnknownLinkContestRoom_25_32/map.json
+++ b/data/maps/UnknownLinkContestRoom_25_32/map.json
@@ -1,5 +1,5 @@
{
- "id": "MAP_UNKNOWN_MAP_25_32",
+ "id": "MAP_UNKNOWN_LINK_CONTEST_ROOM_25_32",
"name": "UnknownLinkContestRoom_25_32",
"layout": "LAYOUT_UNKNOWN_LINK_CONTEST_ROOM_25_32",
"music": "MUS_NIBI",
diff --git a/data/maps/UnknownLinkContestRoom_25_33/map.json b/data/maps/UnknownLinkContestRoom_25_33/map.json
index 1a15ae6d6..8765e9771 100644
--- a/data/maps/UnknownLinkContestRoom_25_33/map.json
+++ b/data/maps/UnknownLinkContestRoom_25_33/map.json
@@ -1,5 +1,5 @@
{
- "id": "MAP_UNKNOWN_MAP_25_33",
+ "id": "MAP_UNKNOWN_LINK_CONTEST_ROOM_25_33",
"name": "UnknownLinkContestRoom_25_33",
"layout": "LAYOUT_UNKNOWN_LINK_CONTEST_ROOM_25_33",
"music": "MUS_NIBI",
diff --git a/data/maps/UnknownLinkContestRoom_25_34/map.json b/data/maps/UnknownLinkContestRoom_25_34/map.json
index 4c90858b9..c7220897b 100644
--- a/data/maps/UnknownLinkContestRoom_25_34/map.json
+++ b/data/maps/UnknownLinkContestRoom_25_34/map.json
@@ -1,5 +1,5 @@
{
- "id": "MAP_UNKNOWN_MAP_25_34",
+ "id": "MAP_UNKNOWN_LINK_CONTEST_ROOM_25_34",
"name": "UnknownLinkContestRoom_25_34",
"layout": "LAYOUT_UNKNOWN_LINK_CONTEST_ROOM_25_34",
"music": "MUS_NIBI",
diff --git a/data/maps/VerdanturfTown_BattleTentBattleRoom/scripts.inc b/data/maps/VerdanturfTown_BattleTentBattleRoom/scripts.inc
index b43bc6077..fd8c05546 100644
--- a/data/maps/VerdanturfTown_BattleTentBattleRoom/scripts.inc
+++ b/data/maps/VerdanturfTown_BattleTentBattleRoom/scripts.inc
@@ -98,7 +98,7 @@ VerdanturfTown_BattleTentBattleRoom_EventScript_20243C:: @ 820243C
call_if_eq VerdanturfTown_BattleTentBattleRoom_EventScript_202565
compare VAR_RESULT, 2
call_if_eq VerdanturfTown_BattleTentBattleRoom_EventScript_20256C
- multichoice 20, 6, 104, 1
+ multichoice 20, 6, MULTI_GO_ON_REST_RETIRE, 1
switch VAR_RESULT
case 0, VerdanturfTown_BattleTentBattleRoom_EventScript_2024EA
case 1, VerdanturfTown_BattleTentBattleRoom_EventScript_20248A
@@ -114,11 +114,11 @@ VerdanturfTown_BattleTentBattleRoom_EventScript_20248A:: @ 820248A
VerdanturfTown_BattleTentBattleRoom_EventScript_2024B8:: @ 82024B8
message VerdanturfTown_BattleTentBattleRoom_Text_25005A
waitmessage
- multichoicedefault 20, 8, 94, 1, 0
+ multichoicedefault 20, 8, MULTI_YESNO, 1, 0
switch VAR_RESULT
case 1, VerdanturfTown_BattleTentBattleRoom_EventScript_20243C
case 0, VerdanturfTown_BattleTentBattleRoom_EventScript_2023AA
- case 127, VerdanturfTown_BattleTentBattleRoom_EventScript_20243C
+ case MULTI_B_PRESSED, VerdanturfTown_BattleTentBattleRoom_EventScript_20243C
VerdanturfTown_BattleTentBattleRoom_EventScript_2024EA:: @ 82024EA
applymovement 3, Common_Movement_WalkInPlaceRight
diff --git a/data/maps/VerdanturfTown_BattleTentLobby/scripts.inc b/data/maps/VerdanturfTown_BattleTentLobby/scripts.inc
index daaaaea1b..5bc309663 100644
--- a/data/maps/VerdanturfTown_BattleTentLobby/scripts.inc
+++ b/data/maps/VerdanturfTown_BattleTentLobby/scripts.inc
@@ -9,7 +9,7 @@ VerdanturfTown_BattleTentLobby_MapScript2_2016DB: @ 82016DB
VerdanturfTown_BattleTentLobby_EventScript_2016E5:: @ 82016E5
setvar VAR_TEMP_1, 1
- turnobject EVENT_OBJ_ID_PLAYER, 2
+ turnobject EVENT_OBJ_ID_PLAYER, DIR_NORTH
end
VerdanturfTown_BattleTentLobby_MapScript2_2016EF: @ 82016EF
@@ -141,12 +141,12 @@ VerdanturfTown_BattleTentLobby_EventScript_201873:: @ 8201873
VerdanturfTown_BattleTentLobby_EventScript_201893:: @ 8201893
message VerdanturfTown_BattleTentLobby_Text_2C5129
waitmessage
- multichoice 17, 6, 23, 0
+ multichoice 17, 6, MULTI_CHALLENGEINFO, 0
switch VAR_RESULT
case 0, VerdanturfTown_BattleTentLobby_EventScript_2018CF
case 1, VerdanturfTown_BattleTentLobby_EventScript_2019DB
case 2, VerdanturfTown_BattleTentLobby_EventScript_201A37
- case 127, VerdanturfTown_BattleTentLobby_EventScript_201A37
+ case MULTI_B_PRESSED, VerdanturfTown_BattleTentLobby_EventScript_201A37
VerdanturfTown_BattleTentLobby_EventScript_2018CF:: @ 82018CF
setvar VAR_FRONTIER_FACILITY, 2
@@ -332,8 +332,8 @@ VerdanturfTown_BattleTentLobby_EventScript_201B02:: @ 8201B02
VerdanturfTown_BattleTentLobby_EventScript_201B11:: @ 8201B11
message VerdanturfTown_BattleTentLobby_Text_24EF88
waitmessage
- setvar VAR_0x8004, 12
- special sub_813A128
+ setvar VAR_0x8004, SCROLL_MULTI_BATTLE_TENT_RULES
+ special ShowScrollableMultichoice
waitstate
switch VAR_RESULT
case 0, VerdanturfTown_BattleTentLobby_EventScript_201B7E
@@ -343,7 +343,7 @@ VerdanturfTown_BattleTentLobby_EventScript_201B11:: @ 8201B11
case 4, VerdanturfTown_BattleTentLobby_EventScript_201BB6
case 5, VerdanturfTown_BattleTentLobby_EventScript_201BC4
case 6, VerdanturfTown_BattleTentLobby_EventScript_201BD2
- case 127, VerdanturfTown_BattleTentLobby_EventScript_201BD2
+ case MULTI_B_PRESSED, VerdanturfTown_BattleTentLobby_EventScript_201BD2
end
VerdanturfTown_BattleTentLobby_EventScript_201B7E:: @ 8201B7E
diff --git a/data/maps/VictoryRoad_1F/scripts.inc b/data/maps/VictoryRoad_1F/scripts.inc
index 5214edc44..b6983eac0 100644
--- a/data/maps/VictoryRoad_1F/scripts.inc
+++ b/data/maps/VictoryRoad_1F/scripts.inc
@@ -44,7 +44,7 @@ VictoryRoad_1F_EventScript_235DE1:: @ 8235DE1
trainerbattle_no_intro TRAINER_WALLY_1, VictoryRoad_1F_Text_235FFC
msgbox VictoryRoad_1F_Text_236020, MSGBOX_DEFAULT
clearflag FLAG_HIDE_VICTORY_ROAD_ENTRANCE_WALLY
- moveobjectoffscreen 4
+ copyobjectxytoperm 4
setflag FLAG_DEFEATED_WALLY_VICTORY_ROAD
copyvar VAR_VICTORY_ROAD_1F_STATE, VAR_0x8008
releaseall
diff --git a/data/multiboot_berry_glitch_fix.s b/data/multiboot_berry_glitch_fix.s
index c77fc2c5e..57757090a 100644
--- a/data/multiboot_berry_glitch_fix.s
+++ b/data/multiboot_berry_glitch_fix.s
@@ -1,5 +1,5 @@
.section .rodata
gMultiBootProgram_BerryGlitchFix_Start:: @ 89A6550
- .incbin "data/berry_fix.mb"
+ .incbin "berry_fix/berry_fix.gba"
gMultiBootProgram_BerryGlitchFix_End:: @ 89AA144
diff --git a/data/mystery_event_msg.s b/data/mystery_event_msg.s
index dd1f8e681..33af5269c 100644
--- a/data/mystery_event_msg.s
+++ b/data/mystery_event_msg.s
@@ -2,6 +2,7 @@
#include "constants/items.h"
#include "constants/map_scripts.h"
#include "constants/moves.h"
+#include "constants/region_map_sections.h"
#include "constants/songs.h"
#include "constants/species.h"
#include "constants/vars.h"
@@ -19,7 +20,7 @@ MysteryEventScript_StampCard:: @ 8674CB0
specialvar VAR_0x8008, sub_813986C
setorcopyvar VAR_RESULT, 0
specialvar VAR_0x8009, sub_813986C
- subvar VAR_0x8008, 32777
+ subvar VAR_0x8008, VAR_0x8009
buffernumberstring 0, VAR_0x8008
lock
faceplayer
@@ -66,7 +67,7 @@ SurfPichu_FullParty: @ 8674D73
SurfPichu_GiveEgg: @ 8674D7E
giveegg SPECIES_PICHU
setmonobedient VAR_EVENT_PICHU_SLOT
- setmonmetlocation VAR_EVENT_PICHU_SLOT, 255
+ setmonmetlocation VAR_EVENT_PICHU_SLOT, METLOC_FATEFUL_ENCOUNTER
compare_var_to_value VAR_EVENT_PICHU_SLOT, 1
vgoto_if 1, SurfPichu_Slot1
compare_var_to_value VAR_EVENT_PICHU_SLOT, 2
diff --git a/data/script_cmd_table.inc b/data/script_cmd_table.inc
index e9a14437a..910227a92 100644
--- a/data/script_cmd_table.inc
+++ b/data/script_cmd_table.inc
@@ -100,7 +100,7 @@ gScriptCmdTable:: @ 81DB67C
.4byte ScrCmd_settrainerflag
.4byte ScrCmd_cleartrainerflag
.4byte ScrCmd_setobjectxyperm
- .4byte ScrCmd_moveobjectoffscreen
+ .4byte ScrCmd_copyobjectxytoperm
.4byte ScrCmd_setobjectmovementtype
.4byte ScrCmd_waitmessage
.4byte ScrCmd_message
diff --git a/data/scripts/apprentice.inc b/data/scripts/apprentice.inc
index d6713cde4..b75a3c579 100644
--- a/data/scripts/apprentice.inc
+++ b/data/scripts/apprentice.inc
@@ -553,7 +553,7 @@ gText_082B7D18:: @ 82B7D18
.string "time with someone like me.$"
gText_082B7DD4:: @ 82B7DD4
- .string "Oh! You're {PLAYER}{STRING 5}, aren't you?\p"
+ .string "Oh! You're {PLAYER}{KUN}, aren't you?\p"
.string "I've heard that you're tough at\n"
.string "POKéMON!\p"
.string "I'm {STR_VAR_1}!\n"
@@ -576,19 +576,19 @@ gText_082B7F35:: @ 82B7F35
.string "You know that the BATTLE TOWER has\n"
.string "Level 50 and Open Level Rooms?\p"
.string "Which do you think would be good\n"
- .string "for me, {PLAYER}{STRING 5}?$"
+ .string "for me, {PLAYER}{KUN}?$"
gText_082B7FE8:: @ 82B7FE8
.string "Okay, {STR_VAR_1} is suitable for me?\n"
.string "Thank you!\p"
.string "Knowing that you made the decision,\n"
- .string "{PLAYER}{STRING 5}, I won't be so upset if\l"
+ .string "{PLAYER}{KUN}, I won't be so upset if\l"
.string "I lose.\p"
.string "Okay, I'll look to you for advice again.\n"
.string "Bye!$"
gText_082B8087:: @ 82B8087
- .string "Oh, hi, there! {PLAYER}{STRING 5}!\n"
+ .string "Oh, hi, there! {PLAYER}{KUN}!\n"
.string "I know you because you're famous!\l"
.string "Call me {STR_VAR_1}! Glad to meet you!\p"
.string "I'm a TRIATHLETE, so I keep myself\n"
@@ -599,13 +599,13 @@ gText_082B8087:: @ 82B8087
.string "me to become a decent TRAINER.\p"
.string "So, I have a proposition!\p"
.string "There must be a reason why we met.\n"
- .string "So, {PLAYER}{STRING 5}, how about sharing your\l"
+ .string "So, {PLAYER}{KUN}, how about sharing your\l"
.string "wisdom with me every so often?$"
gText_082B822B:: @ 82B822B
.string "Oh, but, please?\n"
.string "A guy like me needs someone like\l"
- .string "you, {PLAYER}{STRING 5}!\p"
+ .string "you, {PLAYER}{KUN}!\p"
.string "Honestly, I need your advice!$"
gText_082B8286:: @ 82B8286
@@ -741,15 +741,15 @@ gText_082B8C20:: @ 82B8C20
gText_082B8CAA:: @ 82B8CAA
.string "Whoa! Could you be…\n"
- .string "Might you be… {PLAYER}{STRING 5}?!\l"
+ .string "Might you be… {PLAYER}{KUN}?!\l"
.string "That strong and famous TRAINER?\l"
.string "Well, hello, aren't I just the luckiest!\p"
.string "Hello, the name's {STR_VAR_1}!\p"
.string "I've been on the lookout for\n"
.string "a POKéMON teacher.\p"
.string "And with impeccably good timing,\n"
- .string "along came you, {PLAYER}{STRING 5}!\p"
- .string "So, there you have it, {PLAYER}{STRING 5}!\n"
+ .string "along came you, {PLAYER}{KUN}!\p"
+ .string "So, there you have it, {PLAYER}{KUN}!\n"
.string "Let me apprentice under you!$"
gText_082B8DD3:: @ 82B8DD3
@@ -774,7 +774,7 @@ gText_082B8ED5:: @ 82B8ED5
.string "Adios!$"
gText_082B8F45:: @ 82B8F45
- .string "Oh, hey, {PLAYER}{STRING 5}, right?\n"
+ .string "Oh, hey, {PLAYER}{KUN}, right?\n"
.string "The police were looking for you!\p"
.string "… … …\n"
.string "Of course I'm lying!\p"
@@ -822,7 +822,7 @@ gText_082B929C:: @ 82B929C
.string "Your turn now, tell me a little about\n"
.string "yourself, give it a try!\p"
.string "Uh-huh, uh-huh!\n"
- .string "{PLAYER}{STRING 5}'s your name,\l"
+ .string "{PLAYER}{KUN}'s your name,\l"
.string "and POKéMON's your game!\p"
.string "And you're at a delicate age\n"
.string "when all the world's your stage!\p"
@@ -901,7 +901,7 @@ gText_082B992D:: @ 82B992D
.string "not built to take the abuse…\p"
.string "I decided I'll battle POKéMON and\n"
.string "toughen myself up.\p"
- .string "You're {PLAYER}{STRING 5}, aren't you?\n"
+ .string "You're {PLAYER}{KUN}, aren't you?\n"
.string "The POKéMON LEAGUE CHAMP?\p"
.string "Listen, can I get you to give me\n"
.string "advice?$"
@@ -927,7 +927,7 @@ gText_082B9B76:: @ 82B9B76
gText_082B9BF2:: @ 82B9BF2
.string "Er… Um…\n"
- .string "{PLAYER}{STRING 5}…?\p"
+ .string "{PLAYER}{KUN}…?\p"
.string "Please, don't look at me that way.\n"
.string "You're making me all self-conscious.\p"
.string "I… I'm {STR_VAR_1}.\p"
@@ -935,7 +935,7 @@ gText_082B9BF2:: @ 82B9BF2
.string "but I explore ancient ruins and such.\p"
.string "I'm even more embarrassed to admit\n"
.string "I'm interested in the BATTLE FRONTIER.\p"
- .string "{PLAYER}{STRING 5}, you have a reputation as\n"
+ .string "{PLAYER}{KUN}, you have a reputation as\n"
.string "a tough TRAINER…\p"
.string "It's hard for me to say this,\n"
.string "but I want to ask something.\p"
@@ -962,18 +962,18 @@ gText_082B9EAA:: @ 82B9EAA
.string "I'll try my hand at that.\p"
.string "I hope I can make a valiant challenge\n"
.string "without getting all flustered…\p"
- .string "Thank you, {PLAYER}{STRING 5}.\n"
+ .string "Thank you, {PLAYER}{KUN}.\n"
.string "If we meet again, I hope you will be\l"
.string "as helpful.$"
gText_082B9F55:: @ 82B9F55
- .string "Hm? You appear to be {PLAYER}{STRING 5}…\n"
+ .string "Hm? You appear to be {PLAYER}{KUN}…\n"
.string "But are you really real?\p"
.string "You may call me {STR_VAR_1}.\p"
.string "I have been toying with the idea of\n"
.string "apprenticing under a strong TRAINER.\p"
.string "So, I must say I'm lucky you came along!\n"
- .string "…You really are {PLAYER}{STRING 5}, yes?\p"
+ .string "…You really are {PLAYER}{KUN}, yes?\p"
.string "No, no, if you are real, it's fine.\n"
.string "I merely want you to recognize me\l"
.string "as your apprentice.$"
@@ -1130,7 +1130,7 @@ gText_082BAA81:: @ 82BAA81
.string "my {STR_VAR_2} hold anything?$"
gText_082BAB22:: @ 82BAB22
- .string "Oh, {PLAYER}{STRING 5}.\n"
+ .string "Oh, {PLAYER}{KUN}.\n"
.string "There's something I wanted to ask you.\p"
.string "You know how you decided which\n"
.string "POKéMON I should have for me?\p"
@@ -1148,7 +1148,7 @@ gText_082BAC43:: @ 82BAC43
gText_082BAC78:: @ 82BAC78
.string "If you think that's best, I'll do that.\p"
.string "Knowing that you made the decision,\n"
- .string "{PLAYER}{STRING 5}, I won't be so upset if\l"
+ .string "{PLAYER}{KUN}, I won't be so upset if\l"
.string "I lose.\p"
.string "Okay, I'll look to you for advice again.\n"
.string "Bye!$"
@@ -1157,7 +1157,7 @@ gText_082BAD17:: @ 82BAD17
.string "The item {STR_VAR_1}, huh?\n"
.string "Not bad. I'll use it!\p"
.string "Knowing that you made the decision,\n"
- .string "{PLAYER}{STRING 5}, I won't be so upset if\l"
+ .string "{PLAYER}{KUN}, I won't be so upset if\l"
.string "I lose.\p"
.string "Okay, I'll look to you for advice again.\n"
.string "Bye!$"
@@ -1170,7 +1170,7 @@ gText_082BADB6:: @ 82BADB6
.string "do the best it can empty-handed?$"
gText_082BAE36:: @ 82BAE36
- .string "Yo, {PLAYER}{STRING 5}!\p"
+ .string "Yo, {PLAYER}{KUN}!\p"
.string "We're both busy, but we seem to run\n"
.string "into each other often anyway!\p"
.string "Today I have to do some walking,\n"
@@ -1315,7 +1315,7 @@ gText_082BB84A:: @ 82BB84A
gText_082BB8CD:: @ 82BB8CD
.string "Hola!\n"
- .string "My maestro, {PLAYER}{STRING 5}!\p"
+ .string "My maestro, {PLAYER}{KUN}!\p"
.string "I want to hit you up for advice on\n"
.string "POKéMON tools.\p"
.string "What do you think would be good for\n"
@@ -1348,7 +1348,7 @@ gText_082BBA6C:: @ 82BBA6C
.string "can win without holding any item?$"
gText_082BBB01:: @ 82BBB01
- .string "{PLAYER}{STRING 5}, something unbelievable\n"
+ .string "{PLAYER}{KUN}, something unbelievable\n"
.string "has happened!\p"
.string "I woke up this morning, and my POKéMON\n"
.string "had 10 NUGGETS!\p"
@@ -1465,14 +1465,14 @@ gText_082BC373:: @ 82BC373
.string "Doesn't need to hold anything?$"
gText_082BC40E:: @ 82BC40E
- .string "Gwah! Ouch! {PLAYER}{STRING 5}, my arm's broken!\n"
+ .string "Gwah! Ouch! {PLAYER}{KUN}, my arm's broken!\n"
.string "Don't touch it, please!\p"
.string "I must've broken it while I was trying\n"
.string "out different hold items with my posse\l"
.string "of POKéMON.\p"
.string "So, things being this way,\n"
.string "I need you to decide for me.\p"
- .string "{PLAYER}{STRING 5}, what do you think would be\n"
+ .string "{PLAYER}{KUN}, what do you think would be\n"
.string "good for my {STR_VAR_1} to hold?$"
gText_082BC514:: @ 82BC514
@@ -1504,14 +1504,14 @@ gText_082BC666:: @ 82BC666
gText_082BC714:: @ 82BC714
.string "Er… Um…\n"
- .string "{PLAYER}{STRING 5}…\p"
+ .string "{PLAYER}{KUN}…\p"
.string "Please, don't look at me that way.\n"
.string "My POKéMON don't have anything.\p"
.string "I… I'm really embarrassed about this,\n"
.string "but I really need your advice.\p"
.string "I can't decide what hold item would\n"
.string "make my {STR_VAR_1} strong.\p"
- .string "{PLAYER}{STRING 5}, what do you think would\n"
+ .string "{PLAYER}{KUN}, what do you think would\n"
.string "be good?$"
gText_082BC808:: @ 82BC808
@@ -1523,7 +1523,7 @@ gText_082BC84D:: @ 82BC84D
.string "I'll go without an item.\p"
.string "This is nerve-racking, though.\n"
.string "Wouldn't it be too cool?\p"
- .string "Thank you, {PLAYER}{STRING 5}.\n"
+ .string "Thank you, {PLAYER}{KUN}.\n"
.string "If we meet again, I hope you will be\l"
.string "as helpful.$"
@@ -1532,7 +1532,7 @@ gText_082BC8EA:: @ 82BC8EA
.string "I'll go with that {STR_VAR_1}.\p"
.string "This is nerve-racking, though.\n"
.string "Wouldn't it be too cool?\p"
- .string "Thank you, {PLAYER}{STRING 5}.\n"
+ .string "Thank you, {PLAYER}{KUN}.\n"
.string "If we meet again, I hope you will be\l"
.string "as helpful.$"
@@ -1545,7 +1545,7 @@ gText_082BC984:: @ 82BC984
.string "my {STR_VAR_2} didn't have an item?$"
gText_082BCA4D:: @ 82BCA4D
- .string "Hm? You appear to be {PLAYER}{STRING 5}…\n"
+ .string "Hm? You appear to be {PLAYER}{KUN}…\n"
.string "But are you really?\l"
.string "Perhaps you're a twin?\p"
.string "Oh, no, no, no, don't worry!\n"
@@ -1647,7 +1647,7 @@ gText_082BD18A:: @ 82BD18A
.string "speak with me… Thank you!$"
gText_082BD222:: @ 82BD222
- .string "Oh, {PLAYER}{STRING 5}! It's me!\n"
+ .string "Oh, {PLAYER}{KUN}! It's me!\n"
.string "I'm so glad to see you because I have\l"
.string "this little problem.\p"
.string "I can't decide how my POKéMON should\n"
@@ -1660,13 +1660,13 @@ gText_082BD222:: @ 82BD222
gText_082BD325:: @ 82BD325
.string "My {STR_VAR_1}? That's great!\p"
.string "Knowing that you made the decision,\n"
- .string "{PLAYER}{STRING 5}, I won't be so upset if\l"
+ .string "{PLAYER}{KUN}, I won't be so upset if\l"
.string "I lose.\p"
.string "Okay, I'll look to you for advice again.\n"
.string "Bye!$"
gText_082BD3B1:: @ 82BD3B1
- .string "Hi, my teacher {PLAYER}{STRING 5}!\n"
+ .string "Hi, my teacher {PLAYER}{KUN}!\n"
.string "I'm busy again today!\p"
.string "I have to do some cycling, shopping,\n"
.string "and humming.\p"
@@ -1740,13 +1740,13 @@ gText_082BD8F5:: @ 82BD8F5
gText_082BD9BE:: @ 82BD9BE
.string "Hello, hello!\n"
- .string "My mentor, {PLAYER}{STRING 5}!\l"
+ .string "My mentor, {PLAYER}{KUN}!\l"
.string "Hit me with your sage advice today!\p"
.string "You see, I pulled together a team of\n"
.string "three POKéMON. So far so good.\p"
.string "But the team's battling order's not\n"
.string "settled yet.\p"
- .string "This is where you come in, {PLAYER}{STRING 5}!\n"
+ .string "This is where you come in, {PLAYER}{KUN}!\n"
.string "You decide which POKéMON leads off!\p"
.string "Don't be shy now.\n"
.string "Let's blurt it out!$"
@@ -1759,7 +1759,7 @@ gText_082BDAE1:: @ 82BDAE1
.string "Adios!$"
gText_082BDB4E:: @ 82BDB4E
- .string "{PLAYER}{STRING 5}, listen!\n"
+ .string "{PLAYER}{KUN}, listen!\n"
.string "It's a crisis!\p"
.string "My POKéMON, all three of them, go into\n"
.string "battle at once!\p"
@@ -1815,7 +1815,7 @@ gText_082BDF4D:: @ 82BDF4D
.string "See you again, my smart friend!$"
gText_082BDFD8:: @ 82BDFD8
- .string "…Oof…ooch… {PLAYER}{STRING 5}…\n"
+ .string "…Oof…ooch… {PLAYER}{KUN}…\n"
.string "My stomach's hurting all of a sudden…\p"
.string "…It's getting better now…\p"
.string "I must've worried myself sick racking\n"
@@ -1823,7 +1823,7 @@ gText_082BDFD8:: @ 82BDFD8
.string "my posse of POKéMON.\p"
.string "So, things being this way,\n"
.string "I need you to decide for me.\p"
- .string "{PLAYER}{STRING 5}, which of my POKéMON should\n"
+ .string "{PLAYER}{KUN}, which of my POKéMON should\n"
.string "go first? So I'd win, I mean.$"
gText_082BE0FD:: @ 82BE0FD
@@ -1836,7 +1836,7 @@ gText_082BE0FD:: @ 82BE0FD
gText_082BE189:: @ 82BE189
.string "Er… Um…\n"
- .string "{PLAYER}{STRING 5}?\p"
+ .string "{PLAYER}{KUN}?\p"
.string "Please, don't look at me that way.\n"
.string "You're making me feel all flustered.\p"
.string "Um…\n"
@@ -1852,12 +1852,12 @@ gText_082BE2A5:: @ 82BE2A5
.string "I'll lead with my {STR_VAR_1}.\p"
.string "I hope I can do my best without\n"
.string "getting all flustered.\p"
- .string "Thank you, {PLAYER}{STRING 5}.\n"
+ .string "Thank you, {PLAYER}{KUN}.\n"
.string "If we meet again, I hope you will be\l"
.string "as helpful.$"
gText_082BE33E:: @ 82BE33E
- .string "Hm? You appear to be {PLAYER}{STRING 5}…\n"
+ .string "Hm? You appear to be {PLAYER}{KUN}…\n"
.string "But are you really?\l"
.string "Perhaps you're a clever look-alike?\p"
.string "Oh, no, no, no, don't worry!\n"
@@ -1949,7 +1949,7 @@ gText_082BE99C:: @ 82BE99C
.string "Thank you!$"
gText_082BEA1B:: @ 82BEA1B
- .string "Oh, {PLAYER}{STRING 5}! I'm so glad to see you!\n"
+ .string "Oh, {PLAYER}{KUN}! I'm so glad to see you!\n"
.string "I was about to go looking for you!\p"
.string "Can you decide what kind of POKéMON\n"
.string "I should use?\p"
@@ -1962,20 +1962,20 @@ gText_082BEA1B:: @ 82BEA1B
gText_082BEAE9:: @ 82BEAE9
.string "{STR_VAR_1}? That's great!\p"
.string "Knowing that you made the decision,\n"
- .string "{PLAYER}{STRING 5}, I won't be so upset if\l"
+ .string "{PLAYER}{KUN}, I won't be so upset if\l"
.string "I lose.\p"
.string "Okay, I'll look to you for advice again.\n"
.string "Bye!$"
gText_082BEB72:: @ 82BEB72
- .string "If it isn't {PLAYER}{STRING 5}! How's it going?\n"
+ .string "If it isn't {PLAYER}{KUN}! How's it going?\n"
.string "I'm busy again as always!\p"
.string "I want to do good with POKéMON, too,\n"
.string "but I haven't been able to decide\l"
.string "which POKéMON I should use.\p"
.string "You know how {STR_VAR_1} look strong?\n"
.string "But {STR_VAR_2} are tough to ignore.\p"
- .string "{PLAYER}{STRING 5}, give me some of your good\n"
+ .string "{PLAYER}{KUN}, give me some of your good\n"
.string "advice! Which one'd be good for me?$"
gText_082BEC8E:: @ 82BEC8E
@@ -2046,7 +2046,7 @@ gText_082BF11D:: @ 82BF11D
gText_082BF1A8:: @ 82BF1A8
.string "Hey, hey!\n"
- .string "My mentor, {PLAYER}{STRING 5}!\p"
+ .string "My mentor, {PLAYER}{KUN}!\p"
.string "Hello, I've been looking for you\n"
.string "for some more of your sage advice!\p"
.string "Which kind of POKéMON would be right\n"
@@ -2062,7 +2062,7 @@ gText_082BF268:: @ 82BF268
.string "Adios!$"
gText_082BF2D1:: @ 82BF2D1
- .string "{PLAYER}{STRING 5}, listen! Big news!\n"
+ .string "{PLAYER}{KUN}, listen! Big news!\n"
.string "I caught a mirage POKéMON!\p"
.string "Of course I'm lying!\n"
.string "Wahahaha!\p"
@@ -2120,13 +2120,13 @@ gText_082BF6E5:: @ 82BF6E5
.string "See you again, my smart friend!$"
gText_082BF773:: @ 82BF773
- .string "Oh, hi, {PLAYER}{STRING 5}…\n"
+ .string "Oh, hi, {PLAYER}{KUN}…\n"
.string "I have this horrible headache…\p"
.string "I must've worried too much about\n"
.string "the kind of POKéMON I should raise.\p"
.string "So, things being this way,\n"
.string "I need you to decide for me.\p"
- .string "{PLAYER}{STRING 5}, if I had to choose between\n"
+ .string "{PLAYER}{KUN}, if I had to choose between\n"
.string "the POKéMON {STR_VAR_1} and\l"
.string "{STR_VAR_2}, which should it be?$"
@@ -2138,7 +2138,7 @@ gText_082BF869:: @ 82BF869
gText_082BF8DD:: @ 82BF8DD
.string "Er… Um…\n"
- .string "{PLAYER}{STRING 5}…?\p"
+ .string "{PLAYER}{KUN}…?\p"
.string "Please, don't look at me that way.\n"
.string "I'm getting all flustered…\l"
.string "I… I need your advice.\p"
@@ -2152,12 +2152,12 @@ gText_082BF9BA:: @ 82BF9BA
.string "I'll do my best with one {STR_VAR_1}.\p"
.string "I hope I can do my best without\n"
.string "getting all flustered.\p"
- .string "Thank you, {PLAYER}{STRING 5}.\n"
+ .string "Thank you, {PLAYER}{KUN}.\n"
.string "If we meet again, I hope you will be\l"
.string "as helpful.$"
gText_082BFA5A:: @ 82BFA5A
- .string "Hm? You appear to be {PLAYER}{STRING 5}…\n"
+ .string "Hm? You appear to be {PLAYER}{KUN}…\n"
.string "But are you really real?\p"
.string "No, no, if you are real, it's fine.\n"
.string "Incidentally, I would like to obtain\l"
@@ -2250,7 +2250,7 @@ gText_082C0032:: @ 82C0032
.string "Thank you!$"
gText_082C0090:: @ 82C0090
- .string "Oh, {PLAYER}{STRING 5}!\n"
+ .string "Oh, {PLAYER}{KUN}!\n"
.string "I was just hoping to see you, too!\p"
.string "I was wondering what move would\n"
.string "be suitable for my {STR_VAR_1}.\p"
@@ -2263,14 +2263,14 @@ gText_082C0090:: @ 82C0090
gText_082C016E:: @ 82C016E
.string "{STR_VAR_1}? That's great!\p"
.string "Knowing that you made the decision,\n"
- .string "{PLAYER}{STRING 5}, I won't be so upset if\l"
+ .string "{PLAYER}{KUN}, I won't be so upset if\l"
.string "I lose.\p"
.string "Okay, I'll look to you for advice again.\n"
.string "Bye!$"
gText_082C01F7:: @ 82C01F7
.string "How could things be this busy?\n"
- .string "Hey, if it isn't {PLAYER}{STRING 5}!\l"
+ .string "Hey, if it isn't {PLAYER}{KUN}!\l"
.string "How's it going?\p"
.string "Since I got up this morning, I've done\n"
.string "my jogging, swimming, and cooking!\p"
@@ -2279,7 +2279,7 @@ gText_082C01F7:: @ 82C01F7
.string "my {STR_VAR_1} should learn!\p"
.string "{STR_VAR_2} looks good, huh?\n"
.string "But {STR_VAR_3}'s also decent.\p"
- .string "{PLAYER}{STRING 5}, give me some of your good\n"
+ .string "{PLAYER}{KUN}, give me some of your good\n"
.string "advice! Which move'd be good for me?$"
gText_082C034C:: @ 82C034C
@@ -2344,7 +2344,7 @@ gText_082C06D8:: @ 82C06D8
.string "some more another time.$"
gText_082C074A:: @ 82C074A
- .string "Hola, {PLAYER}{STRING 5}, bueno!\n"
+ .string "Hola, {PLAYER}{KUN}, bueno!\n"
.string "I'm hoping for some more of\l"
.string "your sage advice today!\p"
.string "What would be the best move for\n"
@@ -2362,7 +2362,7 @@ gText_082C0809:: @ 82C0809
.string "Adios!$"
gText_082C086E:: @ 82C086E
- .string "{PLAYER}{STRING 5}, it's completely wild!\p"
+ .string "{PLAYER}{KUN}, it's completely wild!\p"
.string "My POKéMON!\n"
.string "It learned six moves!\p"
.string "Of course I'm lying!\n"
@@ -2420,13 +2420,13 @@ gText_082C0C7D:: @ 82C0C7D
.string "See you again, my smart friend!$"
gText_082C0D0B:: @ 82C0D0B
- .string "Gahack! Gaah! Oh, {PLAYER}{STRING 5}…\n"
+ .string "Gahack! Gaah! Oh, {PLAYER}{KUN}…\n"
.string "I have this lousy cold, I do…\p"
.string "I want to pick a move for my POKéMON,\n"
.string "but I'm not up to it…\p"
.string "So, things being this way,\n"
.string "I need you to decide for me.\p"
- .string "{PLAYER}{STRING 5}, if I had to choose between\n"
+ .string "{PLAYER}{KUN}, if I had to choose between\n"
.string "{STR_VAR_2} and {STR_VAR_3} for\l"
.string "my {STR_VAR_1}, which would it be?$"
@@ -2438,7 +2438,7 @@ gText_082C0DFE:: @ 82C0DFE
gText_082C0E71:: @ 82C0E71
.string "Er… Um…\n"
- .string "{PLAYER}{STRING 5}…?\p"
+ .string "{PLAYER}{KUN}…?\p"
.string "Please, don't look at me that way.\n"
.string "I'm getting all flustered…\l"
.string "I… I need your advice.\p"
@@ -2454,12 +2454,12 @@ gText_082C0F6D:: @ 82C0F6D
.string "I'll try that {STR_VAR_1}.\p"
.string "I hope I can teach that move…\n"
.string "This is so nerve-racking…\p"
- .string "Thank you, {PLAYER}{STRING 5}.\n"
+ .string "Thank you, {PLAYER}{KUN}.\n"
.string "If we meet again, I hope you will be\l"
.string "as helpful.$"
gText_082C1003:: @ 82C1003
- .string "Hm? You appear to be {PLAYER}{STRING 5}…\n"
+ .string "Hm? You appear to be {PLAYER}{KUN}…\n"
.string "But are you really real?\p"
.string "Perhaps you're one of those popular\n"
.string "mimics?\p"
@@ -2569,7 +2569,7 @@ gText_082C174F:: @ 82C174F
.string "somewhere again!$"
gText_082C1862:: @ 82C1862
- .string "Oh, {PLAYER}{STRING 5}.\n"
+ .string "Oh, {PLAYER}{KUN}.\n"
.string "There's something I want you to hear.\p"
.string "I know that I don't always sound\n"
.string "nice or polite…\p"
@@ -2595,7 +2595,7 @@ gText_082C19A0:: @ 82C19A0
gText_082C1A76:: @ 82C1A76
.string "Oh, I can't get over how busy I am!\n"
- .string "Oh, hey, I was looking for you, {PLAYER}{STRING 5}.\p"
+ .string "Oh, hey, I was looking for you, {PLAYER}{KUN}.\p"
.string "Are you well as usual?\n"
.string "Things haven't changed for me at all.\p"
.string "I've got running, fighting, and mapping\n"
@@ -2605,7 +2605,7 @@ gText_082C1A76:: @ 82C1A76
.string "from a win without saying a word.\p"
.string "So, what would be a cool saying to\n"
.string "underline my coolness when I'm done\l"
- .string "and walking away? {PLAYER}{STRING 5}, help me!$"
+ .string "and walking away? {PLAYER}{KUN}, help me!$"
gText_082C1C16:: @ 82C1C16
.string "{STR_VAR_1}\p"
@@ -2615,7 +2615,7 @@ gText_082C1C16:: @ 82C1C16
.string "like you.\p"
.string "I'm going to make time somehow so\n"
.string "I can get into battling.\p"
- .string "Thanks for everything, {PLAYER}{STRING 5}!\n"
+ .string "Thanks for everything, {PLAYER}{KUN}!\n"
.string "We have to battle, you and me, one day!$"
gText_082C1CF5:: @ 82C1CF5
@@ -2694,7 +2694,7 @@ gText_082C21FF:: @ 82C21FF
gText_082C231C:: @ 82C231C
.string "Hola, bueno!\n"
- .string "{PLAYER}{STRING 5}!\p"
+ .string "{PLAYER}{KUN}!\p"
.string "You know, I'm getting the itch to roam\n"
.string "and battle where I may.\p"
.string "But before I do, I want your advice\n"
@@ -2714,7 +2714,7 @@ gText_082C2407:: @ 82C2407
.string "Adios!$"
gText_082C24B5:: @ 82C24B5
- .string "{PLAYER}{STRING 5}, there's big trouble!\p"
+ .string "{PLAYER}{KUN}, there's big trouble!\p"
.string "When I win a battle, I brag about it\n"
.string "for an hour at least!\p"
.string "Of course I'm lying!\n"
@@ -2793,14 +2793,14 @@ gText_082C2A0B:: @ 82C2A0B
.string "Love ya!$"
gText_082C2B50:: @ 82C2B50
- .string "{PLAYER}{STRING 5}, I'm finished…\n"
+ .string "{PLAYER}{KUN}, I'm finished…\n"
.string "My nose won't stop dripping…\p"
.string "I was trying to think up something\n"
.string "cool to say when I win a battle.\p"
.string "It inspired me so much, it made me cry,\n"
.string "and now my nose won't stop running…\p"
.string "So, things being this way,\n"
- .string "I need you to decide for me, {PLAYER}{STRING 5}.\p"
+ .string "I need you to decide for me, {PLAYER}{KUN}.\p"
.string "When I win a battle,\n"
.string "what should I say?$"
@@ -2812,13 +2812,13 @@ gText_082C2C77:: @ 82C2C77
.string "But in spite of my tears and runny\n"
.string "nose, I will use that saying!\p"
.string "I'm plumb out of things to ask you,\n"
- .string "{PLAYER}{STRING 5}.\p"
+ .string "{PLAYER}{KUN}.\p"
.string "From now on, we're rivals!\n"
.string "Thanks for everything!$"
gText_082C2D67:: @ 82C2D67
.string "Er… Um…\n"
- .string "{PLAYER}{STRING 5}…\p"
+ .string "{PLAYER}{KUN}…\p"
.string "Please, don't look at me that way.\n"
.string "You're making me all nervous.\p"
.string "I… I need your advice again.\n"
@@ -2832,13 +2832,13 @@ gText_082C2E41:: @ 82C2E41
.string "Oh… Okay!\n"
.string "I'll try to say that!\l"
.string "I might be too nervous to say it…\p"
- .string "Thank you, {PLAYER}{STRING 5}.\n"
+ .string "Thank you, {PLAYER}{KUN}.\n"
.string "I have to say good-bye now.\p"
.string "I'll obey all that you've taught me,\n"
- .string "{PLAYER}{STRING 5}, and do the best I can.$"
+ .string "{PLAYER}{KUN}, and do the best I can.$"
gText_082C2EF5:: @ 82C2EF5
- .string "Hm? You appear to be {PLAYER}{STRING 5}…\n"
+ .string "Hm? You appear to be {PLAYER}{KUN}…\n"
.string "But are you really?\l"
.string "Perhaps a clever {PLAYER} DOLL?\p"
.string "Oh, no, no, no, don't worry!\n"
diff --git a/data/scripts/cable_club.inc b/data/scripts/cable_club.inc
index eeecf2d75..8e49c982f 100644
--- a/data/scripts/cable_club.inc
+++ b/data/scripts/cable_club.inc
@@ -99,7 +99,7 @@ MossdeepCity_GameCorner_1F_EventScript_276BAE:: @ 8276BAE
OldaleTown_PokemonCenter_2F_EventScript_276BAE:: @ 8276BAE
compare VAR_0x8007, 0
goto_if_eq OldaleTown_PokemonCenter_2F_EventScript_276BBD
- turnobject VAR_0x8007, 3
+ turnobject VAR_0x8007, DIR_WEST
OldaleTown_PokemonCenter_2F_EventScript_276BBD:: @ 8276BBD
end
@@ -344,22 +344,22 @@ OldaleTown_PokemonCenter_2F_EventScript_276E22:: @ 8276E22
OldaleTown_PokemonCenter_2F_EventScript_276E30:: @ 8276E30
setvar VAR_0x8004, 0
goto_if_set FLAG_VISITED_MAUVILLE_CITY, OldaleTown_PokemonCenter_2F_EventScript_276E75
- multichoice 0, 0, 74, 0
+ multichoice 0, 0, MULTI_CABLE_CLUB_NO_RECORD_MIX, 0
switch VAR_RESULT
case 0, OldaleTown_PokemonCenter_2F_EventScript_2770B2
case 1, OldaleTown_PokemonCenter_2F_EventScript_276EB7
case 2, OldaleTown_PokemonCenter_2F_EventScript_2772EC
- case 127, OldaleTown_PokemonCenter_2F_EventScript_2772EC
+ case MULTI_B_PRESSED, OldaleTown_PokemonCenter_2F_EventScript_2772EC
end
OldaleTown_PokemonCenter_2F_EventScript_276E75:: @ 8276E75
- multichoice 0, 0, 76, 0
+ multichoice 0, 0, MULTI_CABLE_CLUB_WITH_RECORD_MIX, 0
switch VAR_RESULT
case 0, OldaleTown_PokemonCenter_2F_EventScript_2770B2
case 1, OldaleTown_PokemonCenter_2F_EventScript_276EB7
case 2, OldaleTown_PokemonCenter_2F_EventScript_2771DB
case 3, OldaleTown_PokemonCenter_2F_EventScript_2772EC
- case 127, OldaleTown_PokemonCenter_2F_EventScript_2772EC
+ case MULTI_B_PRESSED, OldaleTown_PokemonCenter_2F_EventScript_2772EC
end
OldaleTown_PokemonCenter_2F_EventScript_276EB7:: @ 8276EB7
@@ -370,14 +370,14 @@ OldaleTown_PokemonCenter_2F_EventScript_276EB7:: @ 8276EB7
OldaleTown_PokemonCenter_2F_EventScript_276EC2:: @ 8276EC2
message OldaleTown_PokemonCenter_2F_Text_2790BE
waitmessage
- multichoice 0, 0, 18, 0
+ multichoice 0, 0, MULTI_BATTLE_MODE, 0
switch VAR_RESULT
case 0, OldaleTown_PokemonCenter_2F_EventScript_276F23
case 1, OldaleTown_PokemonCenter_2F_EventScript_276F2E
case 2, OldaleTown_PokemonCenter_2F_EventScript_276F55
case 3, OldaleTown_PokemonCenter_2F_EventScript_276F15
case 4, OldaleTown_PokemonCenter_2F_EventScript_2772EC
- case 127, OldaleTown_PokemonCenter_2F_EventScript_2772EC
+ case MULTI_B_PRESSED, OldaleTown_PokemonCenter_2F_EventScript_2772EC
end
OldaleTown_PokemonCenter_2F_EventScript_276F15:: @ 8276F15
@@ -392,7 +392,7 @@ OldaleTown_PokemonCenter_2F_EventScript_276F23:: @ 8276F23
OldaleTown_PokemonCenter_2F_EventScript_276F2E:: @ 8276F2E
special HasEnoughMonsForDoubleBattle
- compare VAR_RESULT, 0
+ compare VAR_RESULT, PLAYER_HAS_TWO_USABLE_MONS
goto_if_ne OldaleTown_PokemonCenter_2F_EventScript_276F47
setvar VAR_0x8004, 2
goto OldaleTown_PokemonCenter_2F_EventScript_276F60
@@ -978,7 +978,7 @@ OldaleTown_PokemonCenter_2F_EventScript_27751B:: @ 827751B
faceplayer
setvar VAR_FRONTIER_FACILITY, 8
goto_if_unset FLAG_SYS_POKEDEX_GET, OldaleTown_PokemonCenter_2F_EventScript_277335
- specialvar VAR_RESULT, sub_813990C
+ specialvar VAR_RESULT, IsBadEggInParty
compare VAR_RESULT, 1
goto_if_eq OldaleTown_PokemonCenter_2F_EventScript_27731B
copyvar VAR_0x8007, VAR_LAST_TALKED
@@ -991,12 +991,12 @@ OldaleTown_PokemonCenter_2F_EventScript_27751B:: @ 827751B
end
OldaleTown_PokemonCenter_2F_EventScript_27755C:: @ 827755C
- multichoice 17, 6, 17, 0
+ multichoice 17, 6, MULTI_YESNOINFO, 0
switch VAR_RESULT
case 0, OldaleTown_PokemonCenter_2F_EventScript_27759F
case 1, OldaleTown_PokemonCenter_2F_EventScript_2772EC
case 2, OldaleTown_PokemonCenter_2F_EventScript_277593
- case 127, OldaleTown_PokemonCenter_2F_EventScript_2772EC
+ case MULTI_B_PRESSED, OldaleTown_PokemonCenter_2F_EventScript_2772EC
end
OldaleTown_PokemonCenter_2F_EventScript_277593:: @ 8277593
@@ -1086,7 +1086,7 @@ OldaleTown_PokemonCenter_2F_EventScript_2776A4:: @ 82776A4
faceplayer
setvar VAR_FRONTIER_FACILITY, 9
goto_if_unset FLAG_SYS_POKEDEX_GET, OldaleTown_PokemonCenter_2F_EventScript_277335
- specialvar VAR_RESULT, sub_813990C
+ specialvar VAR_RESULT, IsBadEggInParty
compare VAR_RESULT, 1
goto_if_eq OldaleTown_PokemonCenter_2F_EventScript_27731B
specialvar VAR_RESULT, IsWirelessAdapterConnected
@@ -1103,44 +1103,44 @@ OldaleTown_PokemonCenter_2F_EventScript_2776E3:: @ 82776E3
compare VAR_RESULT, 0
goto_if_eq OldaleTown_PokemonCenter_2F_EventScript_27778B
goto_if_set FLAG_VISITED_MAUVILLE_CITY, OldaleTown_PokemonCenter_2F_EventScript_27773E
- multichoice 0, 0, 78, 0
+ multichoice 0, 0, MULTI_WIRELESS_NO_RECORD, 0
switch VAR_RESULT
case 0, OldaleTown_PokemonCenter_2F_EventScript_27780D
case 1, OldaleTown_PokemonCenter_2F_EventScript_27783B
case 2, OldaleTown_PokemonCenter_2F_EventScript_2778F7
case 3, OldaleTown_PokemonCenter_2F_EventScript_2772EC
- case 127, OldaleTown_PokemonCenter_2F_EventScript_2772EC
+ case MULTI_B_PRESSED, OldaleTown_PokemonCenter_2F_EventScript_2772EC
end
OldaleTown_PokemonCenter_2F_EventScript_27773E:: @ 827773E
- multichoice 0, 0, 79, 0
+ multichoice 0, 0, MULTI_WIRELESS_ALL_SERVICES, 0
switch VAR_RESULT
case 0, OldaleTown_PokemonCenter_2F_EventScript_27780D
case 1, OldaleTown_PokemonCenter_2F_EventScript_27783B
case 2, OldaleTown_PokemonCenter_2F_EventScript_2778D9
case 3, OldaleTown_PokemonCenter_2F_EventScript_2778F7
case 4, OldaleTown_PokemonCenter_2F_EventScript_2772EC
- case 127, OldaleTown_PokemonCenter_2F_EventScript_2772EC
+ case MULTI_B_PRESSED, OldaleTown_PokemonCenter_2F_EventScript_2772EC
end
OldaleTown_PokemonCenter_2F_EventScript_27778B:: @ 827778B
goto_if_set FLAG_VISITED_MAUVILLE_CITY, OldaleTown_PokemonCenter_2F_EventScript_2777CB
- multichoice 0, 0, 75, 0
+ multichoice 0, 0, MULTI_WIRELESS_NO_RECORD_BERRY, 0
switch VAR_RESULT
case 0, OldaleTown_PokemonCenter_2F_EventScript_27780D
case 1, OldaleTown_PokemonCenter_2F_EventScript_27783B
case 2, OldaleTown_PokemonCenter_2F_EventScript_2772EC
- case 127, OldaleTown_PokemonCenter_2F_EventScript_2772EC
+ case MULTI_B_PRESSED, OldaleTown_PokemonCenter_2F_EventScript_2772EC
end
OldaleTown_PokemonCenter_2F_EventScript_2777CB:: @ 82777CB
- multichoice 0, 0, 77, 0
+ multichoice 0, 0, MULTI_WIRELESS_NO_BERRY, 0
switch VAR_RESULT
case 0, OldaleTown_PokemonCenter_2F_EventScript_27780D
case 1, OldaleTown_PokemonCenter_2F_EventScript_27783B
case 2, OldaleTown_PokemonCenter_2F_EventScript_2778D9
case 3, OldaleTown_PokemonCenter_2F_EventScript_2772EC
- case 127, OldaleTown_PokemonCenter_2F_EventScript_2772EC
+ case MULTI_B_PRESSED, OldaleTown_PokemonCenter_2F_EventScript_2772EC
end
OldaleTown_PokemonCenter_2F_EventScript_27780D:: @ 827780D
@@ -1157,14 +1157,14 @@ OldaleTown_PokemonCenter_2F_EventScript_27780D:: @ 827780D
OldaleTown_PokemonCenter_2F_EventScript_27783B:: @ 827783B
message OldaleTown_PokemonCenter_2F_Text_2790BE
waitmessage
- multichoice 0, 0, 18, 0
+ multichoice 0, 0, MULTI_BATTLE_MODE, 0
switch VAR_RESULT
case 0, OldaleTown_PokemonCenter_2F_EventScript_27788E
case 1, OldaleTown_PokemonCenter_2F_EventScript_277899
case 2, OldaleTown_PokemonCenter_2F_EventScript_2778C0
case 3, OldaleTown_PokemonCenter_2F_EventScript_2778CB
case 4, OldaleTown_PokemonCenter_2F_EventScript_2772EC
- case 127, OldaleTown_PokemonCenter_2F_EventScript_2772EC
+ case MULTI_B_PRESSED, OldaleTown_PokemonCenter_2F_EventScript_2772EC
end
OldaleTown_PokemonCenter_2F_EventScript_27788E:: @ 827788E
@@ -1174,7 +1174,7 @@ OldaleTown_PokemonCenter_2F_EventScript_27788E:: @ 827788E
OldaleTown_PokemonCenter_2F_EventScript_277899:: @ 8277899
special HasEnoughMonsForDoubleBattle
- compare VAR_RESULT, 0
+ compare VAR_RESULT, PLAYER_HAS_TWO_USABLE_MONS
goto_if_ne OldaleTown_PokemonCenter_2F_EventScript_2778B2
setvar VAR_0x8004, 1
goto OldaleTown_PokemonCenter_2F_EventScript_277931
@@ -1235,12 +1235,12 @@ OldaleTown_PokemonCenter_2F_EventScript_277931:: @ 8277931
OldaleTown_PokemonCenter_2F_EventScript_277989:: @ 8277989
message OldaleTown_PokemonCenter_2F_Text_2792CD
waitmessage
- multichoice 16, 6, 81, 0
+ multichoice 16, 6, MULTI_LINK_LEADER, 0
switch VAR_RESULT
case 0, OldaleTown_PokemonCenter_2F_EventScript_2779EE
case 1, OldaleTown_PokemonCenter_2F_EventScript_2779C6
case 2, OldaleTown_PokemonCenter_2F_EventScript_2772EC
- case 127, OldaleTown_PokemonCenter_2F_EventScript_2772EC
+ case MULTI_B_PRESSED, OldaleTown_PokemonCenter_2F_EventScript_2772EC
end
OldaleTown_PokemonCenter_2F_EventScript_2779C6:: @ 82779C6
@@ -1268,12 +1268,12 @@ OldaleTown_PokemonCenter_2F_EventScript_2779EE:: @ 82779EE
OldaleTown_PokemonCenter_2F_EventScript_277A16:: @ 8277A16
message OldaleTown_PokemonCenter_2F_Text_279334
waitmessage
- multichoice 16, 6, 81, 0
+ multichoice 16, 6, MULTI_LINK_LEADER, 0
switch VAR_RESULT
case 0, OldaleTown_PokemonCenter_2F_EventScript_277A7B
case 1, OldaleTown_PokemonCenter_2F_EventScript_277A53
case 2, OldaleTown_PokemonCenter_2F_EventScript_2772EC
- case 127, OldaleTown_PokemonCenter_2F_EventScript_2772EC
+ case MULTI_B_PRESSED, OldaleTown_PokemonCenter_2F_EventScript_2772EC
end
OldaleTown_PokemonCenter_2F_EventScript_277A53:: @ 8277A53
@@ -1301,12 +1301,12 @@ OldaleTown_PokemonCenter_2F_EventScript_277A7B:: @ 8277A7B
OldaleTown_PokemonCenter_2F_EventScript_277AA3:: @ 8277AA3
message OldaleTown_PokemonCenter_2F_Text_2793A3
waitmessage
- multichoice 16, 6, 81, 0
+ multichoice 16, 6, MULTI_LINK_LEADER, 0
switch VAR_RESULT
case 0, OldaleTown_PokemonCenter_2F_EventScript_277B08
case 1, OldaleTown_PokemonCenter_2F_EventScript_277AE0
case 2, OldaleTown_PokemonCenter_2F_EventScript_2772EC
- case 127, OldaleTown_PokemonCenter_2F_EventScript_2772EC
+ case MULTI_B_PRESSED, OldaleTown_PokemonCenter_2F_EventScript_2772EC
end
OldaleTown_PokemonCenter_2F_EventScript_277AE0:: @ 8277AE0
@@ -1445,12 +1445,12 @@ MossdeepCity_GameCorner_1F_EventScript_277C34:: @ 8277C34
faceplayer
message MossdeepCity_GameCorner_1F_Text_278A7D
waitmessage
- multichoice 0, 0, 80, 0
+ multichoice 0, 0, MULTI_WIRELESS_MINIGAME, 0
switch VAR_RESULT
case 0, MossdeepCity_GameCorner_1F_EventScript_277C73
case 1, MossdeepCity_GameCorner_1F_EventScript_277C7D
case 2, MossdeepCity_GameCorner_1F_EventScript_277C87
- case 127, MossdeepCity_GameCorner_1F_EventScript_277C87
+ case MULTI_B_PRESSED, MossdeepCity_GameCorner_1F_EventScript_277C87
end
MossdeepCity_GameCorner_1F_EventScript_277C73:: @ 8277C73
@@ -1479,12 +1479,12 @@ MossdeepCity_GameCorner_1F_EventScript_277C91:: @ 8277C91
delay 60
message MossdeepCity_GameCorner_1F_Text_278DAD
waitmessage
- multichoice 0, 0, 80, 0
+ multichoice 0, 0, MULTI_WIRELESS_MINIGAME, 0
switch VAR_RESULT
case 0, MossdeepCity_GameCorner_1F_EventScript_277CE9
case 1, MossdeepCity_GameCorner_1F_EventScript_277D35
case 2, MossdeepCity_GameCorner_1F_EventScript_2772F9
- case 127, MossdeepCity_GameCorner_1F_EventScript_2772F9
+ case MULTI_B_PRESSED, MossdeepCity_GameCorner_1F_EventScript_2772F9
end
MossdeepCity_GameCorner_1F_EventScript_277CE9:: @ 8277CE9
@@ -1528,12 +1528,12 @@ MossdeepCity_GameCorner_1F_EventScript_277D35:: @ 8277D35
MossdeepCity_GameCorner_1F_EventScript_277D81:: @ 8277D81
message MossdeepCity_GameCorner_1F_Text_2793A3
waitmessage
- multichoice 16, 6, 81, 0
+ multichoice 16, 6, MULTI_LINK_LEADER, 0
switch VAR_RESULT
case 0, MossdeepCity_GameCorner_1F_EventScript_277DE6
case 1, MossdeepCity_GameCorner_1F_EventScript_277DBE
case 2, MossdeepCity_GameCorner_1F_EventScript_2772F9
- case 127, MossdeepCity_GameCorner_1F_EventScript_2772F9
+ case MULTI_B_PRESSED, MossdeepCity_GameCorner_1F_EventScript_2772F9
end
MossdeepCity_GameCorner_1F_EventScript_277DBE:: @ 8277DBE
@@ -1626,15 +1626,15 @@ OldaleTown_PokemonCenter_2F_Text_277EF1: @ 8277EF1
.string "Which of our services do you wish\n"
.string "to use?$"
-OldaleTown_PokemonCenter_2F_Text_277F1B:: @ 8277F1B
+CableClub_Text_TradeUsingLinkCable:: @ 8277F1B
.string "Trade POKéMON with another player\n"
.string "using a GBA Game Link cable.$"
-OldaleTown_PokemonCenter_2F_Text_277F5A:: @ 8277F5A
+CableClub_Text_BattleUsingLinkCable:: @ 8277F5A
.string "You may battle another TRAINER\n"
.string "using a GBA Game Link cable.$"
-OldaleTown_PokemonCenter_2F_Text_277F96:: @ 8277F96
+CableClub_Text_RecordCornerUsingLinkCable:: @ 8277F96
.string "You can use the RECORD CORNER with\n"
.string "others using a GBA Game Link cable.$"
@@ -1804,19 +1804,19 @@ OldaleTown_PokemonCenter_2F_Text_27878B: @ 827878B
OldaleTown_PokemonCenter_2F_Text_278792: @ 8278792
.string "Please wait.$"
-OldaleTown_PokemonCenter_2F_Text_27879F:: @ 827879F
+CableClub_Text_YouMayTradeHere:: @ 827879F
.string "You may trade your POKéMON here\n"
.string "with another TRAINER.$"
-OldaleTown_PokemonCenter_2F_Text_2787D5:: @ 82787D5
+CableClub_Text_YouMayBattleHere:: @ 82787D5
.string "You may battle with your friends\n"
.string "here.$"
-OldaleTown_PokemonCenter_2F_Text_2787FC:: @ 82787FC
+CableClub_Text_CanMakeBerryPowder:: @ 82787FC
.string "Two to five TRAINERS can make\n"
.string "BERRY POWDER together.$"
-OldaleTown_PokemonCenter_2F_Text_278831:: @ 8278831
+CableClub_Text_CanMixRecords:: @ 8278831
.string "The records of two to four players\n"
.string "can be mixed together.$"
@@ -1824,7 +1824,7 @@ OldaleTown_PokemonCenter_2F_Text_27886B: @ 827886B
.string "A guide to the WIRELESS CLUB's\n"
.string "various services.$"
-OldaleTown_PokemonCenter_2F_Text_27889C:: @ 827889C
+CableClub_Text_CancelSelectedItem:: @ 827889C
.string "Cancels the selected MENU item.$"
OldaleTown_PokemonCenter_2F_Text_2788BC: @ 82788BC
diff --git a/data/scripts/contest_hall.inc b/data/scripts/contest_hall.inc
index 6c19cdc0c..03863eb40 100644
--- a/data/scripts/contest_hall.inc
+++ b/data/scripts/contest_hall.inc
@@ -43,24 +43,24 @@ LilycoveCity_ContestLobby_EventScript_279D4B:: @ 8279D4B
LilycoveCity_ContestLobby_EventScript_279D5A:: @ 8279D5A
message LilycoveCity_ContestLobby_Text_27AF28
waitmessage
- multichoice 0, 0, 2, 0
+ multichoice 0, 0, MULTI_ENTERINFO, 0
switch VAR_RESULT
case 0, LilycoveCity_ContestLobby_EventScript_279E62
case 1, LilycoveCity_ContestLobby_EventScript_279D97
case 2, LilycoveCity_ContestLobby_EventScript_279E09
- case 127, LilycoveCity_ContestLobby_EventScript_279E09
+ case MULTI_B_PRESSED, LilycoveCity_ContestLobby_EventScript_279E09
end
LilycoveCity_ContestLobby_EventScript_279D97:: @ 8279D97
message LilycoveCity_ContestLobby_Text_27AF5E
waitmessage
- multichoice 0, 0, 3, 0
+ multichoice 0, 0, MULTI_CONTEST_INFO, 0
switch VAR_RESULT
case 0, LilycoveCity_ContestLobby_EventScript_279DDF
case 1, LilycoveCity_ContestLobby_EventScript_279DED
case 2, LilycoveCity_ContestLobby_EventScript_279DFB
case 3, LilycoveCity_ContestLobby_EventScript_279D5A
- case 127, LilycoveCity_ContestLobby_EventScript_279D5A
+ case MULTI_B_PRESSED, LilycoveCity_ContestLobby_EventScript_279D5A
end
LilycoveCity_ContestLobby_EventScript_279DDF:: @ 8279DDF
@@ -104,14 +104,14 @@ LilycoveCity_ContestLobby_EventScript_279E13:: @ 8279E13
LilycoveCity_ContestLobby_EventScript_279E62:: @ 8279E62
message LilycoveCity_ContestLobby_Text_27B3FF
waitmessage
- multichoice 0, 0, 82, 0
+ multichoice 0, 0, MULTI_CONTEST_RANK, 0
switch VAR_RESULT
case 0, LilycoveCity_ContestLobby_EventScript_279EB5
case 1, LilycoveCity_ContestLobby_EventScript_279EC0
case 2, LilycoveCity_ContestLobby_EventScript_279ECB
case 3, LilycoveCity_ContestLobby_EventScript_279ED6
case 4, LilycoveCity_ContestLobby_EventScript_279E09
- case 127, LilycoveCity_ContestLobby_EventScript_279E09
+ case MULTI_B_PRESSED, LilycoveCity_ContestLobby_EventScript_279E09
end
LilycoveCity_ContestLobby_EventScript_279EB5:: @ 8279EB5
@@ -137,10 +137,10 @@ LilycoveCity_ContestLobby_EventScript_279ED6:: @ 8279ED6
LilycoveCity_ContestLobby_EventScript_279EE1:: @ 8279EE1
message LilycoveCity_ContestLobby_Text_27B423
waitmessage
- multichoice 0, 0, 4, 0
+ multichoice 0, 0, MULTI_CONTEST_TYPE, 0
switch VAR_RESULT
case 5, LilycoveCity_ContestLobby_EventScript_279E09
- case 127, LilycoveCity_ContestLobby_EventScript_279E09
+ case MULTI_B_PRESSED, LilycoveCity_ContestLobby_EventScript_279E09
copyvar VAR_CONTEST_CATEGORY, VAR_RESULT
goto LilycoveCity_ContestLobby_EventScript_279E13
end
@@ -216,19 +216,19 @@ LinkContestRoom1_EventScript_279FF2:: @ 8279FF2
return
LinkContestRoom1_EventScript_27A024:: @ 827A024
- setvar VAR_0x8009, 5
+ setvar VAR_0x8009, STDSTRING_NORMAL
return
LinkContestRoom1_EventScript_27A02A:: @ 827A02A
- setvar VAR_0x8009, 6
+ setvar VAR_0x8009, STDSTRING_SUPER
return
LinkContestRoom1_EventScript_27A030:: @ 827A030
- setvar VAR_0x8009, 7
+ setvar VAR_0x8009, STDSTRING_HYPER
return
LinkContestRoom1_EventScript_27A036:: @ 827A036
- setvar VAR_0x8009, 8
+ setvar VAR_0x8009, STDSTRING_MASTER
return
LinkContestRoom1_EventScript_27A03C:: @ 827A03C
@@ -241,27 +241,27 @@ LinkContestRoom1_EventScript_27A03C:: @ 827A03C
return
LinkContestRoom1_EventScript_27A079:: @ 827A079
- setvar VAR_0x8008, 0
+ setvar VAR_0x8008, CONTEST_CATEGORY_COOL
return
LinkContestRoom1_EventScript_27A07F:: @ 827A07F
- setvar VAR_0x8008, 1
+ setvar VAR_0x8008, CONTEST_CATEGORY_BEAUTY
return
LinkContestRoom1_EventScript_27A085:: @ 827A085
- setvar VAR_0x8008, 2
+ setvar VAR_0x8008, CONTEST_CATEGORY_CUTE
return
LinkContestRoom1_EventScript_27A08B:: @ 827A08B
- setvar VAR_0x8008, 3
+ setvar VAR_0x8008, CONTEST_CATEGORY_SMART
return
LinkContestRoom1_EventScript_27A091:: @ 827A091
- setvar VAR_0x8008, 4
+ setvar VAR_0x8008, CONTEST_CATEGORY_TOUGH
return
LinkContestRoom1_EventScript_27A097:: @ 827A097
- buffercontesttypestring 1, 32776
+ buffercontesttypestring 1, VAR_0x8008
bufferstdstring 2, VAR_0x8009
call LinkContestRoom1_EventScript_27A0B1
lockall
@@ -1012,71 +1012,71 @@ LinkContestRoom1_EventScript_27AA1B:: @ 827AA1B
return
LinkContestRoom1_EventScript_27AA6F:: @ 827AA6F
- turnvobject 0, 1
- turnvobject 2, 1
- turnvobject 4, 4
- turnvobject 6, 1
- turnvobject 8, 1
- turnvobject 10, 1
- turnvobject 12, 1
- turnvobject 14, 1
- turnvobject 16, 1
- turnvobject 18, 1
- turnvobject 20, 4
- turnvobject 22, 4
- turnvobject 25, 4
- turnvobject 27, 3
- turnvobject 28, 4
+ turnvobject 0, DIR_SOUTH
+ turnvobject 2, DIR_SOUTH
+ turnvobject 4, DIR_EAST
+ turnvobject 6, DIR_SOUTH
+ turnvobject 8, DIR_SOUTH
+ turnvobject 10, DIR_SOUTH
+ turnvobject 12, DIR_SOUTH
+ turnvobject 14, DIR_SOUTH
+ turnvobject 16, DIR_SOUTH
+ turnvobject 18, DIR_SOUTH
+ turnvobject 20, DIR_EAST
+ turnvobject 22, DIR_EAST
+ turnvobject 25, DIR_EAST
+ turnvobject 27, DIR_WEST
+ turnvobject 28, DIR_EAST
delay 10
- turnvobject 0, 4
- turnvobject 2, 4
- turnvobject 4, 4
- turnvobject 6, 4
- turnvobject 8, 4
- turnvobject 10, 3
- turnvobject 12, 3
- turnvobject 14, 3
- turnvobject 16, 3
- turnvobject 18, 3
- turnvobject 20, 1
- turnvobject 22, 1
- turnvobject 25, 2
- turnvobject 27, 2
- turnvobject 28, 2
+ turnvobject 0, DIR_EAST
+ turnvobject 2, DIR_EAST
+ turnvobject 4, DIR_EAST
+ turnvobject 6, DIR_EAST
+ turnvobject 8, DIR_EAST
+ turnvobject 10, DIR_WEST
+ turnvobject 12, DIR_WEST
+ turnvobject 14, DIR_WEST
+ turnvobject 16, DIR_WEST
+ turnvobject 18, DIR_WEST
+ turnvobject 20, DIR_SOUTH
+ turnvobject 22, DIR_SOUTH
+ turnvobject 25, DIR_NORTH
+ turnvobject 27, DIR_NORTH
+ turnvobject 28, DIR_NORTH
delay 10
- turnvobject 1, 2
- turnvobject 3, 2
- turnvobject 5, 2
- turnvobject 7, 2
- turnvobject 9, 4
- turnvobject 11, 2
- turnvobject 15, 2
- turnvobject 13, 2
- turnvobject 17, 2
- turnvobject 19, 2
- turnvobject 21, 3
- turnvobject 23, 3
- turnvobject 24, 3
- turnvobject 26, 4
- turnvobject 29, 3
- turnvobject 30, 3
+ turnvobject 1, DIR_NORTH
+ turnvobject 3, DIR_NORTH
+ turnvobject 5, DIR_NORTH
+ turnvobject 7, DIR_NORTH
+ turnvobject 9, DIR_EAST
+ turnvobject 11, DIR_NORTH
+ turnvobject 15, DIR_NORTH
+ turnvobject 13, DIR_NORTH
+ turnvobject 17, DIR_NORTH
+ turnvobject 19, DIR_NORTH
+ turnvobject 21, DIR_WEST
+ turnvobject 23, DIR_WEST
+ turnvobject 24, DIR_WEST
+ turnvobject 26, DIR_EAST
+ turnvobject 29, DIR_WEST
+ turnvobject 30, DIR_WEST
delay 10
- turnvobject 1, 4
- turnvobject 3, 4
- turnvobject 5, 4
- turnvobject 7, 4
- turnvobject 9, 4
- turnvobject 11, 3
- turnvobject 15, 3
- turnvobject 13, 3
- turnvobject 17, 3
- turnvobject 19, 3
- turnvobject 21, 1
- turnvobject 23, 1
- turnvobject 24, 1
- turnvobject 26, 2
- turnvobject 29, 2
- turnvobject 30, 2
+ turnvobject 1, DIR_EAST
+ turnvobject 3, DIR_EAST
+ turnvobject 5, DIR_EAST
+ turnvobject 7, DIR_EAST
+ turnvobject 9, DIR_EAST
+ turnvobject 11, DIR_WEST
+ turnvobject 15, DIR_WEST
+ turnvobject 13, DIR_WEST
+ turnvobject 17, DIR_WEST
+ turnvobject 19, DIR_WEST
+ turnvobject 21, DIR_SOUTH
+ turnvobject 23, DIR_SOUTH
+ turnvobject 24, DIR_SOUTH
+ turnvobject 26, DIR_NORTH
+ turnvobject 29, DIR_NORTH
+ turnvobject 30, DIR_NORTH
delay 10
return
diff --git a/data/scripts/day_care.inc b/data/scripts/day_care.inc
index 057a2fa07..062fd9f5a 100644
--- a/data/scripts/day_care.inc
+++ b/data/scripts/day_care.inc
@@ -1,245 +1,245 @@
-Route117_EventScript_291C18:: @ 8291C18
+Route117_EventScript_DaycareMan:: @ 8291C18
lock
faceplayer
special GetDaycareMonNicknames
specialvar VAR_RESULT, GetDaycareState
- compare VAR_RESULT, 1
- goto_if_eq Route117_EventScript_291C4D
- compare VAR_RESULT, 2
- goto_if_eq Route117_EventScript_291CD1
- compare VAR_RESULT, 3
- goto_if_eq Route117_EventScript_291CE8
- msgbox Route117_Text_291FCF, MSGBOX_DEFAULT
+ compare VAR_RESULT, DAYCARE_EGG_WAITING
+ goto_if_eq Route117_EventScript_DaycareEggWaiting
+ compare VAR_RESULT, DAYCARE_ONE_MON
+ goto_if_eq Route117_EventScript_CheckOnOneMon
+ compare VAR_RESULT, DAYCARE_TWO_MONS
+ goto_if_eq Route117_EventScript_CheckOnTwoMons
+ msgbox Route117_Text_SeeWifeIfYoudLikeMeToRaiseMon, MSGBOX_DEFAULT
release
end
-Route117_EventScript_291C4D:: @ 8291C4D
- msgbox Route117_Text_29205D, MSGBOX_YESNO
+Route117_EventScript_DaycareEggWaiting:: @ 8291C4D
+ msgbox Route117_Text_DoYouWantEgg, MSGBOX_YESNO
compare VAR_RESULT, 1
- goto_if_eq Route117_EventScript_291C83
- msgbox Route117_Text_2922C6, MSGBOX_YESNO
+ goto_if_eq Route117_EventScript_DaycareAcceptEgg
+ msgbox Route117_Text_IWillKeepDoYouWantIt, MSGBOX_YESNO
compare VAR_RESULT, 1
- goto_if_eq Route117_EventScript_291C83
- msgbox Route117_Text_292149, MSGBOX_DEFAULT
+ goto_if_eq Route117_EventScript_DaycareAcceptEgg
+ msgbox Route117_Text_IllKeepIt, MSGBOX_DEFAULT
clearflag FLAG_PENDING_DAYCARE_EGG
special RejectEggFromDayCare
release
end
-Route117_EventScript_291C83:: @ 8291C83
+Route117_EventScript_DaycareAcceptEgg:: @ 8291C83
specialvar VAR_RESULT, CalculatePlayerPartyCount
- compare VAR_RESULT, 6
- goto_if_ne Route117_EventScript_291C9D
- msgbox Route117_Text_29216A, MSGBOX_DEFAULT
+ compare VAR_RESULT, PARTY_SIZE
+ goto_if_ne Route117_EventScript_DaycareReceiveEgg
+ msgbox Route117_Text_YouHaveNoRoomForIt, MSGBOX_DEFAULT
release
end
-Route117_EventScript_291C9D:: @ 8291C9D
- message Route117_Text_2921A4
+Route117_EventScript_DaycareReceiveEgg:: @ 8291C9D
+ message Route117_Text_ReceivedEgg
playfanfare MUS_FANFA1
waitfanfare
waitbuttonpress
- msgbox Route117_Text_2921CF, MSGBOX_DEFAULT
+ msgbox Route117_Text_TakeGoodCareOfIt, MSGBOX_DEFAULT
special GiveEggFromDaycare
clearflag FLAG_PENDING_DAYCARE_EGG
release
end
-Route117_EventScript_291CB7:: @ 8291CB7
- specialvar VAR_RESULT, sub_8071614
+Route117_EventScript_CheckMonReceivedMail:: @ 8291CB7
+ specialvar VAR_RESULT, CheckDaycareMonReceivedMail
compare VAR_RESULT, 1
- call_if_eq Route117_EventScript_291CC8
+ call_if_eq Route117_EventScript_MonReceivedMail
return
-Route117_EventScript_291CC8:: @ 8291CC8
- msgbox Route117_Text_2921E5, MSGBOX_DEFAULT
+Route117_EventScript_MonReceivedMail:: @ 8291CC8
+ msgbox Route117_Text_FriendlyWithOtherTrainersMon, MSGBOX_DEFAULT
return
-Route117_EventScript_291CD1:: @ 8291CD1
+Route117_EventScript_CheckOnOneMon:: @ 8291CD1
special GetDaycareMonNicknames
- msgbox Route117_Text_292114, MSGBOX_DEFAULT
+ msgbox Route117_Text_YourMonIsDoingFine, MSGBOX_DEFAULT
setvar VAR_0x8004, 0
- call Route117_EventScript_291CB7
+ call Route117_EventScript_CheckMonReceivedMail
release
end
-Route117_EventScript_291CE8:: @ 8291CE8
+Route117_EventScript_CheckOnTwoMons:: @ 8291CE8
special GetDaycareMonNicknames
- msgbox Route117_Text_292299, MSGBOX_DEFAULT
+ msgbox Route117_Text_YourMonsAreDoingFine, MSGBOX_DEFAULT
special SetDaycareCompatibilityString
special ShowFieldMessageStringVar4
waitmessage
waitbuttonpress
setvar VAR_0x8004, 0
- call Route117_EventScript_291CB7
+ call Route117_EventScript_CheckMonReceivedMail
setvar VAR_0x8004, 1
- call Route117_EventScript_291CB7
+ call Route117_EventScript_CheckMonReceivedMail
release
end
-Route117_PokemonDayCare_EventScript_291D11:: @ 8291D11
+Route117_PokemonDayCare_EventScript_DaycareWoman:: @ 8291D11
lock
faceplayer
specialvar VAR_RESULT, GetDaycareState
+ compare VAR_RESULT, DAYCARE_EGG_WAITING
+ goto_if_eq Route117_PokemonDayCare_EventScript_EggWaiting
+ compare VAR_RESULT, DAYCARE_ONE_MON
+ goto_if_eq Route117_PokemonDayCare_EventScript_OneMonInDaycare
+ compare VAR_RESULT, DAYCARE_TWO_MONS
+ goto_if_eq Route117_PokemonDayCare_EventScript_TwoMonsInDaycare
+ msgbox Route117_PokemonDayCare_Text_WouldYouLikeUsToRaiseAMon, MSGBOX_YESNO
compare VAR_RESULT, 1
- goto_if_eq Route117_PokemonDayCare_EventScript_291E0B
- compare VAR_RESULT, 2
- goto_if_eq Route117_PokemonDayCare_EventScript_291E2F
- compare VAR_RESULT, 3
- goto_if_eq Route117_PokemonDayCare_EventScript_291F5C
- msgbox Route117_PokemonDayCare_Text_2922F4, MSGBOX_YESNO
- compare VAR_RESULT, 1
- goto_if_eq Route117_PokemonDayCare_EventScript_291D56
+ goto_if_eq Route117_PokemonDayCare_EventScript_GiveMonToRaise
msgbox Route117_PokemonDayCare_Text_292416, MSGBOX_DEFAULT
release
end
-Route117_PokemonDayCare_EventScript_291D56:: @ 8291D56
+Route117_PokemonDayCare_EventScript_GiveMonToRaise:: @ 8291D56
specialvar VAR_RESULT, CountPartyNonEggMons
compare VAR_RESULT, 1
- goto_if_eq Route117_PokemonDayCare_EventScript_291DED
- specialvar VAR_RESULT, sub_80722E0
+ goto_if_eq Route117_PokemonDayCare_EventScript_OnlyOneMon
+ specialvar VAR_RESULT, CountPartyAliveNonEggMons
compare VAR_RESULT, 2
- goto_if_eq Route117_PokemonDayCare_EventScript_291E01
- msgbox Route117_PokemonDayCare_Text_292349, MSGBOX_DEFAULT
+ goto_if_eq Route117_PokemonDayCare_EventScript_OnlyTwoAliveMons
+ msgbox Route117_PokemonDayCare_Text_WhichMonShouldWeRaise, MSGBOX_DEFAULT
fadescreen 1
special ChooseSendDaycareMon
waitstate
compare VAR_0x8004, 255
- goto_if_eq Route117_PokemonDayCare_EventScript_291DCA
+ goto_if_eq Route117_PokemonDayCare_EventScript_ComeAgain
specialvar VAR_RESULT, CountPartyAliveNonEggMons_IgnoreVar0x8004Slot
compare VAR_RESULT, 0
- goto_if_eq Route117_PokemonDayCare_EventScript_291DF7
- specialvar VAR_0x8005, GetSelectedMonNickAndSpecies
+ goto_if_eq Route117_PokemonDayCare_EventScript_OnlyOneAliveMon
+ specialvar VAR_0x8005, GetSelectedMonNicknameAndSpecies
waitse
playmoncry VAR_0x8005, 0
- msgbox Route117_PokemonDayCare_Text_292370, MSGBOX_DEFAULT
+ msgbox Route117_PokemonDayCare_Text_WellRaiseYourMon, MSGBOX_DEFAULT
waitmoncry
special StoreSelectedPokemonInDaycare
- incrementgamestat 47
+ incrementgamestat GAME_STAT_USED_DAYCARE
specialvar VAR_RESULT, GetDaycareState
- compare VAR_RESULT, 2
- goto_if_eq Route117_PokemonDayCare_EventScript_291DD4
+ compare VAR_RESULT, DAYCARE_ONE_MON
+ goto_if_eq Route117_PokemonDayCare_EventScript_CanRaiseOneMore
release
end
-Route117_PokemonDayCare_EventScript_291DCA:: @ 8291DCA
- msgbox Route117_PokemonDayCare_Text_292476, MSGBOX_DEFAULT
+Route117_PokemonDayCare_EventScript_ComeAgain:: @ 8291DCA
+ msgbox Route117_PokemonDayCare_Text_ComeAgain, MSGBOX_DEFAULT
release
end
-Route117_PokemonDayCare_EventScript_291DD4:: @ 8291DD4
- msgbox Route117_PokemonDayCare_Text_2923AF, MSGBOX_YESNO
+Route117_PokemonDayCare_EventScript_CanRaiseOneMore:: @ 8291DD4
+ msgbox Route117_PokemonDayCare_Text_WeCanRaiseOneMore, MSGBOX_YESNO
compare VAR_RESULT, 1
- goto_if_eq Route117_PokemonDayCare_EventScript_291D56
- goto Route117_PokemonDayCare_EventScript_291DCA
+ goto_if_eq Route117_PokemonDayCare_EventScript_GiveMonToRaise
+ goto Route117_PokemonDayCare_EventScript_ComeAgain
end
-Route117_PokemonDayCare_EventScript_291DED:: @ 8291DED
- msgbox Route117_PokemonDayCare_Text_2925BB, MSGBOX_DEFAULT
+Route117_PokemonDayCare_EventScript_OnlyOneMon:: @ 8291DED
+ msgbox Route117_PokemonDayCare_Text_YouHaveJustOneMon, MSGBOX_DEFAULT
release
end
-Route117_PokemonDayCare_EventScript_291DF7:: @ 8291DF7
- msgbox Route117_PokemonDayCare_Text_292617, MSGBOX_DEFAULT
+Route117_PokemonDayCare_EventScript_OnlyOneAliveMon:: @ 8291DF7
+ msgbox Route117_PokemonDayCare_Text_WhatWillYouBattleWith, MSGBOX_DEFAULT
release
end
-Route117_PokemonDayCare_EventScript_291E01:: @ 8291E01
- msgbox Route117_PokemonDayCare_Text_29266D, MSGBOX_DEFAULT
+Route117_PokemonDayCare_EventScript_OnlyTwoAliveMons:: @ 8291E01
+ msgbox Route117_PokemonDayCare_Text_YoullBeLeftWithJustOne, MSGBOX_DEFAULT
release
end
-Route117_PokemonDayCare_EventScript_291E0B:: @ 8291E0B
- msgbox Route117_PokemonDayCare_Text_2923F6, MSGBOX_DEFAULT
+Route117_PokemonDayCare_EventScript_EggWaiting:: @ 8291E0B
+ msgbox Route117_PokemonDayCare_Text_HusbandWasLookingForYou, MSGBOX_DEFAULT
release
end
-Route117_PokemonDayCare_EventScript_291E15:: @ 8291E15
- msgbox Route117_PokemonDayCare_Text_2924CC, MSGBOX_DEFAULT
+Route117_PokemonDayCare_EventScript_YourMonHasGrownXLevels:: @ 8291E15
+ msgbox Route117_PokemonDayCare_Text_YourMonHasGrownXLevels, MSGBOX_DEFAULT
return
-Route117_PokemonDayCare_EventScript_291E1E:: @ 8291E1E
+Route117_PokemonDayCare_EventScript_DisplayLevelsGained:: @ 8291E1E
specialvar VAR_RESULT, GetNumLevelsGainedFromDaycare
compare VAR_RESULT, 0
- call_if_ne Route117_PokemonDayCare_EventScript_291E15
+ call_if_ne Route117_PokemonDayCare_EventScript_YourMonHasGrownXLevels
return
-Route117_PokemonDayCare_EventScript_291E2F:: @ 8291E2F
- msgbox Route117_PokemonDayCare_Text_292488, MSGBOX_DEFAULT
+Route117_PokemonDayCare_EventScript_OneMonInDaycare:: @ 8291E2F
+ msgbox Route117_PokemonDayCare_Text_GoodToSeeYou, MSGBOX_DEFAULT
setvar VAR_0x8004, 0
- call Route117_PokemonDayCare_EventScript_291E1E
- msgbox Route117_PokemonDayCare_Text_2923AF, MSGBOX_YESNO
+ call Route117_PokemonDayCare_EventScript_DisplayLevelsGained
+ msgbox Route117_PokemonDayCare_Text_WeCanRaiseOneMore, MSGBOX_YESNO
compare VAR_RESULT, 1
- goto_if_eq Route117_PokemonDayCare_EventScript_291D56
- msgbox Route117_PokemonDayCare_Text_2925F6, MSGBOX_YESNO
+ goto_if_eq Route117_PokemonDayCare_EventScript_GiveMonToRaise
+ msgbox Route117_PokemonDayCare_Text_TakeYourMonBack, MSGBOX_YESNO
compare VAR_RESULT, 1
- goto_if_eq Route117_PokemonDayCare_EventScript_291E6D
- goto Route117_PokemonDayCare_EventScript_291DCA
+ goto_if_eq Route117_PokemonDayCare_EventScript_TryRetrieveMon
+ goto Route117_PokemonDayCare_EventScript_ComeAgain
end
-Route117_PokemonDayCare_EventScript_291E6D:: @ 8291E6D
+Route117_PokemonDayCare_EventScript_TryRetrieveMon:: @ 8291E6D
specialvar VAR_RESULT, CalculatePlayerPartyCount
- compare VAR_RESULT, 6
- goto_if_eq Route117_PokemonDayCare_EventScript_291F3D
+ compare VAR_RESULT, PARTY_SIZE
+ goto_if_eq Route117_PokemonDayCare_EventScript_NoRoom
specialvar VAR_RESULT, GetDaycareState
setvar VAR_0x8004, 0
- compare VAR_RESULT, 2
- goto_if_eq Route117_PokemonDayCare_EventScript_291EAC
+ compare VAR_RESULT, DAYCARE_ONE_MON
+ goto_if_eq Route117_PokemonDayCare_EventScript_CostPrompt
special ShowDaycareLevelMenu
waitstate
copyvar VAR_0x8004, VAR_RESULT
- compare VAR_RESULT, 2
- goto_if_eq Route117_PokemonDayCare_EventScript_291DCA
- goto Route117_PokemonDayCare_EventScript_291EAC
+ compare VAR_RESULT, DAYCARE_EXITED_LEVEL_MENU
+ goto_if_eq Route117_PokemonDayCare_EventScript_ComeAgain
+ goto Route117_PokemonDayCare_EventScript_CostPrompt
end
-Route117_PokemonDayCare_EventScript_291EAC:: @ 8291EAC
+Route117_PokemonDayCare_EventScript_CostPrompt:: @ 8291EAC
special GetDaycareCost
- msgbox Route117_PokemonDayCare_Text_292549, MSGBOX_YESNO
+ msgbox Route117_PokemonDayCare_Text_ItWillCostX, MSGBOX_YESNO
compare VAR_RESULT, 1
- goto_if_eq Route117_PokemonDayCare_EventScript_291EC8
- goto Route117_PokemonDayCare_EventScript_291DCA
+ goto_if_eq Route117_PokemonDayCare_EventScript_CheckEnoughMoney
+ goto Route117_PokemonDayCare_EventScript_ComeAgain
end
-Route117_PokemonDayCare_EventScript_291EC8:: @ 8291EC8
+Route117_PokemonDayCare_EventScript_CheckEnoughMoney:: @ 8291EC8
specialvar VAR_RESULT, IsEnoughForCostInVar0x8005
compare VAR_RESULT, 1
- goto_if_eq Route117_PokemonDayCare_EventScript_291EE2
- msgbox Route117_PokemonDayCare_Text_292432, MSGBOX_DEFAULT
+ goto_if_eq Route117_PokemonDayCare_EventScript_RetrieveMon
+ msgbox Route117_PokemonDayCare_Text_NotEnoughMoney, MSGBOX_DEFAULT
release
end
-Route117_PokemonDayCare_EventScript_291EE2:: @ 8291EE2
- applymovement 1, Route117_PokemonDayCare_Movement_291F47
+Route117_PokemonDayCare_EventScript_RetrieveMon:: @ 8291EE2
+ applymovement 1, Route117_PokemonDayCare_Movement_RetrieveDaycareMon
waitmovement 0
specialvar VAR_RESULT, TakePokemonFromDaycare
special SubtractMoneyFromVar0x8005
playse SE_REGI
- msgbox Route117_PokemonDayCare_Text_292575, MSGBOX_DEFAULT
+ msgbox Route117_PokemonDayCare_Text_HeresYourMon, MSGBOX_DEFAULT
waitse
playmoncry VAR_RESULT, 0
- msgbox Route117_PokemonDayCare_Text_292593, MSGBOX_DEFAULT
+ msgbox Route117_PokemonDayCare_Text_TookBackMon, MSGBOX_DEFAULT
waitmoncry
specialvar VAR_RESULT, GetDaycareState
- compare VAR_RESULT, 2
- goto_if_eq Route117_PokemonDayCare_EventScript_291F24
- goto Route117_PokemonDayCare_EventScript_291DCA
+ compare VAR_RESULT, DAYCARE_ONE_MON
+ goto_if_eq Route117_PokemonDayCare_EventScript_AskRetrieveOtherMon
+ goto Route117_PokemonDayCare_EventScript_ComeAgain
end
-Route117_PokemonDayCare_EventScript_291F24:: @ 8291F24
- msgbox Route117_PokemonDayCare_Text_29244F, MSGBOX_YESNO
+Route117_PokemonDayCare_EventScript_AskRetrieveOtherMon:: @ 8291F24
+ msgbox Route117_PokemonDayCare_Text_TakeOtherOneBackToo, MSGBOX_YESNO
compare VAR_RESULT, 1
- goto_if_eq Route117_PokemonDayCare_EventScript_291E6D
- goto Route117_PokemonDayCare_EventScript_291DCA
+ goto_if_eq Route117_PokemonDayCare_EventScript_TryRetrieveMon
+ goto Route117_PokemonDayCare_EventScript_ComeAgain
end
-Route117_PokemonDayCare_EventScript_291F3D:: @ 8291F3D
- msgbox Route117_PokemonDayCare_Text_2924EF, MSGBOX_DEFAULT
+Route117_PokemonDayCare_EventScript_NoRoom:: @ 8291F3D
+ msgbox Route117_PokemonDayCare_Text_YourTeamIsFull, MSGBOX_DEFAULT
release
end
-Route117_PokemonDayCare_Movement_291F47: @ 8291F47
+Route117_PokemonDayCare_Movement_RetrieveDaycareMon: @ 8291F47
delay_16
delay_16
face_left
@@ -261,50 +261,52 @@ Route117_PokemonDayCare_Movement_291F47: @ 8291F47
walk_slow_down
step_end
+@ Unused. Possibly a commented script, or a typo end added to the above Movement script
Route117_PokemonDayCare_EventScript_291F5B:: @ 8291F5B
end
-Route117_PokemonDayCare_EventScript_291F5C:: @ 8291F5C
- msgbox Route117_PokemonDayCare_Text_292488, MSGBOX_DEFAULT
+Route117_PokemonDayCare_EventScript_TwoMonsInDaycare:: @ 8291F5C
+ msgbox Route117_PokemonDayCare_Text_GoodToSeeYou, MSGBOX_DEFAULT
setvar VAR_0x8004, 0
- call Route117_PokemonDayCare_EventScript_291E1E
+ call Route117_PokemonDayCare_EventScript_DisplayLevelsGained
setvar VAR_0x8004, 1
- call Route117_PokemonDayCare_EventScript_291E1E
- msgbox Route117_PokemonDayCare_Text_2925F6, MSGBOX_YESNO
+ call Route117_PokemonDayCare_EventScript_DisplayLevelsGained
+ msgbox Route117_PokemonDayCare_Text_TakeYourMonBack, MSGBOX_YESNO
compare VAR_RESULT, 1
- goto_if_eq Route117_PokemonDayCare_EventScript_291E6D
- msgbox Route117_PokemonDayCare_Text_292476, MSGBOX_DEFAULT
+ goto_if_eq Route117_PokemonDayCare_EventScript_TryRetrieveMon
+ msgbox Route117_PokemonDayCare_Text_ComeAgain, MSGBOX_DEFAULT
release
end
+@ Unused
Route117_PokemonDayCare_EventScript_291F95:: @ 8291F95
special ShowDaycareLevelMenu
waitstate
compare VAR_RESULT, 2
- goto_if_eq Route117_PokemonDayCare_EventScript_291DCA
+ goto_if_eq Route117_PokemonDayCare_EventScript_ComeAgain
copyvar VAR_0x8004, VAR_RESULT
specialvar VAR_RESULT, TakePokemonFromDaycare
- msgbox Route117_PokemonDayCare_Text_292575, MSGBOX_DEFAULT
- msgbox Route117_PokemonDayCare_Text_292476, MSGBOX_DEFAULT
+ msgbox Route117_PokemonDayCare_Text_HeresYourMon, MSGBOX_DEFAULT
+ msgbox Route117_PokemonDayCare_Text_ComeAgain, MSGBOX_DEFAULT
release
end
EventScript_EggHatch:: @ 8291FC0
lockall
- msgbox Text_292668, MSGBOX_DEFAULT
+ msgbox Text_EggHatchHuh, MSGBOX_DEFAULT
special EggHatch
waitstate
releaseall
end
-Route117_Text_291FCF: @ 8291FCF
+Route117_Text_SeeWifeIfYoudLikeMeToRaiseMon: @ 8291FCF
.string "I'm the DAY-CARE MAN.\p"
.string "I help take care of the precious\n"
.string "POKéMON of TRAINERS.\p"
.string "If you'd like me to raise your POKéMON,\n"
.string "have a word with my wife.$"
-Route117_Text_29205D: @ 829205D
+Route117_Text_DoYouWantEgg: @ 829205D
.string "Ah, it's you!\p"
.string "We were raising your POKéMON,\n"
.string "and my goodness, were we surprised!\p"
@@ -313,124 +315,125 @@ Route117_Text_29205D: @ 829205D
.string "but your POKéMON had it.\p"
.string "You do want it, yes?$"
-Route117_Text_292114: @ 8292114
+Route117_Text_YourMonIsDoingFine: @ 8292114
.string "Ah, it's you! Good to see you.\n"
.string "Your {STR_VAR_1}'s doing fine.$"
-Route117_Text_292149: @ 8292149
+Route117_Text_IllKeepIt: @ 8292149
.string "Well then, I'll keep it.\n"
.string "Thanks!$"
-Route117_Text_29216A: @ 829216A
+Route117_Text_YouHaveNoRoomForIt: @ 829216A
.string "You have no room for it…\n"
.string "Come back when you've made room.$"
-Route117_Text_2921A4: @ 82921A4
+Route117_Text_ReceivedEgg: @ 82921A4
.string "{PLAYER} received the EGG from\n"
.string "the DAY-CARE MAN.$"
-Route117_Text_2921CF: @ 82921CF
+Route117_Text_TakeGoodCareOfIt: @ 82921CF
.string "Take good care of it.$"
-Route117_Text_2921E5: @ 82921E5
+Route117_Text_FriendlyWithOtherTrainersMon: @ 82921E5
.string "By the way, about your {STR_VAR_1},\n"
.string "it seemed to be friendly with\l"
.string "{STR_VAR_2}'s {STR_VAR_3}.\p"
.string "I may even have seen it receiving\n"
.string "a piece of MAIL.$"
-Route117_Text_29225A: @ 829225A
+@ Unused
+Route117_Text_SeeWifeIfYouWantToPickUpMon: @ 829225A
.string "If you want to pick up your POKéMON,\n"
.string "have a word with my wife.$"
-Route117_Text_292299: @ 8292299
+Route117_Text_YourMonsAreDoingFine: @ 8292299
.string "Ah, it's you! Your {STR_VAR_1} and\n"
.string "{STR_VAR_2} are doing fine.$"
-Route117_Text_2922C6: @ 82922C6
+Route117_Text_IWillKeepDoYouWantIt: @ 82922C6
.string "I really will keep it.\n"
.string "You do want this, yes?$"
-Route117_PokemonDayCare_Text_2922F4: @ 82922F4
+Route117_PokemonDayCare_Text_WouldYouLikeUsToRaiseAMon: @ 82922F4
.string "I'm the DAY-CARE LADY.\p"
.string "We can raise POKéMON for you.\p"
.string "Would you like us to raise one?$"
-Route117_PokemonDayCare_Text_292349: @ 8292349
+Route117_PokemonDayCare_Text_WhichMonShouldWeRaise: @ 8292349
.string "Which POKéMON should we raise for\n"
.string "you?$"
-Route117_PokemonDayCare_Text_292370: @ 8292370
+Route117_PokemonDayCare_Text_WellRaiseYourMon: @ 8292370
.string "Fine, we'll raise your {STR_VAR_1}\n"
.string "for a while.\p"
.string "Come back for it later.$"
-Route117_PokemonDayCare_Text_2923AF: @ 82923AF
+Route117_PokemonDayCare_Text_WeCanRaiseOneMore: @ 82923AF
.string "We can raise two of your POKéMON.\n"
.string "Would you like us to raise one more?$"
-Route117_PokemonDayCare_Text_2923F6: @ 82923F6
+Route117_PokemonDayCare_Text_HusbandWasLookingForYou: @ 82923F6
.string "My husband was looking for you.$"
Route117_PokemonDayCare_Text_292416: @ 8292416
.string "Oh, fine, then.\n"
.string "Come again.$"
-Route117_PokemonDayCare_Text_292432: @ 8292432
+Route117_PokemonDayCare_Text_NotEnoughMoney: @ 8292432
.string "You don't have enough money…$"
-Route117_PokemonDayCare_Text_29244F: @ 829244F
+Route117_PokemonDayCare_Text_TakeOtherOneBackToo: @ 829244F
.string "Will you take back the other one,\n"
.string "too?$"
-Route117_PokemonDayCare_Text_292476: @ 8292476
+Route117_PokemonDayCare_Text_ComeAgain: @ 8292476
.string "Fine.\n"
.string "Come again.$"
-Route117_PokemonDayCare_Text_292488: @ 8292488
+Route117_PokemonDayCare_Text_GoodToSeeYou: @ 8292488
.string "Ah, it's you! Good to see you.\n"
.string "Your POKéMON can only be doing good!$"
-Route117_PokemonDayCare_Text_2924CC: @ 82924CC
+Route117_PokemonDayCare_Text_YourMonHasGrownXLevels: @ 82924CC
.string "By level, your {STR_VAR_1} has\n"
.string "grown by {STR_VAR_2}.$"
-Route117_PokemonDayCare_Text_2924EF: @ 82924EF
+Route117_PokemonDayCare_Text_YourTeamIsFull: @ 82924EF
.string "Your POKéMON team is full.\n"
.string "Make room, then come see me.$"
Route117_PokemonDayCare_Text_292527: @ 8292527
.string "Which POKéMON will you take back?$"
-Route117_PokemonDayCare_Text_292549: @ 8292549
+Route117_PokemonDayCare_Text_ItWillCostX: @ 8292549
.string "If you want your {STR_VAR_1} back,\n"
.string "it will cost ¥{STR_VAR_2}.$"
-Route117_PokemonDayCare_Text_292575: @ 8292575
+Route117_PokemonDayCare_Text_HeresYourMon: @ 8292575
.string "Perfect!\n"
.string "Here's your POKéMON.$"
-Route117_PokemonDayCare_Text_292593: @ 8292593
+Route117_PokemonDayCare_Text_TookBackMon: @ 8292593
.string "{PLAYER} took back {STR_VAR_1} from\n"
.string "the DAY-CARE LADY.$"
-Route117_PokemonDayCare_Text_2925BB: @ 82925BB
+Route117_PokemonDayCare_Text_YouHaveJustOneMon: @ 82925BB
.string "Oh? But you have just one\n"
.string "POKéMON.\p"
.string "Come back another time.$"
-Route117_PokemonDayCare_Text_2925F6: @ 82925F6
+Route117_PokemonDayCare_Text_TakeYourMonBack: @ 82925F6
.string "Will you take your POKéMON back?$"
-Route117_PokemonDayCare_Text_292617: @ 8292617
+Route117_PokemonDayCare_Text_WhatWillYouBattleWith: @ 8292617
.string "If you leave me that POKéMON,\n"
.string "what will you battle with?\p"
.string "Come back another time.$"
-Text_292668: @ 8292668
+Text_EggHatchHuh: @ 8292668
.string "Huh?$"
-Route117_PokemonDayCare_Text_29266D: @ 829266D
+Route117_PokemonDayCare_Text_YoullBeLeftWithJustOne: @ 829266D
.string "Huh?\n"
.string "Now, now.\p"
.string "If you leave that POKéMON with\n"
diff --git a/data/scripts/mystery_event_club.inc b/data/scripts/mystery_event_club.inc
index cc189a96b..c8cb84107 100644
--- a/data/scripts/mystery_event_club.inc
+++ b/data/scripts/mystery_event_club.inc
@@ -8,12 +8,12 @@ PetalburgCity_PokemonCenter_1F_EventScript_291539:: @ 8291539
PetalburgCity_PokemonCenter_1F_EventScript_291552:: @ 8291552
msgbox PetalburgCity_PokemonCenter_1F_Text_2916FF, MSGBOX_DEFAULT
- multichoice 17, 6, 20, 0
+ multichoice 17, 6, MULTI_YESNOINFO_2, 0
switch VAR_RESULT
case 0, PetalburgCity_PokemonCenter_1F_EventScript_29159F
case 1, PetalburgCity_PokemonCenter_1F_EventScript_2915EB
case 2, PetalburgCity_PokemonCenter_1F_EventScript_291591
- case 127, PetalburgCity_PokemonCenter_1F_EventScript_2915EB
+ case MULTI_B_PRESSED, PetalburgCity_PokemonCenter_1F_EventScript_2915EB
end
PetalburgCity_PokemonCenter_1F_EventScript_291591:: @ 8291591
@@ -60,12 +60,12 @@ PetalburgCity_PokemonCenter_1F_EventScript_2915F5:: @ 82915F5
PetalburgCity_PokemonCenter_1F_EventScript_291603:: @ 8291603
msgbox PetalburgCity_PokemonCenter_1F_Text_291A4F, MSGBOX_DEFAULT
- multichoice 17, 6, 20, 0
+ multichoice 17, 6, MULTI_YESNOINFO_2, 0
switch VAR_RESULT
case 0, PetalburgCity_PokemonCenter_1F_EventScript_291650
case 1, PetalburgCity_PokemonCenter_1F_EventScript_29167C
case 2, PetalburgCity_PokemonCenter_1F_EventScript_291642
- case 127, PetalburgCity_PokemonCenter_1F_EventScript_29167C
+ case MULTI_B_PRESSED, PetalburgCity_PokemonCenter_1F_EventScript_29167C
end
PetalburgCity_PokemonCenter_1F_EventScript_291642:: @ 8291642
diff --git a/data/scripts/players_house.inc b/data/scripts/players_house.inc
index c4a5ffe86..855c5eac2 100644
--- a/data/scripts/players_house.inc
+++ b/data/scripts/players_house.inc
@@ -507,7 +507,7 @@ LittlerootTown_MaysHouse_1F_EventScript_292AF2:: @ 8292AF2
compare VAR_0x8008, 1
call_if_eq LittlerootTown_BrendansHouse_1F_EventScript_292D9D
msgbox LittlerootTown_BrendansHouse_1F_Text_1F8351, MSGBOX_DEFAULT
- multichoice 22, 8, 108, 1
+ multichoice 22, 8, MULTI_TV_LATI, 1
copyvar VAR_0x8004, VAR_RESULT
special InitRoamer
copyvar VAR_ROAMER_POKEMON, VAR_RESULT
diff --git a/data/scripts/pokeblocks.inc b/data/scripts/pokeblocks.inc
index a26ecb4c9..7b3932341 100644
--- a/data/scripts/pokeblocks.inc
+++ b/data/scripts/pokeblocks.inc
@@ -714,12 +714,12 @@ LilycoveCity_ContestLobby_EventScript_2941ED: @ 82941ED
EventScript_PblocLink_DecideLeader: @ 82941F8
message Text_DecideLinkLeader
waitmessage
- multichoice 16, 6, 81, 0
+ multichoice 16, 6, MULTI_LINK_LEADER, 0
switch VAR_RESULT
case 0, EventScript_PblocLink_TryJoinGroup
case 1, EventScript_PblocLink_TryBecomeLeader
case 2, EventScript_PblocLink_CloseLink
- case 127, EventScript_PblocLink_CloseLink
+ case MULTI_B_PRESSED, EventScript_PblocLink_CloseLink
end
EventScript_PblocLink_TryBecomeLeader: @ 8294235
diff --git a/data/scripts/trainer_battle.inc b/data/scripts/trainer_battle.inc
index c205a9d22..21ba0d6d3 100644
--- a/data/scripts/trainer_battle.inc
+++ b/data/scripts/trainer_battle.inc
@@ -26,7 +26,7 @@ EventScript_TryDoDoubleTrainerBattle:: @ 827138A
compare VAR_RESULT, 0
goto_if_ne EventScript_NoDoubleTrainerBattle
special HasEnoughMonsForDoubleBattle
- compare VAR_RESULT, 0
+ compare VAR_RESULT, PLAYER_HAS_TWO_USABLE_MONS
goto_if_ne EventScript_NotEnoughMonsForDoubleBattle
special SetUpTrainerEncounterMusic
special SetUpTrainerMovement
@@ -69,7 +69,7 @@ EventScript_TryDoDoubleRematchBattle:: @ 82713F8
compare VAR_RESULT, 0
goto_if_eq EventScript_NoDoubleRematchTrainerBattle
special HasEnoughMonsForDoubleBattle
- compare VAR_RESULT, 0
+ compare VAR_RESULT, PLAYER_HAS_TWO_USABLE_MONS
goto_if_ne EventScript_NotEnoughMonsForDoubleRematchBattle
special SetUpTrainerEncounterMusic
special SetUpTrainerMovement
diff --git a/data/specials.inc b/data/specials.inc
index 78a949df5..096a3b33d 100644
--- a/data/specials.inc
+++ b/data/specials.inc
@@ -197,7 +197,7 @@ gSpecials:: @ 81DBA64
def_special RejectEggFromDayCare
def_special GiveEggFromDaycare
def_special SetDaycareCompatibilityString
- def_special GetSelectedMonNickAndSpecies
+ def_special GetSelectedMonNicknameAndSpecies
def_special StoreSelectedPokemonInDaycare
def_special ChooseSendDaycareMon
def_special ShowDaycareLevelMenu
@@ -206,7 +206,7 @@ gSpecials:: @ 81DBA64
def_special TakePokemonFromDaycare
def_special ScriptHatchMon
def_special EggHatch
- def_special sub_8071614
+ def_special CheckDaycareMonReceivedMail
def_special ShowLinkBattleRecords
def_special IsEnoughForCostInVar0x8005
def_special SubtractMoneyFromVar0x8005
@@ -227,7 +227,7 @@ gSpecials:: @ 81DBA64
def_special ShowPokedexRatingMessage
def_special DoPCTurnOnEffect
def_special DoPCTurnOffEffect
- def_special SetDepartmentStoreFloorVar
+ def_special SetDeptStoreFloor
def_special DoLotteryCornerComputerEffect
def_special EndLotteryCornerComputerEffect
def_special sub_81B951C
@@ -273,7 +273,7 @@ gSpecials:: @ 81DBA64
def_special ShowBerryBlenderRecordWindow
def_special ResetTrickHouseEndRoomFlag
def_special SetTrickHouseEndRoomFlag
- def_special ScrSpecial_CreatePCMenu
+ def_special ScriptMenu_CreatePCMultichoice
def_special AccessHallOfFamePC
def_special Special_ShowDiploma
def_special CheckLeadMonCool
@@ -284,8 +284,8 @@ gSpecials:: @ 81DBA64
def_special sub_80FB7A4
def_special DoSoftReset
def_special GameClear
- def_special ShakeScreenInElevator
- def_special nullsub_55
+ def_special MoveElevator
+ def_special ShowGlassWorkshopMenu
def_special SpawnCameraObject
def_special RemoveCameraObject
def_special GetPokeblockNameByMonNature
@@ -316,7 +316,7 @@ gSpecials:: @ 81DBA64
def_special CopyCurSecretBaseOwnerName_StrVar1
def_special ScriptCheckFreePokemonStorageSpace
def_special DoSealedChamberShakingEffect1
- def_special sub_8139B60
+ def_special ShowDeptStoreElevatorFloorSelect
def_special GetShieldToyTVDecorationInfo
def_special IsPokerusInParty
def_special SetSootopolisGymCrackedIceMetatiles
@@ -339,7 +339,7 @@ gSpecials:: @ 81DBA64
def_special ScriptGetMultiplayerId
def_special ScriptGetPartyMonSpecies
def_special sub_81B98DC
- def_special nullsub_54
+ def_special TryInitBattleTowerAwardManEventObject
def_special MoveOutOfSecretBaseFromOutside
def_special LoadPlayerBag
def_special sub_80B05B4
@@ -356,7 +356,7 @@ gSpecials:: @ 81DBA64
def_special sub_80EE2CC
def_special sub_80EE72C
def_special sub_80EE7C0
- def_special nullsub_55
+ def_special ShowGlassWorkshopMenu
def_special PutFanClubSpecialOnTheAir
def_special sub_80EED10
def_special sub_80EED34
@@ -372,47 +372,47 @@ gSpecials:: @ 81DBA64
def_special SetSecretBaseSecretsTvFlags_LargeDecorationSpot
def_special SetSecretBaseSecretsTvFlags_SmallDecorationSpot
def_special SetSecretBaseSecretsTvFlags_Poster
- def_special sub_818D9C0
- def_special sub_818DAEC
- def_special sub_818DBE8
- def_special sub_818DC2C
- def_special sub_818DC60
- def_special sub_818DCC8
- def_special sub_818DD14
- def_special sub_818DD54
- def_special sub_818DD78
- def_special sub_818DE44
- def_special sub_818DE5C
- def_special sub_818DEA0
- def_special sub_818DEDC
- def_special sub_818E038
- def_special sub_818E06C
- def_special sub_818E2D8
- def_special sub_811A858
- def_special sub_818E2FC
- def_special sub_818E308
- def_special sub_818E358
- def_special sub_818E37C
- def_special sub_818E298
- def_special sub_818E39C
- def_special sub_818E3BC
- def_special sub_818E3E0
- def_special sub_818E430
- def_special sub_818E47C
- def_special sub_818E490
+ def_special SetLilycoveLadyGfx
+ def_special Script_GetLilycoveLadyId
+ def_special GetFavorLadyState
+ def_special BufferFavorLadyRequest
+ def_special HasAnotherPlayerGivenFavorLadyItem
+ def_special BufferFavorLadyItemName
+ def_special BufferFavorLadyPlayerName
+ def_special DidFavorLadyLikeItem
+ def_special Script_FavorLadyOpenBagMenu
+ def_special Script_DoesFavorLadyLikeItem
+ def_special IsFavorLadyThresholdMet
+ def_special FavorLadyGetPrize
+ def_special SetFavorLadyState_Complete
+ def_special GetQuizLadyState
+ def_special GetQuizAuthor
+ def_special IsQuizLadyWaitingForChallenger
+ def_special QuizLadyShowQuizQuestion
+ def_special QuizLadyGetPlayerAnswer
+ def_special IsQuizAnswerCorrect
+ def_special BufferQuizPrizeItem
+ def_special SetQuizLadyState_Complete
+ def_special BufferQuizAuthorNameAndCheckIfLady
+ def_special SetQuizLadyState_GivePrize
+ def_special ClearQuizLadyPlayerAnswer
+ def_special Script_QuizLadyOpenBagMenu
+ def_special ClearQuizLadyQuestionAndAnswer
+ def_special QuizLadySetCustomQuestion
+ def_special QuizLadyTakePrizeForCustomQuiz
def_special sub_813986C
- def_special sub_818E4A4
- def_special sub_818E510
- def_special sub_818E538
- def_special sub_818E274
- def_special sub_818E3EC
- def_special sub_818E8E0
- def_special sub_818E8B4
- def_special sub_818E914
- def_special sub_818E92C
- def_special sub_818E940
- def_special sub_818E960
- def_special sub_818E990
+ def_special QuizLadyRecordCustomQuizData
+ def_special QuizLadySetWaitingForChallenger
+ def_special BufferQuizCorrectAnswer
+ def_special BufferQuizPrizeName
+ def_special QuizLadyPickNewQuestion
+ def_special ShouldContestLadyShowGoOnAir
+ def_special HasPlayerGivenContestLadyPokeblock
+ def_special Script_BufferContestLadyCategoryAndMonName
+ def_special OpenPokeblockCaseForContestLady
+ def_special SetContestLadyGivenPokeblock
+ def_special GetContestLadyMonSpecies
+ def_special GetContestLadyCategory
def_special PutLilycoveContestLadyShowOnTheAir
def_special sub_813B880
def_special CallApprenticeFunction
@@ -422,7 +422,7 @@ gSpecials:: @ 81DBA64
def_special DoMirageTowerCeilingCrumble
def_special SetMirageTowerVisibility
def_special StartPlayerDescendMirageTower
- def_special sub_81398C0
+ def_special BufferTMHMMoveName
def_special IsWirelessAdapterConnected
def_special BerryBlenderLinkBecomeLeader
def_special BerryBlenderLinkJoinGroup
@@ -433,7 +433,7 @@ gSpecials:: @ 81DBA64
def_special sub_801DC20
def_special sub_81B8958
def_special sub_8018090
- def_special sub_813990C
+ def_special IsBadEggInParty
def_special ValidateReceivedWonderCard
def_special HasAtLeastOneBerry
def_special sub_802C920
@@ -441,8 +441,8 @@ gSpecials:: @ 81DBA64
def_special sub_8027A5C
def_special sub_8027AAC
def_special sub_8139980
- def_special sub_81399F4
- def_special sub_8139D98
+ def_special GetDeptStoreDefaultFloorChoice
+ def_special BufferVarsForIVRater
def_special sub_80F905C
def_special sub_800B518
def_special sub_80F90DC
@@ -450,43 +450,43 @@ gSpecials:: @ 81DBA64
def_special sub_80F9160
def_special ShowRankingHallRecordsWindow
def_special ScrollRankingHallRecordsWindow
- def_special sub_8139F20
+ def_special ShowFrontierManiacMessage
def_special sub_80F9134
def_special sub_80F9154
def_special sub_80B3028
- def_special sub_813A128
+ def_special ShowScrollableMultichoice
def_special sub_813A630
- def_special sub_813A080
+ def_special BufferBattleTowerElevatorFloors
def_special sub_81C6A94
def_special sub_81C4F24
def_special sub_81B95E0
def_special sub_81B9620
- def_special sub_813A76C
- def_special sub_813A7B8
- def_special sub_813A958
- def_special sub_813A8FC
- def_special sub_813A988
- def_special sub_813A9D0
- def_special sub_813A9A4
- def_special sub_813AA04
- def_special sub_813AA18
- def_special sub_813AA44
+ def_special SetBattleTowerLinkPlayerGfx
+ def_special ShowNatureGirlMessage
+ def_special ShowBattlePointsWindow
+ def_special UpdateBattlePointsWindow
+ def_special CloseBattlePointsWindow
+ def_special GiveFrontierBattlePoints
+ def_special TakeFrontierBattlePoints
+ def_special GetFrontierBattlePoints
+ def_special ShowFrontierExchangeCornerItemIconWindow
+ def_special CloseFrontierExchangeCornerItemIconWindow
def_special DisplayBerryPowderVendorMenu
def_special RemoveBerryPowderVendorMenu
def_special HasEnoughBerryPowder
def_special TakeBerryPowder
def_special PrintPlayerBerryPowderAmount
- def_special sub_813A820
- def_special sub_813A854
- def_special sub_813B7D8
+ def_special ShowFrontierGamblerLookingMessage
+ def_special ShowFrontierGamblerGoMessage
+ def_special Script_DoRayquazaScene
def_special sub_81C72A4
- def_special sp106_CreateStartMenu
+ def_special ScriptMenu_CreateStartMenuForPokenavTutorial
def_special CountPlayerTrainerStars
- def_special sub_813AC7C
- def_special sub_813ADB8
+ def_special BufferBattleFrontierTutorMoveName
+ def_special CloseBattleFrontierTutorWindow
def_special sub_813ADD4
def_special sub_81B892C
- def_special sub_813AEB4
+ def_special GetBattleFrontierTutorMoveIndex
def_special sub_813AF48
def_special DoDeoxysRockInteraction
def_special sub_813B1D0
@@ -495,28 +495,28 @@ gSpecials:: @ 81DBA64
def_special StartMirageTowerShake
def_special StartMirageTowerFossilFallAndSink
def_special ChangeBoxPokemonNickname
- def_special get_unknown_box_id
- def_special sub_813B21C
+ def_special GetPCBoxToSendMon
+ def_special ShouldShowBoxWasFullMessage
def_special SetMatchCallRegisteredFlag
def_special sub_8175280
def_special CreateUnusualWeatherEvent
def_special GetUnusualWeatherMapNameAndType
- def_special sub_813B490
+ def_special GetMartEmployeeObjectEventId
def_special sub_80A08CC
def_special Unused_SetWeatherSunny
def_special sub_81AFDA0
def_special sub_813B4E0
def_special ShouldDoBrailleRegicePuzzle
def_special EnableNationalPokedex
- def_special sub_80E2548
- def_special sub_80E2878
+ def_special ScriptMenu_CreateLilycoveSSTidalMultichoice
+ def_special GetLilycoveSSTidalSelection
def_special TurnOnTVScreen
def_special sub_81D4A90
def_special sub_813B514
def_special sub_813B568
def_special sub_813B534
def_special CallTrainerHillFunction
- def_special sub_813B7D8
+ def_special Script_DoRayquazaScene @ Listed twice
def_special sub_813B80C
def_special sub_81D4BEC
def_special sub_80224D0
@@ -524,14 +524,14 @@ gSpecials:: @ 81DBA64
def_special DoWaldaNamingScreen
def_special TryGetWallpaperWithWaldaPhrase
def_special sub_8139ED0
- def_special sub_813B968
+ def_special GetBattlePyramidHint
def_special sub_80F8B94
def_special ShowTrainerHillRecords
def_special sub_80B4808
- def_special sub_813B9A0
+ def_special ResetHealLocationFromDewford
def_special sub_81B9918
- def_special sub_80722E0
+ def_special CountPartyAliveNonEggMons
def_special TryPrepareSecondApproachingTrainer
def_special RemoveRecordsWindow
- def_special sub_8139C10
+ def_special CloseDeptStoreElevatorWindow
def_special sub_80B3BC4
diff --git a/data/text/eon_ticket.inc b/data/text/event_ticket_1.inc
index d436f2df1..da4d525f6 100644
--- a/data/text/eon_ticket.inc
+++ b/data/text/event_ticket_1.inc
@@ -1,16 +1,16 @@
-LilycoveCity_Harbor_Text_2A6848: @ 82A6848
+EventTicket_Text_ShowOldSeaMap: @ 82A6848
.string "The ferry to SLATEPORT is…\p"
.string "I beg your pardon?\n"
.string "Can we sail to this place on the map?\p"
.string "I know someone who will help you better.\n"
.string "Please wait.$"
-LilycoveCity_Harbor_Text_2A68D2: @ 82A68D2
+EventTicket_Text_ThatPass: @ 82A68D2
.string "The ferry to SLATEPORT is…\p"
.string "Oh?\n"
.string "That PASS…$"
-LilycoveCity_Harbor_Text_2A68FC: @ 82A68FC
+EventTicket_Text_ShowEonTicket: @ 82A68FC
.string "Aye, mate, are you the one who brought\n"
.string "that mighty odd PASS?\p"
.string "I'll tell you, you're trying to reach a\n"
@@ -20,29 +20,22 @@ LilycoveCity_Harbor_Text_2A68FC: @ 82A68FC
.string "That shivers my timbers!\p"
.string "All aboard!$"
-SouthernIsland_Exterior_Text_2A69F1: @ 82A69F1
+EventTicket_Text_SouthernIslandSailBack: @ 82A69F1
.string "Aye, mate, there's nothing here to\n"
.string "see or do on this forgettable island.\p"
.string "What say we sail back to LILYCOVE?$"
-BirthIsland_Harbor_Text_2A6A5D: @ 82A6A5D
-FarawayIsland_Entrance_Text_2A6A5D: @ 82A6A5D
-NavelRock_Harbor_Text_2A6A5D: @ 82A6A5D
-SouthernIsland_Exterior_Text_2A6A5D: @ 82A6A5D
+EventTicket_Text_SailHome: @ 82A6A5D
.string "Aye, right, then!\n"
.string "Sail home we will!$"
-BirthIsland_Harbor_Text_2A6A82: @ 82A6A82
-FarawayIsland_Entrance_Text_2A6A82: @ 82A6A82
-LilycoveCity_Harbor_Text_2A6A82: @ 82A6A82
-NavelRock_Harbor_Text_2A6A82: @ 82A6A82
-SouthernIsland_Exterior_Text_2A6A82: @ 82A6A82
+EventTicket_Text_AsYouLike: @ 82A6A82
.string "Aye, right, as you like, then.$"
-SouthernIsland_Interior_Text_2A6AA1: @ 82A6AA1
+SouthernIsland_Interior_Text_Sign: @ 82A6AA1
.string "“All dreams are but another reality.\n"
.string "Never forget…”$"
-SouthernIsland_Exterior_Text_2A6AD5: @ 82A6AD5
+SouthernIsland_Exterior_Text_Sign: @ 82A6AD5
.string "“Those whose memories fade seek to\n"
.string "carve them in their hearts…”$"
diff --git a/data/text/event_ticket_2.inc b/data/text/event_ticket_2.inc
new file mode 100644
index 000000000..e081edbd9
--- /dev/null
+++ b/data/text/event_ticket_2.inc
@@ -0,0 +1,71 @@
+EventTicket_Text_OldSeaMapTooFar: @ 82C68A5
+ .string "What's up, youngster?\p"
+ .string "What, it's you who's supposed to have\n"
+ .string "a tattered old map?\p"
+ .string "Let's have a look.\n"
+ .string "… … … … … …\p"
+ .string "Boy, this is quite a ways away.\n"
+ .string "I'm afraid I can't help you…$"
+
+EventTicket_Text_BrineyHoldOnASecond: @ 82C6951
+ .string "BRINEY: Hold on a second!\p"
+ .string "What's the idea of turning down\n"
+ .string "someone that I owe so much to?$"
+
+EventTicket_Text_BrineyLetsSail: @ 82C69AA
+ .string "{PLAYER}{KUN}, I'm terribly sorry.\p"
+ .string "You came to me seeking my help,\n"
+ .string "and we almost turned you away.\p"
+ .string "Well, let me make things right.\p"
+ .string "We'll sail right away, of course!\p"
+ .string "Let's find this island on\n"
+ .string "this OLD SEA MAP!$"
+
+EventTicket_Text_OddTicketGetOnBoard: @ 82C6A71
+ .string "Is it you who brought that odd\n"
+ .string "ticket?\p"
+ .string "Where you're trying to go is an island\n"
+ .string "that's far, far away.\p"
+ .string "No one knows what awaits there…\p"
+ .string "The very thought excites my blood\n"
+ .string "as a sailing man!\p"
+ .string "Get on board, youngster!$"
+
+FarawayIsland_Entrance_Text_SailorReturn: @ 82C6B42
+ .string "CAPT. BRINEY can be so maddeningly\n"
+ .string "fickle…\p"
+ .string "Do you want to return to LILYCOVE?$"
+
+BirthIsland_Harbor_Text_SailorReturn: @ 82C6B90
+ .string "What an oddly shaped island, eh?\n"
+ .string "Do you want to return to LILYCOVE?$"
+
+EventTicket_Text_OddTicketsWhereTo: @ 82C6BD4
+ .string "Is it you who brought those\n"
+ .string "odd tickets?\p"
+ .string "… … …Hm.\p"
+ .string "These tickets will get you to islands\n"
+ .string "that are far, far away.\p"
+ .string "No one knows what awaits there,\n"
+ .string "or what may happen there.\p"
+ .string "The very thought excites my blood\n"
+ .string "as a sailing man!\p"
+ .string "Get on board, youngster!\n"
+ .string "Where shall we sail first?$"
+
+NavelRock_Harbor_Text_SailorReturn: @ 82C6CE6
+ .string "Did… Did you hear that?\n"
+ .string "That low growling from deep in there.\p"
+ .string "Are you sure it's safe?\n"
+ .string "Do you think we should leave?$"
+
+FarawayIsland_Entrance_Text_Sign: @ 82C6D5A
+ .string "The writing is fading as if it was\n"
+ .string "written a long time ago…\p"
+ .string "“…ber, 6th day\n"
+ .string "If any human…sets foot here…\l"
+ .string "again…et it be a kindhearted pers…\l"
+ .string "…ith that hope, I depar…”$"
+
+FarawayIsland_Interior_Text_Mew: @ 82C6DFF
+ .string "Myuu…$"
diff --git a/data/text/match_call.inc b/data/text/match_call.inc
index b25b72ebf..376f36750 100644
--- a/data/text/match_call.inc
+++ b/data/text/match_call.inc
@@ -1,5 +1,5 @@
MatchCall_WildBattleText1:: @ 82A971C
- .string "Hi! {PLAYER}{STRING 5}, hello!\n"
+ .string "Hi! {PLAYER}{KUN}, hello!\n"
.string "This is {STR_VAR_1}.\p"
.string "I saw this {STR_VAR_2} a while back\n"
.string "but I couldn't catch it.\p"
@@ -7,7 +7,7 @@ MatchCall_WildBattleText1:: @ 82A971C
.string "Well, see you again!$"
MatchCall_WildBattleText2:: @ 82A9798
- .string "Hello, {PLAYER}{STRING 5}.\n"
+ .string "Hello, {PLAYER}{KUN}.\n"
.string "It's {STR_VAR_1}.\p"
.string "I tried to catch a nice {STR_VAR_2}\n"
.string "a little while ago.\p"
@@ -25,7 +25,7 @@ MatchCall_WildBattleText3:: @ 82A9813
.string "All right, see you!$"
MatchCall_WildBattleText4:: @ 82A98A8
- .string "Hey, {PLAYER}{STRING 5}.\n"
+ .string "Hey, {PLAYER}{KUN}.\n"
.string "{STR_VAR_1} here.\p"
.string "You know the POKéMON {STR_VAR_2}?\n"
.string "I came close to getting one.\p"
@@ -36,7 +36,7 @@ MatchCall_WildBattleText4:: @ 82A98A8
.string "Okay, catch you later.$"
MatchCall_WildBattleText5:: @ 82A9977
- .string "Hiya, {PLAYER}{STRING 5}!\n"
+ .string "Hiya, {PLAYER}{KUN}!\n"
.string "It's {STR_VAR_1}.\l"
.string "Catching any POKéMON lately?\p"
.string "A little while ago I came close to\n"
@@ -44,7 +44,7 @@ MatchCall_WildBattleText5:: @ 82A9977
.string "Right, take care!$"
MatchCall_WildBattleText6:: @ 82A99FD
- .string "Hey, {PLAYER}{STRING 5}.\n"
+ .string "Hey, {PLAYER}{KUN}.\n"
.string "{STR_VAR_1} here.\l"
.string "Caught any POKéMON lately?\p"
.string "I nearly nabbed one the other day.\n"
@@ -52,7 +52,7 @@ MatchCall_WildBattleText6:: @ 82A99FD
.string "You take care.$"
MatchCall_WildBattleText7:: @ 82A9A78
- .string "…Uh, {PLAYER}{STRING 5}?\n"
+ .string "…Uh, {PLAYER}{KUN}?\n"
.string "It's me, {STR_VAR_1}.\p"
.string "Oh, wait! Wait!\n"
.string "I can catch this {STR_VAR_2}…\p"
@@ -60,7 +60,7 @@ MatchCall_WildBattleText7:: @ 82A9A78
.string "That wasn't just close!$"
MatchCall_WildBattleText8:: @ 82A9AE8
- .string "Oh, {PLAYER}{STRING 5}, how do you do?\n"
+ .string "Oh, {PLAYER}{KUN}, how do you do?\n"
.string "This is {STR_VAR_1} speaking.\p"
.string "Have you had success catching\n"
.string "POKéMON lately?\p"
@@ -70,7 +70,7 @@ MatchCall_WildBattleText8:: @ 82A9AE8
.string "See you again!$"
MatchCall_WildBattleText9:: @ 82A9BA7
- .string "Oh, {PLAYER}{STRING 5}, hi there!\n"
+ .string "Oh, {PLAYER}{KUN}, hi there!\n"
.string "This is {STR_VAR_1}!\p"
.string "So? Are you getting more POKéMON\n"
.string "together?\p"
@@ -79,7 +79,7 @@ MatchCall_WildBattleText9:: @ 82A9BA7
.string "See you!$"
MatchCall_WildBattleText10:: @ 82A9C36
- .string "Oh, {PLAYER}{STRING 5}, hello…\n"
+ .string "Oh, {PLAYER}{KUN}, hello…\n"
.string "This is {STR_VAR_1}.\p"
.string "Listen, I came within a whisker of\n"
.string "catching this {STR_VAR_2}…\p"
@@ -88,7 +88,7 @@ MatchCall_WildBattleText10:: @ 82A9C36
.string "See you around.$"
MatchCall_WildBattleText11:: @ 82A9CC8
- .string "Ah, {PLAYER}{STRING 5}.\n"
+ .string "Ah, {PLAYER}{KUN}.\n"
.string "This is {STR_VAR_1}.\l"
.string "How are things with you?\p"
.string "I tried to catch a wild {STR_VAR_2}\n"
@@ -96,7 +96,7 @@ MatchCall_WildBattleText11:: @ 82A9CC8
.string "I feel defeated…$"
MatchCall_WildBattleText12:: @ 82A9D44
- .string "Hello, {PLAYER}{STRING 5}.\n"
+ .string "Hello, {PLAYER}{KUN}.\n"
.string "It's me, {STR_VAR_1}.\l"
.string "Are you still catching POKéMON?\p"
.string "I've been trying to catch them\n"
@@ -104,7 +104,7 @@ MatchCall_WildBattleText12:: @ 82A9D44
.string "The way of POKéMON is deep!$"
MatchCall_WildBattleText13:: @ 82A9DD7
- .string "Ah, hello, {PLAYER}{STRING 5}!\n"
+ .string "Ah, hello, {PLAYER}{KUN}!\n"
.string "This is {STR_VAR_1}!\l"
.string "Have you been catching POKéMON?\p"
.string "I've been trying to catch them\n"
@@ -112,7 +112,7 @@ MatchCall_WildBattleText13:: @ 82A9DD7
.string "The way of POKéMON is deep!$"
MatchCall_WildBattleText14:: @ 82A9E70
- .string "Oh, hi, {PLAYER}{STRING 5}, how do you do?\n"
+ .string "Oh, hi, {PLAYER}{KUN}, how do you do?\n"
.string "This is {STR_VAR_1}.\p"
.string "Just now, I tried to catch a cute\n"
.string "{STR_VAR_2}.\p"
@@ -131,7 +131,7 @@ MatchCall_WildBattleText15:: @ 82A9EFD
.string "See you around!$"
MatchCall_NegativeBattleText1:: @ 82A9FAB
- .string "Hi! {PLAYER}{STRING 5}, hello!\n"
+ .string "Hi! {PLAYER}{KUN}, hello!\n"
.string "This is {STR_VAR_1}.\p"
.string "I tried battling another TRAINER,\n"
.string "but I lost.\p"
@@ -139,7 +139,7 @@ MatchCall_NegativeBattleText1:: @ 82A9FAB
.string "Well, see you again!$"
MatchCall_NegativeBattleText2:: @ 82AA028
- .string "Hello, {PLAYER}{STRING 5}.\n"
+ .string "Hello, {PLAYER}{KUN}.\n"
.string "It's {STR_VAR_1}.\p"
.string "I challenged someone else after\n"
.string "we battled.\p"
@@ -188,7 +188,7 @@ MatchCall_NegativeBattleText7:: @ 82AA2A1
.string "See you.$"
MatchCall_NegativeBattleText8:: @ 82AA31B
- .string "Oh, {PLAYER}{STRING 5}, how do you do?\n"
+ .string "Oh, {PLAYER}{KUN}, how do you do?\n"
.string "This is {STR_VAR_1} speaking.\p"
.string "How are your POKéMON doing?\n"
.string "I lost a match the other day.\p"
@@ -196,7 +196,7 @@ MatchCall_NegativeBattleText8:: @ 82AA31B
.string "See you again!$"
MatchCall_NegativeBattleText9:: @ 82AA3A8
- .string "Oh, {PLAYER}{STRING 5}, hi there!\n"
+ .string "Oh, {PLAYER}{KUN}, hi there!\n"
.string "This is {STR_VAR_1}!\p"
.string "Listen, listen, you have to hear\n"
.string "this!\p"
@@ -205,7 +205,7 @@ MatchCall_NegativeBattleText9:: @ 82AA3A8
.string "Oh, it burns me up!$"
MatchCall_NegativeBattleText10:: @ 82AA442
- .string "Oh, {PLAYER}{STRING 5}, hello…\n"
+ .string "Oh, {PLAYER}{KUN}, hello…\n"
.string "This is {STR_VAR_1}.\p"
.string "A little earlier, I was in a battle.\n"
.string "I lost, though.\p"
@@ -213,14 +213,14 @@ MatchCall_NegativeBattleText10:: @ 82AA442
.string "See you around.$"
MatchCall_NegativeBattleText11:: @ 82AA4C5
- .string "Ah, {PLAYER}{STRING 5}.\n"
+ .string "Ah, {PLAYER}{KUN}.\n"
.string "This is {STR_VAR_1}.\l"
.string "How are your POKéMON?\p"
.string "I just lost yet another battle.\p"
.string "Well, see you!$"
MatchCall_NegativeBattleText12:: @ 82AA520
- .string "Hello, {PLAYER}{STRING 5}.\n"
+ .string "Hello, {PLAYER}{KUN}.\n"
.string "It's me, {STR_VAR_1}.\l"
.string "Are you still battling hard?\p"
.string "As for me, I lost recently, so I've\n"
@@ -228,16 +228,16 @@ MatchCall_NegativeBattleText12:: @ 82AA520
.string "Let's meet again.$"
MatchCall_NegativeBattleText13:: @ 82AA5AD
- .string "Ah, hello, {PLAYER}{STRING 5}!\n"
+ .string "Ah, hello, {PLAYER}{KUN}!\n"
.string "This is {STR_VAR_1}!\p"
.string "I hope you've been keeping well.\p"
.string "I was in a battle just a little\n"
.string "while before this.\p"
- .string "{PLAYER}{STRING 5}, try to be active like me.\n"
+ .string "{PLAYER}{KUN}, try to be active like me.\n"
.string "See you again!$"
MatchCall_NegativeBattleText14:: @ 82AA64D
- .string "Oh, hi, {PLAYER}{STRING 5}.\n"
+ .string "Oh, hi, {PLAYER}{KUN}.\n"
.string "This is {STR_VAR_1}.\p"
.string "Are you doing good?\p"
.string "You should go home every so often,\n"
@@ -245,7 +245,7 @@ MatchCall_NegativeBattleText14:: @ 82AA64D
.string "Bye-bye!$"
MatchCall_PositiveBattleText1:: @ 82AA6AF
- .string "Hi! {PLAYER}{STRING 5}, hello!\n"
+ .string "Hi! {PLAYER}{KUN}, hello!\n"
.string "This is {STR_VAR_1}!\p"
.string "I battled another TRAINER earlier.\n"
.string "I won! I won!\p"
@@ -253,7 +253,7 @@ MatchCall_PositiveBattleText1:: @ 82AA6AF
.string "for me. This is so great!$"
MatchCall_PositiveBattleText2:: @ 82AA730
- .string "Hello, {PLAYER}{STRING 5}!\n"
+ .string "Hello, {PLAYER}{KUN}!\n"
.string "It's {STR_VAR_1}!\p"
.string "I had a battle yesterday and\n"
.string "I won! It's fantastic!$"
@@ -276,7 +276,7 @@ MatchCall_PositiveBattleText4:: @ 82AA81C
.string "inspired showing.$"
MatchCall_PositiveBattleText5:: @ 82AA88C
- .string "Hiya, {PLAYER}{STRING 5}!\n"
+ .string "Hiya, {PLAYER}{KUN}!\n"
.string "It's {STR_VAR_1}.\p"
.string "How are things with you?\n"
.string "Battling much?\p"
@@ -286,7 +286,7 @@ MatchCall_PositiveBattleText5:: @ 82AA88C
.string "next time! Right, take care!$"
MatchCall_PositiveBattleText6:: @ 82AA934
- .string "Hey, {PLAYER}{STRING 5}.\n"
+ .string "Hey, {PLAYER}{KUN}.\n"
.string "{STR_VAR_1} here.\p"
.string "How's it going for you?\p"
.string "I've been riding a hot streak.\n"
@@ -295,7 +295,7 @@ MatchCall_PositiveBattleText6:: @ 82AA934
.string "I'm sure not going to lose!$"
MatchCall_PositiveBattleText7:: @ 82AA9D3
- .string "{PLAYER}{STRING 5}?\n"
+ .string "{PLAYER}{KUN}?\n"
.string "{STR_VAR_1} here.\p"
.string "My {STR_VAR_2} is a force!\n"
.string "It won me another battle just now!\p"
@@ -303,7 +303,7 @@ MatchCall_PositiveBattleText7:: @ 82AA9D3
.string "with you.$"
MatchCall_PositiveBattleText8:: @ 82AAA40
- .string "Oh, {PLAYER}{STRING 5}, how do you do?\n"
+ .string "Oh, {PLAYER}{KUN}, how do you do?\n"
.string "This is {STR_VAR_1} speaking.\p"
.string "I hope you've been well.\n"
.string "I wanted to tell you I just won.\p"
@@ -312,7 +312,7 @@ MatchCall_PositiveBattleText8:: @ 82AAA40
.string "See you again!$"
MatchCall_PositiveBattleText9:: @ 82AAAE4
- .string "Oh, {PLAYER}{STRING 5}, hi there!\n"
+ .string "Oh, {PLAYER}{KUN}, hi there!\n"
.string "This is {STR_VAR_1}!\p"
.string "How are your POKéMON holding up?\n"
.string "Mine just won a battle!\p"
@@ -322,7 +322,7 @@ MatchCall_PositiveBattleText9:: @ 82AAAE4
.string "See you again!$"
MatchCall_PositiveBattleText10:: @ 82AAB8C
- .string "Oh, {PLAYER}{STRING 5}, hello…\n"
+ .string "Oh, {PLAYER}{KUN}, hello…\n"
.string "This is {STR_VAR_1}.\p"
.string "How has life been treating you?\p"
.string "My POKéMON appear to be charged\n"
@@ -331,7 +331,7 @@ MatchCall_PositiveBattleText10:: @ 82AAB8C
.string "See you around.$"
MatchCall_PositiveBattleText11:: @ 82AAC25
- .string "Ah, {PLAYER}{STRING 5}.\n"
+ .string "Ah, {PLAYER}{KUN}.\n"
.string "This is {STR_VAR_1}.\p"
.string "Been in any battles lately?\n"
.string "I just won another one today!\p"
@@ -339,7 +339,7 @@ MatchCall_PositiveBattleText11:: @ 82AAC25
.string "Well, see you!$"
MatchCall_PositiveBattleText12:: @ 82AAC9D
- .string "Hello, {PLAYER}{STRING 5}.\n"
+ .string "Hello, {PLAYER}{KUN}.\n"
.string "It's me, {STR_VAR_1}.\p"
.string "I trust you've been well?\n"
.string "I'm still bursting with life!\p"
@@ -348,7 +348,7 @@ MatchCall_PositiveBattleText12:: @ 82AAC9D
.string "youngsters yet!$"
MatchCall_PositiveBattleText13:: @ 82AAD41
- .string "Ah, hello, {PLAYER}{STRING 5}!\n"
+ .string "Ah, hello, {PLAYER}{KUN}!\n"
.string "This is {STR_VAR_1}!\p"
.string "I hope you've been keeping well.\n"
.string "I still have a bounce in my step!\p"
@@ -358,12 +358,12 @@ MatchCall_PositiveBattleText13:: @ 82AAD41
.string "See you again!$"
MatchCall_PositiveBattleText14:: @ 82AAE00
- .string "Oh, hi, {PLAYER}{STRING 5}.\n"
+ .string "Oh, hi, {PLAYER}{KUN}.\n"
.string "This is {STR_VAR_1}.\p"
.string "I was in a battle recently, and my\n"
.string "{STR_VAR_2} was exceptional!\p"
.string "I wish you could have seen it,\n"
- .string "{PLAYER}{STRING 5}. Bye-bye!$"
+ .string "{PLAYER}{KUN}. Bye-bye!$"
MatchCall_SameRouteBattleRequestText1:: @ 82AAE7F
.string "Hi! {PLAYER}, hello!\n"
@@ -392,7 +392,7 @@ MatchCall_SameRouteBattleRequestText3:: @ 82AAF69
.string "I'll be waiting! Catch you soon!$"
MatchCall_SameRouteBattleRequestText4:: @ 82AB010
- .string "Hey, {PLAYER}{STRING 5}.\n"
+ .string "Hey, {PLAYER}{KUN}.\n"
.string "{STR_VAR_1} here.\p"
.string "Whereabouts are you now?\n"
.string "Huh? {STR_VAR_2}?\p"
@@ -400,7 +400,7 @@ MatchCall_SameRouteBattleRequestText4:: @ 82AB010
.string "I'll wait for you. See you!$"
MatchCall_SameRouteBattleRequestText5:: @ 82AB076
- .string "Hiya, {PLAYER}{STRING 5}!\n"
+ .string "Hiya, {PLAYER}{KUN}!\n"
.string "It's {STR_VAR_1}.\l"
.string "How are things with you?\p"
.string "You're where now?\n"
@@ -411,7 +411,7 @@ MatchCall_SameRouteBattleRequestText5:: @ 82AB076
.string "See you soon!$"
MatchCall_SameRouteBattleRequestText6:: @ 82AB11A
- .string "Hey, {PLAYER}{STRING 5}.\n"
+ .string "Hey, {PLAYER}{KUN}.\n"
.string "{STR_VAR_1} here.\l"
.string "How are your POKéMON keeping?\p"
.string "Oh, is that right? You're around\n"
@@ -422,7 +422,7 @@ MatchCall_SameRouteBattleRequestText6:: @ 82AB11A
.string "See you!$"
MatchCall_SameRouteBattleRequestText7:: @ 82AB1B4
- .string "…Er, {PLAYER}{STRING 5}?\n"
+ .string "…Er, {PLAYER}{KUN}?\n"
.string "{STR_VAR_1} here…\p"
.string "Oh, you happen to be around\n"
.string "{STR_VAR_2}?\p"
@@ -432,7 +432,7 @@ MatchCall_SameRouteBattleRequestText7:: @ 82AB1B4
.string "I'll wait for you.$"
MatchCall_SameRouteBattleRequestText8:: @ 82AB23D
- .string "Oh, {PLAYER}{STRING 5}, how do you do?\n"
+ .string "Oh, {PLAYER}{KUN}, how do you do?\n"
.string "This is {STR_VAR_1} speaking.\p"
.string "I hope you're doing well.\n"
.string "Oh, you're near {STR_VAR_2}.\p"
@@ -442,7 +442,7 @@ MatchCall_SameRouteBattleRequestText8:: @ 82AB23D
.string "See you soon!$"
MatchCall_SameRouteBattleRequestText9:: @ 82AB2E9
- .string "Oh, {PLAYER}{STRING 5}, hi there!\n"
+ .string "Oh, {PLAYER}{KUN}, hi there!\n"
.string "This is {STR_VAR_1}!\p"
.string "Are you keeping up?\n"
.string "Oh, you're near {STR_VAR_2}?\p"
@@ -451,7 +451,7 @@ MatchCall_SameRouteBattleRequestText9:: @ 82AB2E9
.string "Don't keep me waiting too long!$"
MatchCall_SameRouteBattleRequestText10:: @ 82AB382
- .string "Oh, {PLAYER}{STRING 5}, hello…\n"
+ .string "Oh, {PLAYER}{KUN}, hello…\n"
.string "This is {STR_VAR_1}.\p"
.string "How are things with you?\n"
.string "Oh, you're near {STR_VAR_2}.\p"
@@ -460,7 +460,7 @@ MatchCall_SameRouteBattleRequestText10:: @ 82AB382
.string "Be quick!$"
MatchCall_SameRouteBattleRequestText11:: @ 82AB410
- .string "Ah, {PLAYER}{STRING 5}.\n"
+ .string "Ah, {PLAYER}{KUN}.\n"
.string "This is {STR_VAR_1}.\p"
.string "Ah, so where you are now is\n"
.string "{STR_VAR_2}?\p"
@@ -470,7 +470,7 @@ MatchCall_SameRouteBattleRequestText11:: @ 82AB410
.string "See you real quick!$"
MatchCall_SameRouteBattleRequestText12:: @ 82AB4B0
- .string "Hello, {PLAYER}{STRING 5}.\n"
+ .string "Hello, {PLAYER}{KUN}.\n"
.string "It's me, {STR_VAR_1}.\l"
.string "Where might you be now?\p"
.string "{STR_VAR_2}?\n"
@@ -481,7 +481,7 @@ MatchCall_SameRouteBattleRequestText12:: @ 82AB4B0
.string "See you!$"
MatchCall_SameRouteBattleRequestText13:: @ 82AB538
- .string "Ah, hello, {PLAYER}{STRING 5}!\n"
+ .string "Ah, hello, {PLAYER}{KUN}!\n"
.string "This is {STR_VAR_1}!\p"
.string "I hope you've been keeping well.\n"
.string "Oh, you're near {STR_VAR_2}?\p"
@@ -491,7 +491,7 @@ MatchCall_SameRouteBattleRequestText13:: @ 82AB538
.string "Bye for now.$"
MatchCall_SameRouteBattleRequestText14:: @ 82AB5E4
- .string "Oh, hi, {PLAYER}{STRING 5}.\n"
+ .string "Oh, hi, {PLAYER}{KUN}.\n"
.string "This is {STR_VAR_1}.\p"
.string "You're what? …{STR_VAR_2}?\n"
.string "That's very close.\p"
@@ -527,7 +527,7 @@ MatchCall_DifferentRouteBattleRequestText3:: @ 82AB73C
.string "{STR_VAR_2}.$"
MatchCall_DifferentRouteBattleRequestText4:: @ 82AB808
- .string "Hey, {PLAYER}{STRING 5}.\n"
+ .string "Hey, {PLAYER}{KUN}.\n"
.string "{STR_VAR_1} here.\l"
.string "How are things with you?\p"
.string "My POKéMON have grown pretty\n"
@@ -538,7 +538,7 @@ MatchCall_DifferentRouteBattleRequestText4:: @ 82AB808
.string "{STR_VAR_2}, okay?$"
MatchCall_DifferentRouteBattleRequestText5:: @ 82AB8B7
- .string "Hiya, {PLAYER}{STRING 5}!\n"
+ .string "Hiya, {PLAYER}{KUN}!\n"
.string "It's {STR_VAR_1}.\p"
.string "My POKéMON are growing up in\n"
.string "decent ways.\p"
@@ -548,7 +548,7 @@ MatchCall_DifferentRouteBattleRequestText5:: @ 82AB8B7
.string "{STR_VAR_2}. See you soon!$"
MatchCall_DifferentRouteBattleRequestText6:: @ 82AB95D
- .string "Hey, {PLAYER}{STRING 5}.\n"
+ .string "Hey, {PLAYER}{KUN}.\n"
.string "{STR_VAR_1} here.\l"
.string "I hope you're on top of things.\p"
.string "I was thinking I'd like another\n"
@@ -558,7 +558,7 @@ MatchCall_DifferentRouteBattleRequestText6:: @ 82AB95D
.string "See you!$"
MatchCall_DifferentRouteBattleRequestText7:: @ 82ABA03
- .string "…Er, {PLAYER}{STRING 5}?\n"
+ .string "…Er, {PLAYER}{KUN}?\n"
.string "{STR_VAR_1} here…\l"
.string "So? Are your POKéMON growing?\p"
.string "Mine sure got stronger.\n"
@@ -568,7 +568,7 @@ MatchCall_DifferentRouteBattleRequestText7:: @ 82ABA03
.string "See you around.$"
MatchCall_DifferentRouteBattleRequestText8:: @ 82ABA9F
- .string "Oh, {PLAYER}{STRING 5}, how do you do?\n"
+ .string "Oh, {PLAYER}{KUN}, how do you do?\n"
.string "This is {STR_VAR_1} speaking.\p"
.string "I hope you're doing well.\n"
.string "My POKéMON are very frisky.\p"
@@ -578,48 +578,48 @@ MatchCall_DifferentRouteBattleRequestText8:: @ 82ABA9F
.string "Until then, good-bye!$"
MatchCall_DifferentRouteBattleRequestText9:: @ 82ABB62
- .string "Oh, {PLAYER}{STRING 5}, hi there!\n"
+ .string "Oh, {PLAYER}{KUN}, hi there!\n"
.string "This is {STR_VAR_1}!\l"
.string "How are your POKéMON doing?\p"
.string "My POKéMON keep getting better.\n"
- .string "I'd like to show you, {PLAYER}{STRING 5}.\p"
+ .string "I'd like to show you, {PLAYER}{KUN}.\p"
.string "I'm around {STR_VAR_2} now,\n"
.string "so let's battle if you're close by.\p"
.string "Hope I see you soon!$"
MatchCall_DifferentRouteBattleRequestText10:: @ 82ABC26
- .string "Oh, {PLAYER}{STRING 5}, hello…\n"
+ .string "Oh, {PLAYER}{KUN}, hello…\n"
.string "This is {STR_VAR_1}.\l"
.string "So, how are things with you?\p"
.string "My POKéMON have grown much\n"
.string "stronger than before.\p"
.string "I'd love another battle with you,\n"
- .string "{PLAYER}{STRING 5}.\p"
+ .string "{PLAYER}{KUN}.\p"
.string "I'll be around {STR_VAR_2}.\n"
.string "Come see me if you're close.$"
MatchCall_DifferentRouteBattleRequestText11:: @ 82ABCE9
- .string "Ah, {PLAYER}{STRING 5}.\n"
+ .string "Ah, {PLAYER}{KUN}.\n"
.string "This is {STR_VAR_1}.\l"
.string "Where might you be now?\p"
.string "My POKéMON are full of life.\n"
.string "They appear to be looking forward\l"
- .string "to seeing your POKéMON, {PLAYER}{STRING 5}.\p"
+ .string "to seeing your POKéMON, {PLAYER}{KUN}.\p"
.string "I'm around {STR_VAR_2} now.\n"
.string "I hope you'll seek us out.$"
MatchCall_DifferentRouteBattleRequestText12:: @ 82ABDA2
- .string "Hello, {PLAYER}{STRING 5}.\n"
+ .string "Hello, {PLAYER}{KUN}.\n"
.string "It's me, {STR_VAR_1}.\p"
.string "I should tell you, my POKéMON have\n"
.string "grown to be quite robust lately.\p"
.string "I would like to see them in a battle\n"
- .string "with you, {PLAYER}{STRING 5}.\p"
+ .string "with you, {PLAYER}{KUN}.\p"
.string "We'll be around {STR_VAR_2}.\n"
.string "Come see us anytime!$"
MatchCall_DifferentRouteBattleRequestText13:: @ 82ABE5E
- .string "Ah, hello, {PLAYER}{STRING 5}!\n"
+ .string "Ah, hello, {PLAYER}{KUN}!\n"
.string "This is {STR_VAR_1}!\l"
.string "Are your POKéMON keeping well?\p"
.string "My POKéMON have been so healthy,\n"
@@ -630,13 +630,13 @@ MatchCall_DifferentRouteBattleRequestText13:: @ 82ABE5E
.string "do come see us.$"
MatchCall_DifferentRouteBattleRequestText14:: @ 82ABF36
- .string "Oh, hi, {PLAYER}{STRING 5}.\n"
+ .string "Oh, hi, {PLAYER}{KUN}.\n"
.string "This is {STR_VAR_1}.\l"
.string "Keeping well, I hope.\p"
.string "Oh, yes! My POKéMON are\n"
.string "much stronger than before.\p"
.string "Don't you think we ought to have\n"
- .string "a battle, {PLAYER}{STRING 5}?\p"
+ .string "a battle, {PLAYER}{KUN}?\p"
.string "We'll be waiting for you around\n"
.string "{STR_VAR_2}.\p"
.string "Come see us anytime, okay?$"
@@ -884,14 +884,14 @@ MatchCall_PersonalizedText23:: @ 82AD2A8
.string "When there's a strong TRAINER\n"
.string "nearby, I can sometimes sense that\l"
.string "somehow.\p"
- .string "Did you pass close by, {PLAYER}{STRING 5}?\n"
+ .string "Did you pass close by, {PLAYER}{KUN}?\n"
.string "Maybe it was you.\p"
.string "I'll be waiting for your visit.\n"
.string "Bye!$"
MatchCall_PersonalizedText24:: @ 82AD34F
.string "Hello, this is {STR_VAR_1}.\n"
- .string "You sound well, {PLAYER}{STRING 5}.\p"
+ .string "You sound well, {PLAYER}{KUN}.\p"
.string "I've traveled around the world,\n"
.string "but I must say I've taken a great\l"
.string "shine to this region.\p"
@@ -1007,7 +1007,7 @@ MatchCall_PersonalizedText32:: @ 82ADC92
.string "It's kind of hard to explain, but…\l"
.string "How would I say this now…\l"
.string "My shorts feel silkier!\p"
- .string "And when I battled you, {PLAYER}{STRING 5},\n"
+ .string "And when I battled you, {PLAYER}{KUN},\n"
.string "my shorts felt icky and coarse.\p"
.string "… … … … … …\n"
.string "You didn't really believe that?\l"
@@ -1117,7 +1117,7 @@ MatchCall_PersonalizedText40:: @ 82AE5CD
.string "test of human endurance! Bye!$"
MatchCall_PersonalizedText41:: @ 82AE698
- .string "Hello, {PLAYER}{STRING 5}.\n"
+ .string "Hello, {PLAYER}{KUN}.\n"
.string "{STR_VAR_1} here.\p"
.string "How are your POKéMON doing?\p"
.string "My DRAGON POKéMON appear to be\n"
@@ -1171,7 +1171,7 @@ MatchCall_PersonalizedText46:: @ 82AE998
.string "I'd better go!$"
MatchCall_PersonalizedText47:: @ 82AEA8F
- .string "Oh, {PLAYER}{STRING 5}, hello!\n"
+ .string "Oh, {PLAYER}{KUN}, hello!\n"
.string "This is {STR_VAR_1}.\l"
.string "I'm up in the mountains now.\p"
.string "But the ground is too bumpy.\n"
@@ -1241,7 +1241,7 @@ MatchCall_PersonalizedText53:: @ 82AEEF4
MatchCall_PersonalizedText54:: @ 82AEFDA
.string "Hi, it's {STR_VAR_1}. You know,\n"
.string "the TRAINER who's always prepared!\p"
- .string "{PLAYER}{STRING 5}, do you have enough items?\n"
+ .string "{PLAYER}{KUN}, do you have enough items?\n"
.string "Are your POKéMON fit for action?\p"
.string "Keeping everything perfect around\n"
.string "you all the time is the secret to\l"
@@ -1326,7 +1326,7 @@ MatchCall_PersonalizedText60:: @ 82AF671
.string "enjoy POKéMON whatever your age.\p"
.string "Wouldn't it be good if you had\n"
.string "a partnership like ours?\p"
- .string "Of course, {PLAYER}{STRING 5}, you already\n"
+ .string "Of course, {PLAYER}{KUN}, you already\n"
.string "enjoy the trust and companionship\l"
.string "of your POKéMON now.\p"
.string "You have the makings of long and\n"
@@ -1344,7 +1344,7 @@ MatchCall_PersonalizedText61:: @ 82AF7D8
.string "was weak to make an impression!\p"
.string "She always chews me out whether\n"
.string "we win or lose!\p"
- .string "{PLAYER}{STRING 5}, can you say something\n"
+ .string "{PLAYER}{KUN}, can you say something\n"
.string "to her next time?\p"
.string "Okay, see you!$"
@@ -1412,7 +1412,7 @@ MatchCall_BattleFrontierStreakText3:: @ 82AFCFF
.string "Catch you soon!$"
MatchCall_BattleFrontierStreakText4:: @ 82AFDA7
- .string "Hey, {PLAYER}{STRING 5}.\n"
+ .string "Hey, {PLAYER}{KUN}.\n"
.string "{STR_VAR_1} here. What's up?\p"
.string "There's a rumor going around that\n"
.string "you strung together {STR_VAR_3} straight\l"
@@ -1421,7 +1421,7 @@ MatchCall_BattleFrontierStreakText4:: @ 82AFDA7
.string "See you!$"
MatchCall_BattleFrontierStreakText5:: @ 82AFE3D
- .string "Hiya, {PLAYER}{STRING 5}!\n"
+ .string "Hiya, {PLAYER}{KUN}!\n"
.string "It's {STR_VAR_1}.\p"
.string "You were at the {STR_VAR_2}\n"
.string "and won {STR_VAR_3} battles in a row?\l"
@@ -1430,7 +1430,7 @@ MatchCall_BattleFrontierStreakText5:: @ 82AFE3D
.string "See you soon!$"
MatchCall_BattleFrontierStreakText6:: @ 82AFECA
- .string "Hey, {PLAYER}{STRING 5}.\n"
+ .string "Hey, {PLAYER}{KUN}.\n"
.string "{STR_VAR_1} here. How are you?\p"
.string "By the way, I heard you pulled off\n"
.string "the feat of {STR_VAR_3} straight wins at\l"
@@ -1439,7 +1439,7 @@ MatchCall_BattleFrontierStreakText6:: @ 82AFECA
.string "raising my team.$"
MatchCall_BattleFrontierStreakText7:: @ 82AFF64
- .string "…Er, {PLAYER}{STRING 5}?\n"
+ .string "…Er, {PLAYER}{KUN}?\n"
.string "{STR_VAR_1} here…\p"
.string "Oh, yeah, you were over at\n"
.string "the {STR_VAR_2}, right?\p"
@@ -1448,7 +1448,7 @@ MatchCall_BattleFrontierStreakText7:: @ 82AFF64
.string "I have to go!$"
MatchCall_BattleFrontierStreakText8:: @ 82AFFF0
- .string "Oh, {PLAYER}{STRING 5}, how do you do?\n"
+ .string "Oh, {PLAYER}{KUN}, how do you do?\n"
.string "This is {STR_VAR_1} speaking.\l"
.string "I hope you're doing well.\p"
.string "Oh, but, you are. I've heard that\n"
@@ -1458,7 +1458,7 @@ MatchCall_BattleFrontierStreakText8:: @ 82AFFF0
.string "I hope you stay successful.$"
MatchCall_BattleFrontierStreakText9:: @ 82B00B5
- .string "Oh, {PLAYER}{STRING 5}, hi there!\n"
+ .string "Oh, {PLAYER}{KUN}, hi there!\n"
.string "This is {STR_VAR_1}!\p"
.string "I heard! Your {STR_VAR_3}-win streak at\n"
.string "the {STR_VAR_2}!\p"
@@ -1466,7 +1466,7 @@ MatchCall_BattleFrontierStreakText9:: @ 82B00B5
.string "I'd better try harder, too!$"
MatchCall_BattleFrontierStreakText10:: @ 82B0129
- .string "Oh, {PLAYER}{STRING 5}, hello…\n"
+ .string "Oh, {PLAYER}{KUN}, hello…\n"
.string "This is {STR_VAR_1}.\p"
.string "You won {STR_VAR_3} straight battles at\n"
.string "the {STR_VAR_2}?\p"
@@ -1474,7 +1474,7 @@ MatchCall_BattleFrontierStreakText10:: @ 82B0129
.string "I need to work harder.$"
MatchCall_BattleFrontierStreakText11:: @ 82B01A5
- .string "Ah, {PLAYER}{STRING 5}.\n"
+ .string "Ah, {PLAYER}{KUN}.\n"
.string "This is {STR_VAR_1}.\p"
.string "I hear you're the terror of\n"
.string "the {STR_VAR_2}?\p"
@@ -1484,7 +1484,7 @@ MatchCall_BattleFrontierStreakText11:: @ 82B01A5
.string "I wonder how many I can win?$"
MatchCall_BattleFrontierStreakText12:: @ 82B0232
- .string "Hello, {PLAYER}{STRING 5}.\n"
+ .string "Hello, {PLAYER}{KUN}.\n"
.string "It's me, {STR_VAR_1}.\l"
.string "Are you keeping well?\p"
.string "Someone passed on word about you.\n"
@@ -1494,7 +1494,7 @@ MatchCall_BattleFrontierStreakText12:: @ 82B0232
.string "See you!$"
MatchCall_BattleFrontierStreakText13:: @ 82B02D9
- .string "Ah, hello, {PLAYER}{STRING 5}!\n"
+ .string "Ah, hello, {PLAYER}{KUN}!\n"
.string "This is {STR_VAR_1}!\l"
.string "I hope you've been keeping well.\p"
.string "They say you won {STR_VAR_3} straight\n"
@@ -1503,7 +1503,7 @@ MatchCall_BattleFrontierStreakText13:: @ 82B02D9
.string "Bye now.$"
MatchCall_BattleFrontierStreakText14:: @ 82B0366
- .string "Oh, hi, {PLAYER}{STRING 5}.\n"
+ .string "Oh, hi, {PLAYER}{KUN}.\n"
.string "This is {STR_VAR_1}.\p"
.string "I heard about you!\n"
.string "Didn't you just win {STR_VAR_3} battles in\l"
@@ -1538,7 +1538,7 @@ MatchCall_BattleFrontierRecordStreakText3:: @ 82B04DE
.string "Catch you soon!$"
MatchCall_BattleFrontierRecordStreakText4:: @ 82B0586
- .string "Hey, {PLAYER}{STRING 5}.\n"
+ .string "Hey, {PLAYER}{KUN}.\n"
.string "{STR_VAR_1} here. What's up?\p"
.string "There's a rumor going around that\n"
.string "you strung together {STR_VAR_3} straight\l"
@@ -1547,7 +1547,7 @@ MatchCall_BattleFrontierRecordStreakText4:: @ 82B0586
.string "See you!$"
MatchCall_BattleFrontierRecordStreakText5:: @ 82B061C
- .string "Hiya, {PLAYER}{STRING 5}!\n"
+ .string "Hiya, {PLAYER}{KUN}!\n"
.string "It's {STR_VAR_1}.\p"
.string "You were at the {STR_VAR_2}\n"
.string "and won {STR_VAR_3} battles in a row?\l"
@@ -1556,7 +1556,7 @@ MatchCall_BattleFrontierRecordStreakText5:: @ 82B061C
.string "See you soon!$"
MatchCall_BattleFrontierRecordStreakText6:: @ 82B06A3
- .string "Hey, {PLAYER}{STRING 5}.\n"
+ .string "Hey, {PLAYER}{KUN}.\n"
.string "{STR_VAR_1} here. How are you?\p"
.string "By the way, I heard you pulled off\n"
.string "the feat of {STR_VAR_3} straight wins at\l"
@@ -1565,7 +1565,7 @@ MatchCall_BattleFrontierRecordStreakText6:: @ 82B06A3
.string "See you soon!$"
MatchCall_BattleFrontierRecordStreakText7:: @ 82B073B
- .string "…Er, {PLAYER}{STRING 5}?\n"
+ .string "…Er, {PLAYER}{KUN}?\n"
.string "{STR_VAR_1} here…\p"
.string "Oh, yeah, you were over at\n"
.string "the {STR_VAR_2}, right?\p"
@@ -1574,7 +1574,7 @@ MatchCall_BattleFrontierRecordStreakText7:: @ 82B073B
.string "I have to go!$"
MatchCall_BattleFrontierRecordStreakText8:: @ 82B07C7
- .string "Oh, {PLAYER}{STRING 5}, how do you do?\n"
+ .string "Oh, {PLAYER}{KUN}, how do you do?\n"
.string "This is {STR_VAR_1} speaking.\l"
.string "I hope you're doing well.\p"
.string "Oh, but, you are. I've heard that\n"
@@ -1584,7 +1584,7 @@ MatchCall_BattleFrontierRecordStreakText8:: @ 82B07C7
.string "I'd better work on my POKéMON, too!$"
MatchCall_BattleFrontierRecordStreakText9:: @ 82B0894
- .string "Oh, {PLAYER}{STRING 5}, hi there!\n"
+ .string "Oh, {PLAYER}{KUN}, hi there!\n"
.string "This is {STR_VAR_1}!\p"
.string "I heard! Your {STR_VAR_3}-win streak at\n"
.string "the {STR_VAR_2}!\p"
@@ -1592,7 +1592,7 @@ MatchCall_BattleFrontierRecordStreakText9:: @ 82B0894
.string "I'd better try harder, too!$"
MatchCall_BattleFrontierRecordStreakText10:: @ 82B0908
- .string "Oh, {PLAYER}{STRING 5}, hello…\n"
+ .string "Oh, {PLAYER}{KUN}, hello…\n"
.string "This is {STR_VAR_1}.\p"
.string "You won {STR_VAR_3} straight battles at\n"
.string "the {STR_VAR_2}?\p"
@@ -1600,7 +1600,7 @@ MatchCall_BattleFrontierRecordStreakText10:: @ 82B0908
.string "I need to work harder.$"
MatchCall_BattleFrontierRecordStreakText11:: @ 82B0984
- .string "Ah, {PLAYER}{STRING 5}.\n"
+ .string "Ah, {PLAYER}{KUN}.\n"
.string "This is {STR_VAR_1}.\p"
.string "I hear you're the terror of\n"
.string "the {STR_VAR_2}?\p"
@@ -1610,7 +1610,7 @@ MatchCall_BattleFrontierRecordStreakText11:: @ 82B0984
.string "I wonder how many I can win?$"
MatchCall_BattleFrontierRecordStreakText12:: @ 82B0A11
- .string "Hello, {PLAYER}{STRING 5}.\n"
+ .string "Hello, {PLAYER}{KUN}.\n"
.string "It's me, {STR_VAR_1}.\l"
.string "Are you keeping well?\p"
.string "Someone passed on word about you.\n"
@@ -1620,7 +1620,7 @@ MatchCall_BattleFrontierRecordStreakText12:: @ 82B0A11
.string "See you!$"
MatchCall_BattleFrontierRecordStreakText13:: @ 82B0AB8
- .string "Ah, hello, {PLAYER}{STRING 5}!\n"
+ .string "Ah, hello, {PLAYER}{KUN}!\n"
.string "This is {STR_VAR_1}!\l"
.string "I hope you've been keeping well.\p"
.string "They say you won {STR_VAR_3} straight\n"
@@ -1629,7 +1629,7 @@ MatchCall_BattleFrontierRecordStreakText13:: @ 82B0AB8
.string "Bye now.$"
MatchCall_BattleFrontierRecordStreakText14:: @ 82B0B45
- .string "Oh, hi, {PLAYER}{STRING 5}.\n"
+ .string "Oh, hi, {PLAYER}{KUN}.\n"
.string "This is {STR_VAR_1}.\l"
.string "I heard about you!\p"
.string "Didn't you just win {STR_VAR_3} battles in\n"
@@ -1664,7 +1664,7 @@ MatchCall_BattleDomeText3:: @ 82B0CC7
.string "Catch you soon!$"
MatchCall_BattleDomeText4:: @ 82B0D4A
- .string "Hey, {PLAYER}{STRING 5}.\n"
+ .string "Hey, {PLAYER}{KUN}.\n"
.string "{STR_VAR_1} here.\p"
.string "I heard you became the champion\n"
.string "at the {STR_VAR_2} {STR_VAR_3} times.\p"
@@ -1672,7 +1672,7 @@ MatchCall_BattleDomeText4:: @ 82B0D4A
.string "I'll try to keep up!$"
MatchCall_BattleDomeText5:: @ 82B0DC8
- .string "Hiya, {PLAYER}{STRING 5}!\n"
+ .string "Hiya, {PLAYER}{KUN}!\n"
.string "It's {STR_VAR_1}.\p"
.string "I heard you won {STR_VAR_3} times\n"
.string "outright at the {STR_VAR_2}.\p"
@@ -1680,7 +1680,7 @@ MatchCall_BattleDomeText5:: @ 82B0DC8
.string "See you soon!$"
MatchCall_BattleDomeText6:: @ 82B0E35
- .string "Hey, {PLAYER}{STRING 5}?\n"
+ .string "Hey, {PLAYER}{KUN}?\n"
.string "{STR_VAR_1} here. How are you?\p"
.string "By the way, I heard you became\n"
.string "the champion {STR_VAR_3} times at\l"
@@ -1689,7 +1689,7 @@ MatchCall_BattleDomeText6:: @ 82B0E35
.string "you pull farther ahead.$"
MatchCall_BattleDomeText7:: @ 82B0ED1
- .string "{PLAYER}{STRING 5}?\n"
+ .string "{PLAYER}{KUN}?\n"
.string "{STR_VAR_1} here.\p"
.string "You were at the {STR_VAR_2}\n"
.string "and became the champ {STR_VAR_3} times?\p"
@@ -1699,7 +1699,7 @@ MatchCall_BattleDomeText7:: @ 82B0ED1
.string "Okay, bye.$"
MatchCall_BattleDomeText8:: @ 82B0F72
- .string "Oh, {PLAYER}{STRING 5}, how do you do?\n"
+ .string "Oh, {PLAYER}{KUN}, how do you do?\n"
.string "This is {STR_VAR_1} speaking.\l"
.string "I hope you're doing well.\l"
.string "Oh, but, you are.\p"
@@ -1709,7 +1709,7 @@ MatchCall_BattleDomeText8:: @ 82B0F72
.string "See you again.$"
MatchCall_BattleDomeText9:: @ 82B102A
- .string "Oh, {PLAYER}{STRING 5}, hi there!\n"
+ .string "Oh, {PLAYER}{KUN}, hi there!\n"
.string "This is {STR_VAR_1}!\p"
.string "I heard! You took the title\n"
.string "{STR_VAR_3} times at the {STR_VAR_2}!\p"
@@ -1717,7 +1717,7 @@ MatchCall_BattleDomeText9:: @ 82B102A
.string "I'd better try harder, too!$"
MatchCall_BattleDomeText10:: @ 82B10A7
- .string "Oh, {PLAYER}{STRING 5}, hello.\n"
+ .string "Oh, {PLAYER}{KUN}, hello.\n"
.string "This is {STR_VAR_1}.\p"
.string "You won {STR_VAR_3} straight times at\n"
.string "the {STR_VAR_2}?\p"
@@ -1725,7 +1725,7 @@ MatchCall_BattleDomeText10:: @ 82B10A7
.string "I need to work harder.$"
MatchCall_BattleDomeText11:: @ 82B1121
- .string "Ah, {PLAYER}{STRING 5}.\n"
+ .string "Ah, {PLAYER}{KUN}.\n"
.string "This is {STR_VAR_1}.\p"
.string "I hear you're the terror of\n"
.string "the {STR_VAR_2}?\p"
@@ -1737,7 +1737,7 @@ MatchCall_BattleDomeText11:: @ 82B1121
.string "Well, see you!$"
MatchCall_BattleDomeText12:: @ 82B11D3
- .string "Hello, {PLAYER}{STRING 5}.\n"
+ .string "Hello, {PLAYER}{KUN}.\n"
.string "It's me, {STR_VAR_1}.\l"
.string "Are you keeping well?\p"
.string "You've won {STR_VAR_3} events at a place\n"
@@ -1746,7 +1746,7 @@ MatchCall_BattleDomeText12:: @ 82B11D3
.string "See you!$"
MatchCall_BattleDomeText13:: @ 82B124D
- .string "Ah, hello, {PLAYER}{STRING 5}!\n"
+ .string "Ah, hello, {PLAYER}{KUN}!\n"
.string "This is {STR_VAR_1}!\l"
.string "I hope you've been keeping well.\p"
.string "They say you won {STR_VAR_3} events\n"
@@ -1755,7 +1755,7 @@ MatchCall_BattleDomeText13:: @ 82B124D
.string "Bye now.$"
MatchCall_BattleDomeText14:: @ 82B12D0
- .string "Oh, hi, {PLAYER}{STRING 5}.\n"
+ .string "Oh, hi, {PLAYER}{KUN}.\n"
.string "This is {STR_VAR_1}.\l"
.string "I heard about you!\p"
.string "Didn't you win {STR_VAR_3} titles\n"
@@ -1790,7 +1790,7 @@ MatchCall_BattlePikeText3:: @ 82B142B
.string "Catch you soon!$"
MatchCall_BattlePikeText4:: @ 82B14B4
- .string "Hey, {PLAYER}{STRING 5}.\n"
+ .string "Hey, {PLAYER}{KUN}.\n"
.string "{STR_VAR_1} here.\p"
.string "I heard you blew through {STR_VAR_3} rooms\n"
.string "at the {STR_VAR_2}.\p"
@@ -1798,7 +1798,7 @@ MatchCall_BattlePikeText4:: @ 82B14B4
.string "try to keep up!$"
MatchCall_BattlePikeText5:: @ 82B1525
- .string "Hiya, {PLAYER}{STRING 5}!\n"
+ .string "Hiya, {PLAYER}{KUN}!\n"
.string "It's {STR_VAR_1}.\p"
.string "I heard you got past {STR_VAR_3} rooms\n"
.string "at the {STR_VAR_2}.\p"
@@ -1806,7 +1806,7 @@ MatchCall_BattlePikeText5:: @ 82B1525
.string "See you soon!$"
MatchCall_BattlePikeText6:: @ 82B158E
- .string "Hey, {PLAYER}{STRING 5}?\n"
+ .string "Hey, {PLAYER}{KUN}?\n"
.string "{STR_VAR_1} here. How are you?\p"
.string "By the way, I heard you got through\n"
.string "{STR_VAR_3} rooms at the {STR_VAR_2}.\p"
@@ -1814,7 +1814,7 @@ MatchCall_BattlePikeText6:: @ 82B158E
.string "you pull further ahead.$"
MatchCall_BattlePikeText7:: @ 82B1622
- .string "{PLAYER}{STRING 5}?\n"
+ .string "{PLAYER}{KUN}?\n"
.string "{STR_VAR_1} here.\p"
.string "You were at the {STR_VAR_2}\n"
.string "and won your way past {STR_VAR_3} rooms?\p"
@@ -1823,7 +1823,7 @@ MatchCall_BattlePikeText7:: @ 82B1622
.string "Okay, bye.$"
MatchCall_BattlePikeText8:: @ 82B169D
- .string "Oh, {PLAYER}{STRING 5}, how do you do?\n"
+ .string "Oh, {PLAYER}{KUN}, how do you do?\n"
.string "This is {STR_VAR_1} speaking.\l"
.string "I hope you're doing well.\l"
.string "Oh, but, you are.\p"
@@ -1834,7 +1834,7 @@ MatchCall_BattlePikeText8:: @ 82B169D
.string "See you again.$"
MatchCall_BattlePikeText9:: @ 82B1775
- .string "Oh, {PLAYER}{STRING 5}, hi there!\n"
+ .string "Oh, {PLAYER}{KUN}, hi there!\n"
.string "This is {STR_VAR_1}!\p"
.string "I heard! You won your way through\n"
.string "{STR_VAR_3} rooms at the {STR_VAR_2}!\p"
@@ -1842,7 +1842,7 @@ MatchCall_BattlePikeText9:: @ 82B1775
.string "I'd better try harder, too!$"
MatchCall_BattlePikeText10:: @ 82B17F8
- .string "Oh, {PLAYER}{STRING 5}, hello.\n"
+ .string "Oh, {PLAYER}{KUN}, hello.\n"
.string "This is {STR_VAR_1}.\p"
.string "You won your way past {STR_VAR_3} rooms\n"
.string "at the {STR_VAR_2}?\p"
@@ -1850,7 +1850,7 @@ MatchCall_BattlePikeText10:: @ 82B17F8
.string "I need to work harder.$"
MatchCall_BattlePikeText11:: @ 82B1877
- .string "Ah, {PLAYER}{STRING 5}.\n"
+ .string "Ah, {PLAYER}{KUN}.\n"
.string "This is {STR_VAR_1}.\p"
.string "I hear you're the terror of\n"
.string "the {STR_VAR_2}?\p"
@@ -1862,7 +1862,7 @@ MatchCall_BattlePikeText11:: @ 82B1877
.string "Well, see you!$"
MatchCall_BattlePikeText12:: @ 82B1946
- .string "Hello, {PLAYER}{STRING 5}.\n"
+ .string "Hello, {PLAYER}{KUN}.\n"
.string "It's me, {STR_VAR_1}.\l"
.string "Are you keeping well?\p"
.string "You've won through {STR_VAR_3} rooms at\n"
@@ -1871,7 +1871,7 @@ MatchCall_BattlePikeText12:: @ 82B1946
.string "See you!$"
MatchCall_BattlePikeText13:: @ 82B19C7
- .string "Ah, hello, {PLAYER}{STRING 5}!\n"
+ .string "Ah, hello, {PLAYER}{KUN}!\n"
.string "This is {STR_VAR_1}!\l"
.string "I hope you've been keeping well.\p"
.string "They say you won in {STR_VAR_3} rooms\n"
@@ -1880,7 +1880,7 @@ MatchCall_BattlePikeText13:: @ 82B19C7
.string "Bye now.$"
MatchCall_BattlePikeText14:: @ 82B1A4C
- .string "Oh, hi, {PLAYER}{STRING 5}.\n"
+ .string "Oh, hi, {PLAYER}{KUN}.\n"
.string "This is {STR_VAR_1}.\l"
.string "I heard about you!\p"
.string "Didn't you get through {STR_VAR_3} rooms\n"
@@ -1915,7 +1915,7 @@ MatchCall_BattlePyramidText3:: @ 82B1BE4
.string "Catch you soon!$"
MatchCall_BattlePyramidText4:: @ 82B1C6A
- .string "Hey, {PLAYER}{STRING 5}.\n"
+ .string "Hey, {PLAYER}{KUN}.\n"
.string "{STR_VAR_1} here.\p"
.string "I heard you scaled {STR_VAR_3} floors\n"
.string "in the {STR_VAR_2}.\p"
@@ -1923,7 +1923,7 @@ MatchCall_BattlePyramidText4:: @ 82B1C6A
.string "to keep up!$"
MatchCall_BattlePyramidText5:: @ 82B1CCF
- .string "Hiya, {PLAYER}{STRING 5}!\n"
+ .string "Hiya, {PLAYER}{KUN}!\n"
.string "It's {STR_VAR_1}.\p"
.string "I heard you climbed {STR_VAR_3} floors\n"
.string "in the {STR_VAR_2}.\p"
@@ -1931,7 +1931,7 @@ MatchCall_BattlePyramidText5:: @ 82B1CCF
.string "See you soon!$"
MatchCall_BattlePyramidText6:: @ 82B1D38
- .string "Hey, {PLAYER}{STRING 5}?\n"
+ .string "Hey, {PLAYER}{KUN}?\n"
.string "{STR_VAR_1} here. How are you?\p"
.string "By the way, I heard you got through\n"
.string "{STR_VAR_3} floors in the {STR_VAR_2}.\p"
@@ -1939,7 +1939,7 @@ MatchCall_BattlePyramidText6:: @ 82B1D38
.string "you pull further ahead.$"
MatchCall_BattlePyramidText7:: @ 82B1DCD
- .string "{PLAYER}{STRING 5}?\n"
+ .string "{PLAYER}{KUN}?\n"
.string "{STR_VAR_1} here.\p"
.string "You were at the {STR_VAR_2}\n"
.string "and won your way up {STR_VAR_3} floors?\p"
@@ -1949,7 +1949,7 @@ MatchCall_BattlePyramidText7:: @ 82B1DCD
.string "Okay, bye.$"
MatchCall_BattlePyramidText8:: @ 82B1E4B
- .string "Oh, {PLAYER}{STRING 5}, how do you do?\n"
+ .string "Oh, {PLAYER}{KUN}, how do you do?\n"
.string "This is {STR_VAR_1} speaking.\l"
.string "I hope you're doing well.\l"
.string "Oh, but, you are.\p"
@@ -1960,7 +1960,7 @@ MatchCall_BattlePyramidText8:: @ 82B1E4B
.string "See you again.$"
MatchCall_BattlePyramidText9:: @ 82B1F24
- .string "Oh, {PLAYER}{STRING 5}, hi there!\n"
+ .string "Oh, {PLAYER}{KUN}, hi there!\n"
.string "This is {STR_VAR_1}!\p"
.string "I heard! You won your way through\n"
.string "{STR_VAR_3} floors in the {STR_VAR_2}!\p"
@@ -1968,7 +1968,7 @@ MatchCall_BattlePyramidText9:: @ 82B1F24
.string "I'd better try harder, too!$"
MatchCall_BattlePyramidText10:: @ 82B1FA8
- .string "Oh, {PLAYER}{STRING 5}, hello.\n"
+ .string "Oh, {PLAYER}{KUN}, hello.\n"
.string "This is {STR_VAR_1}.\p"
.string "You climbed {STR_VAR_3} floors inside\n"
.string "the {STR_VAR_2}?\p"
@@ -1976,7 +1976,7 @@ MatchCall_BattlePyramidText10:: @ 82B1FA8
.string "I need to work harder.$"
MatchCall_BattlePyramidText11:: @ 82B2022
- .string "Ah, {PLAYER}{STRING 5}.\n"
+ .string "Ah, {PLAYER}{KUN}.\n"
.string "This is {STR_VAR_1}.\p"
.string "I hear you're the terror of\n"
.string "the {STR_VAR_2}?\p"
@@ -1988,7 +1988,7 @@ MatchCall_BattlePyramidText11:: @ 82B2022
.string "Well, see you!$"
MatchCall_BattlePyramidText12:: @ 82B20F3
- .string "Hello, {PLAYER}{STRING 5}.\n"
+ .string "Hello, {PLAYER}{KUN}.\n"
.string "It's me, {STR_VAR_1}.\l"
.string "Are you keeping well?\p"
.string "You've won through {STR_VAR_3} floors in\n"
@@ -1997,7 +1997,7 @@ MatchCall_BattlePyramidText12:: @ 82B20F3
.string "See you!$"
MatchCall_BattlePyramidText13:: @ 82B2175
- .string "Ah, hello, {PLAYER}{STRING 5}!\n"
+ .string "Ah, hello, {PLAYER}{KUN}!\n"
.string "This is {STR_VAR_1}!\l"
.string "I hope you've been keeping well.\p"
.string "They say you climbed {STR_VAR_3} floors\n"
@@ -2006,7 +2006,7 @@ MatchCall_BattlePyramidText13:: @ 82B2175
.string "Bye now.$"
MatchCall_BattlePyramidText14:: @ 82B21FC
- .string "Oh, hi, {PLAYER}{STRING 5}.\n"
+ .string "Oh, hi, {PLAYER}{KUN}.\n"
.string "This is {STR_VAR_1}.\l"
.string "I heard about you!\p"
.string "Didn't you get through {STR_VAR_3} floors\n"
@@ -2068,7 +2068,7 @@ gText_Roxanne_Pokenav_2B2607:: @ 82B2607
.string "is a matter of pride.$"
gText_Brawly_Pokenav_2B2659:: @ 82B2659
- .string "BRAWLY: Hey, there, {PLAYER}{STRING 5}!\p"
+ .string "BRAWLY: Hey, there, {PLAYER}{KUN}!\p"
.string "I learned a lot from the battle we\n"
.string "had together.\p"
.string "I intend to do my training over,\n"
@@ -2079,7 +2079,7 @@ gText_Brawly_Pokenav_2B2659:: @ 82B2659
.string "I want you to challenge us again.$"
gText_Brawly_Pokenav_2B275D:: @ 82B275D
- .string "BRAWLY: Hey, {PLAYER}{STRING 5}!\n"
+ .string "BRAWLY: Hey, {PLAYER}{KUN}!\n"
.string "Congratulations!\p"
.string "Word about your exploits arrived\n"
.string "on tidal winds!\p"
@@ -2091,13 +2091,13 @@ gText_Brawly_Pokenav_2B275D:: @ 82B275D
.string "I want you to challenge us again.$"
gText_Brawly_Pokenav_2B286F:: @ 82B286F
- .string "BRAWLY: Hey, {PLAYER}{STRING 5}!\n"
+ .string "BRAWLY: Hey, {PLAYER}{KUN}!\n"
.string "My GYM's ready for action!\p"
.string "Come back to DEWFORD anytime\n"
.string "for another challenge!$"
gText_Brawly_Pokenav_2B28D1:: @ 82B28D1
- .string "BRAWLY: {PLAYER}{STRING 5}, I don't think\n"
+ .string "BRAWLY: {PLAYER}{KUN}, I don't think\n"
.string "I'll ever get bored of battling you!$"
gText_Wattson_Pokenav_2B2912:: @ 82B2912
@@ -2225,7 +2225,7 @@ gText_TateLiza_Pokenav_2B31CD:: @ 82B31CD
gText_Juan_Pokenav_2B3249:: @ 82B3249
.string "JUAN: Hmm…\n"
- .string "{PLAYER}{STRING 5}… Was it?\p"
+ .string "{PLAYER}{KUN}… Was it?\p"
.string "Our battle together--it brought\n"
.string "to me memories of when I first\l"
.string "encountered WALLACE.\p"
@@ -2233,7 +2233,7 @@ gText_Juan_Pokenav_2B3249:: @ 82B3249
.string "yet surpass WALLACE!$"
gText_Juan_Pokenav_2B32EC:: @ 82B32EC
- .string "JUAN: Fufu… {PLAYER}{STRING 5}…\n"
+ .string "JUAN: Fufu… {PLAYER}{KUN}…\n"
.string "You've finally achieved your goal.\p"
.string "My eye for appraising talent wasn't\n"
.string "mistaken…\p"
@@ -2242,14 +2242,14 @@ gText_Juan_Pokenav_2B32EC:: @ 82B32EC
.string "of power and prestige.$"
gText_Juan_Pokenav_2B33AA:: @ 82B33AA
- .string "JUAN: Hoho… {PLAYER}{STRING 5}…\p"
+ .string "JUAN: Hoho… {PLAYER}{KUN}…\p"
.string "Our SOOTOPOLIS GYM has finally\n"
.string "reopened.\p"
.string "If you wish to see me, you are\n"
.string "welcome to visit anytime.$"
gText_Juan_Pokenav_2B341E:: @ 82B341E
- .string "JUAN: {PLAYER}{STRING 5}…\p"
+ .string "JUAN: {PLAYER}{KUN}…\p"
.string "Like the finest music, the battles\n"
.string "we wage together strike chords\l"
.string "of inspiration in my heart…\p"
@@ -2293,7 +2293,7 @@ gText_Drake_Pokenav_2B368B:: @ 82B368B
.string "Don't you agree, {PLAYER}?$"
gText_Wallace_Pokenav_2B3790:: @ 82B3790
- .string "WALLACE: Hello, {PLAYER}{STRING 5}.\n"
+ .string "WALLACE: Hello, {PLAYER}{KUN}.\n"
.string "Have you met STEVEN?\p"
.string "He is…\n"
.string "Actually incredibly skilled.\p"
@@ -2336,14 +2336,14 @@ MossdeepCity_SpaceCenter_2F_Text_2B39C6: @ 82B39C6
.string "… … … … … Click!$"
gText_May_Pokenav_2B3AB3:: @ 2B3AB3
- .string "MAY: Hi, {PLAYER}{STRING 5}!\p"
+ .string "MAY: Hi, {PLAYER}{KUN}!\p"
.string "MR. BRINEY retired as a SAILOR,\n"
.string "but I still see him out on the sea\l"
.string "with his pet PEEKO sometimes.\p"
.string "He must love the sea still.$"
gText_May_Pokenav_2B3B3F:: @ 2B3B3F
- .string "MAY: Hi, {PLAYER}{STRING 5}!\p"
+ .string "MAY: Hi, {PLAYER}{KUN}!\p"
.string "You know how little towns like\n"
.string "PETALBURG and DEWFORD have GYMS?\p"
.string "For some reason, the big port of\n"
@@ -2352,7 +2352,7 @@ gText_May_Pokenav_2B3B3F:: @ 2B3B3F
.string "I should apply to be the LEADER.$"
gText_May_Pokenav_2B3C13:: @ 2B3C13
- .string "MAY: Hi, {PLAYER}{STRING 5}!\p"
+ .string "MAY: Hi, {PLAYER}{KUN}!\p"
.string "Do you remember a man named\n"
.string "the CUTTER in RUSTBORO?\l"
.string "He had a house there, remember?\p"
@@ -2364,13 +2364,13 @@ gText_May_Pokenav_2B3C13:: @ 2B3C13
.string "The ROCK SMASH GUY!$"
gText_May_Pokenav_2B3CF3:: @ 2B3CF3
- .string "MAY: {PLAYER}{STRING 5}?\p"
+ .string "MAY: {PLAYER}{KUN}?\p"
.string "RUSTURF TUNNEL…\n"
.string "They named it that because it\l"
.string "joins RUSTBORO and VERDANTURF.$"
gText_May_Pokenav_2B3D4B:: @ 2B3D4B
- .string "MAY: {PLAYER}{STRING 5}, how are you?\p"
+ .string "MAY: {PLAYER}{KUN}, how are you?\p"
.string "I'm out on ROUTE 111 now.\p"
.string "I'm going to get a rest at an old\n"
.string "lady's house.\p"
@@ -2378,7 +2378,7 @@ gText_May_Pokenav_2B3D4B:: @ 2B3D4B
.string "the desert.$"
gText_May_Pokenav_2B3DD1:: @ 2B3DD1
- .string "MAY: Hi, {PLAYER}{STRING 5}!\p"
+ .string "MAY: Hi, {PLAYER}{KUN}!\p"
.string "Did you know about the MIRAGE\n"
.string "TOWER in the desert?\p"
.string "They say, like a mirage, it seems\n"
@@ -2386,21 +2386,21 @@ gText_May_Pokenav_2B3DD1:: @ 2B3DD1
.string "I wish I could see it.$"
gText_May_Pokenav_2B3E69:: @ 2B3E69
- .string "MAY: {PLAYER}{STRING 5}, yahoo!\n"
+ .string "MAY: {PLAYER}{KUN}, yahoo!\n"
.string "I'm on ROUTE 119 now.\p"
.string "There's a big river here, and\n"
.string "it often rains.\p"
.string "I got soaked!$"
gText_May_Pokenav_2B3ECD:: @ 2B3ECD
- .string "MAY: {PLAYER}{STRING 5}, hi.\p"
+ .string "MAY: {PLAYER}{KUN}, hi.\p"
.string "MT. PYRE is a memorial to POKéMON\n"
.string "whose lives have ended.\p"
.string "Maybe as a result, it's infested\n"
.string "with many GHOST-type POKéMON!$"
gText_May_Pokenav_2B3F2B:: @ 2B3F2B
- .string "MAY: Hi, {PLAYER}{STRING 5}!\p"
+ .string "MAY: Hi, {PLAYER}{KUN}!\p"
.string "I was thinking of going to the hot\n"
.string "spring in LAVARIDGE.\p"
.string "But on the way, around JAGGED\n"
@@ -2408,14 +2408,14 @@ gText_May_Pokenav_2B3F2B:: @ 2B3F2B
.string "characters. The mood was ugly!$"
gText_May_Pokenav_2B3FFB:: @ 2B3FFB
- .string "MAY: Hi, {PLAYER}{STRING 5}!\n"
+ .string "MAY: Hi, {PLAYER}{KUN}!\n"
.string "Did you see the news?\p"
.string "They say CAPT. STERN discovered\n"
.string "the SEAFLOOR CAVERN while on his\l"
.string "submarine expedition.$"
gText_May_Pokenav_2B402B:: @ 2B402B
- .string "MAY: Hi, {PLAYER}{STRING 5}!\n"
+ .string "MAY: Hi, {PLAYER}{KUN}!\n"
.string "Don't you think it's neat?\p"
.string "Even if you don't have a boat,\n"
.string "you can cross the sea using\l"
@@ -2425,7 +2425,7 @@ gText_May_Pokenav_2B402B:: @ 2B402B
.string "you go to the bottom of the sea.$"
gText_May_Pokenav_2B414B:: @ 2B414B
- .string "MAY: Hi, {PLAYER}{STRING 5}!\n"
+ .string "MAY: Hi, {PLAYER}{KUN}!\n"
.string "Hope things are okay!\p"
.string "Have you been on the sea and\n"
.string "found your way to the other side\l"
@@ -2436,7 +2436,7 @@ gText_May_Pokenav_2B414B:: @ 2B414B
.string "come up to the surface. Easy!$"
gText_May_Pokenav_2B4228:: @ 2B4228
- .string "MAY: Hi, {PLAYER}{STRING 5}!\p"
+ .string "MAY: Hi, {PLAYER}{KUN}!\p"
.string "How's it going?\n"
.string "Are you filling your POKéDEX?\p"
.string "I heard a rumor that there are\n"
@@ -2445,7 +2445,7 @@ gText_May_Pokenav_2B4228:: @ 2B4228
.string "I would love to see even one…$"
gText_May_Pokenav_2B42E0:: @ 2B42E0
- .string "MAY: {PLAYER}{STRING 5}!\n"
+ .string "MAY: {PLAYER}{KUN}!\n"
.string "I heard the rumors!\p"
.string "You beat the SOOTOPOLIS GYM\n"
.string "LEADER?\p"
@@ -2455,9 +2455,9 @@ gText_May_Pokenav_2B42E0:: @ 2B42E0
gText_May_Pokenav_2B4350:: @ 2B4350
.string "MAY: There isn't a single TRAINER\n"
.string "left in HOENN who doesn't know who\l"
- .string "you are, {PLAYER}{STRING 5}!\p"
+ .string "you are, {PLAYER}{KUN}!\p"
.string "When I tell people that I'm friends\n"
- .string "with you, {PLAYER}{STRING 5}, they're all\l"
+ .string "with you, {PLAYER}{KUN}, they're all\l"
.string "surprised!$"
gText_Brendan_Pokenav_2B43EF:: @ 2B43EF
@@ -2641,7 +2641,7 @@ gText_Wally_Pokenav_2B5100:: @ 2B5100
.string "Thank you…$"
gText_Scott_Pokenav_2B5184:: @ 2B5184
- .string "SCOTT: Howdy, {PLAYER}{STRING 5}!\p"
+ .string "SCOTT: Howdy, {PLAYER}{KUN}!\p"
.string "You know how POKéMON can be found\n"
.string "everywhere?\p"
.string "Like in the mountains, in the sea,\n"
@@ -2660,7 +2660,7 @@ gText_Scott_Pokenav_2B5275:: @ 2B5275
.string "makes me all ticklish!$"
gText_Scott_Pokenav_2B5323:: @ 2B5323
- .string "SCOTT: Hi, hi, {PLAYER}{STRING 5}!\p"
+ .string "SCOTT: Hi, hi, {PLAYER}{KUN}!\p"
.string "Have you had the chance to climb\n"
.string "MT. PYRE?\p"
.string "The place is a memorial to POKéMON\n"
@@ -2669,7 +2669,7 @@ gText_Scott_Pokenav_2B5323:: @ 2B5323
.string "should climb to the top of once.$"
gText_Scott_Pokenav_2B53DB:: @ 2B53DB
- .string "SCOTT: Hi, {PLAYER}{STRING 5}!\p"
+ .string "SCOTT: Hi, {PLAYER}{KUN}!\p"
.string "I've been hearing about these odd\n"
.string "gangs being a nuisance.\p"
.string "TEAM MAGMA and TEAM AQUA,\n"
@@ -2679,7 +2679,7 @@ gText_Scott_Pokenav_2B53DB:: @ 2B53DB
.string "…But if they're thugs…$"
gText_Scott_Pokenav_2B54A5:: @ 2B54A5
- .string "SCOTT: Oh, hi, {PLAYER}{STRING 5}.\p"
+ .string "SCOTT: Oh, hi, {PLAYER}{KUN}.\p"
.string "Might there be tough TRAINERS\n"
.string "at the bottom of the sea?\p"
.string "I can't go check for myself.\n"
@@ -2687,7 +2687,7 @@ gText_Scott_Pokenav_2B54A5:: @ 2B54A5
.string "And I don't raise POKéMON…$"
gText_Scott_Pokenav_2B5541:: @ 2B5541
- .string "SCOTT: Hi, hi, {PLAYER}{STRING 5}!\p"
+ .string "SCOTT: Hi, hi, {PLAYER}{KUN}!\p"
.string "You know that you can challenge\n"
.string "the POKéMON LEAGUE when you've\l"
.string "collected all the GYM BADGES?\p"
@@ -2774,7 +2774,7 @@ gText_Norman_Pokenav_2B5B5E:: @ 82B5B5E
.string "How much higher will you soar?$"
gText_Steven_Pokenav_2B5B95:: @ 82B5B95
- .string "STEVEN: Hi, {PLAYER}{STRING 5}!\p"
+ .string "STEVEN: Hi, {PLAYER}{KUN}!\p"
.string "Have you been to MAUVILLE\n"
.string "already?\p"
.string "You should visit the BIKE SHOP\n"
@@ -2785,14 +2785,14 @@ gText_Steven_Pokenav_2B5B95:: @ 82B5B95
.string "there.$"
gText_Steven_Pokenav_2B5C53:: @ 82B5C53
- .string "STEVEN: Hi, {PLAYER}{STRING 5}!\p"
+ .string "STEVEN: Hi, {PLAYER}{KUN}!\p"
.string "I've met a lot of different\n"
.string "TRAINERS so far.\p"
.string "But you're one of a kind.\n"
.string "You're not like anyone else.$"
gText_Steven_Pokenav_2B5CC9:: @ 82B5CC9
- .string "STEVEN: Hi, {PLAYER}{STRING 5}!\p"
+ .string "STEVEN: Hi, {PLAYER}{KUN}!\p"
.string "When you're on an adventure with\n"
.string "your POKéMON, what do you think?\p"
.string "Do you consider them to be strong\n"
@@ -2804,7 +2804,7 @@ gText_Steven_Pokenav_2B5CC9:: @ 82B5CC9
gText_Steven_Pokenav_2B5DB4:: @ 82B5DB4
.string "STEVEN: Hello?\n"
- .string "{PLAYER}{STRING 5}?\p"
+ .string "{PLAYER}{KUN}?\p"
.string "I'm involved in a spot of trouble\n"
.string "at the SPACE CENTER.\p"
.string "I'm sorry, but I can't talk now.\n"
@@ -2812,7 +2812,7 @@ gText_Steven_Pokenav_2B5DB4:: @ 82B5DB4
gText_Steven_Pokenav_2B5E26:: @ 82B5E26
.string "STEVEN: Oh!\n"
- .string "{PLAYER}{STRING 5}!\p"
+ .string "{PLAYER}{KUN}!\p"
.string "There's no need to talk.\n"
.string "It's past time for talking.\p"
.string "You have to believe in yourself\n"
@@ -2824,7 +2824,7 @@ gText_Steven_Pokenav_2B5EA2:: @ 82B5EA2
.string "the call…$"
gText_Steven_Pokenav_2B5ED9:: @ 82B5ED9
- .string "STEVEN: {PLAYER}{STRING 5}… Congratulations\n"
+ .string "STEVEN: {PLAYER}{KUN}… Congratulations\n"
.string "for entering the HALL OF FAME.\p"
.string "… … … … … …\n"
.string "… … … … … …\p"
@@ -2851,7 +2851,7 @@ Route101_Text_2B603A: @ 82B603A
.string "POKéMON becomes more fun, eh?$"
gText_MrStone_Pokenav_2B60C0:: @ 82B60C0
- .string "MR. STONE: Oh? {PLAYER}{STRING 5}!\p"
+ .string "MR. STONE: Oh? {PLAYER}{KUN}!\p"
.string "Since you called me, the POKéNAV\n"
.string "must be working properly!\p"
.string "Other people will be registered,\n"
@@ -2866,7 +2866,7 @@ gText_MrStone_Pokenav_2B60C0:: @ 82B60C0
.string "See you again!$"
gText_MrStone_Pokenav_2B61E6:: @ 82B61E6
- .string "MR. STONE: Oh? {PLAYER}{STRING 5}!\p"
+ .string "MR. STONE: Oh? {PLAYER}{KUN}!\p"
.string "What's wrong? Have you forgotten\n"
.string "about that little errand of mine?\p"
.string "I need you to deliver my letter\n"
@@ -2878,7 +2878,7 @@ gText_MrStone_Pokenav_2B61E6:: @ 82B61E6
.string "I have to go! Bye-bye!$"
gText_MrStone_Pokenav_2B6302:: @ 82B6302
- .string "MR. STONE: Oh! {PLAYER}{STRING 5}!\p"
+ .string "MR. STONE: Oh! {PLAYER}{KUN}!\p"
.string "Ah, so you've met STEVEN!\n"
.string "I'd better reward you, then!\p"
.string "When you visit RUSTBORO again,\n"
@@ -2886,7 +2886,7 @@ gText_MrStone_Pokenav_2B6302:: @ 82B6302
.string "I'll be waiting for you!$"
gText_MrStone_Pokenav_2B63A0:: @ 82B63A0
- .string "MR. STONE: Oh! {PLAYER}{STRING 5}!\p"
+ .string "MR. STONE: Oh! {PLAYER}{KUN}!\p"
.string "Did you know that DEVON was\n"
.string "digging the RUSTURF TUNNEL?\p"
.string "But we shut down the operation to\n"
@@ -2897,7 +2897,7 @@ gText_MrStone_Pokenav_2B63A0:: @ 82B63A0
.string "own convenience.$"
gText_MrStone_Pokenav_2B64A2:: @ 82B64A2
- .string "MR. STONE: Hello, hello, {PLAYER}{STRING 5}!\p"
+ .string "MR. STONE: Hello, hello, {PLAYER}{KUN}!\p"
.string "I heard from someone in PETALBURG\n"
.string "that you're NORMAN's child!\p"
.string "No wonder you're such a capable\n"
@@ -2935,7 +2935,7 @@ gText_MrStone_Pokenav_2B66B1:: @ 82B66B1
.string "BZZZZ…$"
gText_MrStone_Pokenav_2B6703:: @ 82B6703
- .string "MR. STONE: {PLAYER}{STRING 5}! It's me!\p"
+ .string "MR. STONE: {PLAYER}{KUN}! It's me!\p"
.string "You were apparently involved in all\n"
.string "sorts of things, but I, being busy,\l"
.string "haven't a clue exactly what!\p"
@@ -2946,7 +2946,7 @@ gText_MrStone_Pokenav_2B6703:: @ 82B6703
gText_MrStone_Pokenav_2B67ED:: @ 82B67ED
.string "MR. STONE: … … … … … …\n"
- .string "Is this maybe {PLAYER}{STRING 5}?\p"
+ .string "Is this maybe {PLAYER}{KUN}?\p"
.string "Your voice is so full of confidence,\n"
.string "I didn't recognize you right off!\p"
.string "Hm! You must come visit us at DEVON\n"
diff --git a/data/unknown_jp_62609C.bin b/data/unknown_jp_62609C.bin
deleted file mode 100644
index 1394e7aa8..000000000
--- a/data/unknown_jp_62609C.bin
+++ /dev/null
Binary files differ
diff --git a/include/battle.h b/include/battle.h
index 878a024b4..f8c685fb0 100644
--- a/include/battle.h
+++ b/include/battle.h
@@ -37,7 +37,6 @@
#define B_ACTION_NONE 0xFF
#define MAX_TRAINER_ITEMS 4
-#define MAX_MON_MOVES 4
// array entries for battle communication
#define MULTIUSE_STATE 0x0
@@ -180,19 +179,19 @@ struct AI_ThinkingStruct
u8 aiState;
u8 movesetIndex;
u16 moveConsidered;
- s8 score[4];
+ s8 score[MAX_MON_MOVES];
u32 funcResult;
u32 aiFlags;
u8 aiAction;
u8 aiLogicId;
u8 filler12[6];
- u8 simulatedRNG[4];
+ u8 simulatedRNG[MAX_MON_MOVES];
};
struct UsedMoves
{
- u16 moves[MAX_BATTLERS_COUNT];
- u16 unknown[MAX_BATTLERS_COUNT];
+ u16 moves[MAX_MON_MOVES];
+ u16 unknown[MAX_MON_MOVES];
};
struct BattleHistory
diff --git a/include/battle_controllers.h b/include/battle_controllers.h
index 9449f1986..365229fda 100644
--- a/include/battle_controllers.h
+++ b/include/battle_controllers.h
@@ -97,16 +97,16 @@ struct HpAndStatus
struct MovePpInfo
{
- u16 moves[4];
- u8 pp[4];
+ u16 moves[MAX_MON_MOVES];
+ u8 pp[MAX_MON_MOVES];
u8 ppBonuses;
};
struct ChooseMoveStruct
{
- u16 moves[4];
- u8 currentPp[4];
- u8 maxPp[4];
+ u16 moves[MAX_MON_MOVES];
+ u8 currentPp[MAX_MON_MOVES];
+ u8 maxPp[MAX_MON_MOVES];
u16 species;
u8 monType1;
u8 monType2;
diff --git a/include/battle_tower.h b/include/battle_tower.h
index 12d6d2e9e..8bc6e6554 100644
--- a/include/battle_tower.h
+++ b/include/battle_tower.h
@@ -7,7 +7,7 @@ struct RSBattleTowerRecord
/*0x01*/ u8 facilityClass;
/*0x02*/ u16 winStreak;
/*0x04*/ u8 name[PLAYER_NAME_LENGTH + 1];
- /*0x0C*/ u8 trainerId[4];
+ /*0x0C*/ u8 trainerId[TRAINER_ID_LENGTH];
/*0x10*/ u16 greeting[6];
/*0x1C*/ struct BattleTowerPokemon party[3];
/*0xA0*/ u32 checksum;
@@ -27,7 +27,7 @@ struct BattleFrontierTrainer
struct FacilityMon
{
u16 species;
- u16 moves[4];
+ u16 moves[MAX_MON_MOVES];
u8 itemTableId;
u8 evSpread;
u8 nature;
diff --git a/include/berry.h b/include/berry.h
index 9ff18e198..ebe1e9a38 100644
--- a/include/berry.h
+++ b/include/berry.h
@@ -1,39 +1,6 @@
#ifndef GUARD_BERRY_H
#define GUARD_BERRY_H
-#define BERRY_NONE 0
-
-enum
-{
- BERRY_FIRMNESS_UNKNOWN,
- BERRY_FIRMNESS_VERY_SOFT,
- BERRY_FIRMNESS_SOFT,
- BERRY_FIRMNESS_HARD,
- BERRY_FIRMNESS_VERY_HARD,
- BERRY_FIRMNESS_SUPER_HARD,
-};
-
-enum
-{
- FLAVOR_SPICY,
- FLAVOR_DRY,
- FLAVOR_SWEET,
- FLAVOR_BITTER,
- FLAVOR_SOUR,
- FLAVOR_COUNT
-};
-
-enum
-{
- BERRY_STAGE_NO_BERRY, // there is no tree planted and the soil is completely flat.
- BERRY_STAGE_PLANTED,
- BERRY_STAGE_SPROUTED,
- BERRY_STAGE_TALLER,
- BERRY_STAGE_FLOWERING,
- BERRY_STAGE_BERRIES,
- BERRY_STAGE_SPARKLING = 0xFF,
-};
-
void ClearEnigmaBerries(void);
void SetEnigmaBerry(u8 *src);
bool32 IsEnigmaBerryValid(void);
diff --git a/include/constants/battle_frontier.h b/include/constants/battle_frontier.h
index 1224c0f31..d287dd2db 100644
--- a/include/constants/battle_frontier.h
+++ b/include/constants/battle_frontier.h
@@ -1,6 +1,8 @@
#ifndef GUARD_CONSTANTS_BATTLE_FRONTIER_H
#define GUARD_CONSTANTS_BATTLE_FRONTIER_H
+#define FRONTIER_CHALLENGE(facility, mode) ((facility << 8) + mode)
+
// Battle Frontier facility ids.
#define FRONTIER_FACILITY_TOWER 0
#define FRONTIER_FACILITY_DOME 1
@@ -41,6 +43,36 @@
#define SPECIAL_BATTLE_PIKE_DOUBLE 9
#define SPECIAL_BATTLE_PYRAMID 10
+#define MAX_BATTLE_FRONTIER_POINTS 9999
+
+// Frontier Maniac
+#define FRONTIER_MANIAC_BATTLE_TOWER_SINGLES 0
+#define FRONTIER_MANIAC_BATTLE_TOWER_DOUBLES 1
+#define FRONTIER_MANIAC_BATTLE_TOWER_MULTIS 2
+#define FRONTIER_MANIAC_BATTLE_TOWER_LINK_MULTIS 3
+#define FRONTIER_MANIAC_BATTLE_DOME 4
+#define FRONTIER_MANIAC_BATTLE_FACTORY 5
+#define FRONTIER_MANIAC_BATTLE_PALACE 6
+#define FRONTIER_MANIAC_BATTLE_ARENA 7
+#define FRONTIER_MANIAC_BATTLE_PIKE 8
+#define FRONTIER_MANIAC_BATTLE_PYRAMID 9
+#define FRONTIER_MANIAC_FACILITY_COUNT 10
+
+#define FRONTIER_MANIAC_MESSAGE_COUNT 3
+
+// Frontier Gambler
+#define FRONTIER_GAMBLER_WAITING 0
+#define FRONTIER_GAMBLER_PLACED_BET 1
+#define FRONTIER_GAMBLER_WON 2
+#define FRONTIER_GAMBLER_LOST 3
+
+#define FRONTIER_GAMBLER_BET_5 0
+#define FRONTIER_GAMBLER_BET_10 1
+#define FRONTIER_GAMBLER_BET_15 2
+#define FRONTIER_GAMBLER_BET_CANCEL 3
+
+#define FRONTIER_GAMBLER_CHALLENGE_COUNT 12
+
// For 'ShowFacilityResultsWindow' function which is a part of the 'CallFrontierUtilFunc' special.
#define RESULTS_LINK_CONTEST 7
diff --git a/include/constants/berry.h b/include/constants/berry.h
new file mode 100644
index 000000000..d413b9947
--- /dev/null
+++ b/include/constants/berry.h
@@ -0,0 +1,28 @@
+#ifndef GUARD_CONSTANTS_BERRY_H
+#define GUARD_CONSTANTS_BERRY_H
+
+#define BERRY_NONE 0
+
+#define BERRY_FIRMNESS_UNKNOWN 0
+#define BERRY_FIRMNESS_VERY_SOFT 1
+#define BERRY_FIRMNESS_SOFT 2
+#define BERRY_FIRMNESS_HARD 3
+#define BERRY_FIRMNESS_VERY_HARD 4
+#define BERRY_FIRMNESS_SUPER_HARD 5
+
+#define FLAVOR_SPICY 0
+#define FLAVOR_DRY 1
+#define FLAVOR_SWEET 2
+#define FLAVOR_BITTER 3
+#define FLAVOR_SOUR 4
+#define FLAVOR_COUNT 5
+
+#define BERRY_STAGE_NO_BERRY 0 // there is no tree planted and the soil is completely flat.
+#define BERRY_STAGE_PLANTED 1
+#define BERRY_STAGE_SPROUTED 2
+#define BERRY_STAGE_TALLER 3
+#define BERRY_STAGE_FLOWERING 4
+#define BERRY_STAGE_BERRIES 5
+#define BERRY_STAGE_SPARKLING 255
+
+#endif // GUARD_CONSTANTS_BERRY_H
diff --git a/include/constants/contest.h b/include/constants/contest.h
new file mode 100644
index 000000000..d3296222b
--- /dev/null
+++ b/include/constants/contest.h
@@ -0,0 +1,19 @@
+#ifndef GUARD_CONSTANTS_CONTEST_H
+#define GUARD_CONSTANTS_CONTEST_H
+
+#define CONTESTANT_COUNT 4
+#define APPLAUSE_METER_SIZE 5
+#define CONTEST_TURN_COUNT 5
+
+#define LINK_CONTEST_FLAG_IS_LINK (1 << 0)
+#define LINK_CONTEST_FLAG_IS_WIRELESS (1 << 1)
+#define LINK_CONTEST_FLAG_HAS_RS_PLAYER (1 << 2)
+
+#define CONTEST_CATEGORY_COOL 0
+#define CONTEST_CATEGORY_BEAUTY 1
+#define CONTEST_CATEGORY_CUTE 2
+#define CONTEST_CATEGORY_SMART 3
+#define CONTEST_CATEGORY_TOUGH 4
+#define CONTEST_CATEGORIES_COUNT 5
+
+#endif // GUARD_CONSTANTS_CONTEST_H
diff --git a/include/constants/daycare.h b/include/constants/daycare.h
new file mode 100644
index 000000000..103f920f2
--- /dev/null
+++ b/include/constants/daycare.h
@@ -0,0 +1,27 @@
+#ifndef GUARD_DAYCARE_CONSTANTS_H
+#define GUARD_DAYCARE_CONSTANTS_H
+
+// Parent compatability scores
+#define PARENTS_INCOMPATIBLE 0
+#define PARENTS_LOW_COMPATIBILITY 20
+#define PARENTS_MED_COMPATABILITY 50
+#define PARENTS_MAX_COMPATABILITY 70
+
+// Daycare state
+#define DAYCARE_NO_MONS 0
+#define DAYCARE_EGG_WAITING 1
+#define DAYCARE_ONE_MON 2
+#define DAYCARE_TWO_MONS 3
+
+#define INHERITED_IV_COUNT 3
+#define EGG_HATCH_LEVEL 5
+#define EGG_GENDER_MALE 0x8000 // used to create a male egg from a female-only parent species (e.g. Nidoran)
+
+#define DAYCARE_LEVEL_MENU_EXIT 5
+#define DAYCARE_EXITED_LEVEL_MENU 2 // would be redundant with above if GF had used the same value
+
+// Array buffers
+#define EGG_MOVES_ARRAY_COUNT 10
+#define EGG_LVL_UP_MOVES_ARRAY_COUNT 50
+
+#endif //GUARD_DAYCARE_CONSTANTS_H
diff --git a/include/constants/field_specials.h b/include/constants/field_specials.h
new file mode 100644
index 000000000..5ec38d1d4
--- /dev/null
+++ b/include/constants/field_specials.h
@@ -0,0 +1,52 @@
+#ifndef GUARD_CONSTANTS_FIELD_SPECIALS_H
+#define GUARD_CONSTANTS_FIELD_SPECIALS_H
+
+// PC Locations
+#define PC_LOCATION_OTHER 0
+#define PC_LOCATION_BRENDANS_HOUSE 1
+#define PC_LOCATION_MAYS_HOUSE 2
+
+// SS Tidal Locations
+#define SS_TIDAL_LOCATION_OTHER 0
+#define SS_TIDAL_LOCATION_SLATEPORT 1
+#define SS_TIDAL_LOCATION_LILYCOVE 2
+#define SS_TIDAL_LOCATION_ROUTE124 3
+#define SS_TIDAL_LOCATION_ROUTE131 4
+
+// Scrollable Multichoice Menus
+#define SCROLL_MULTI_NONE 0
+#define SCROLL_MULTI_GLASS_WORKSHOP_VENDOR 1
+#define SCROLL_MULTI_POKEMON_FAN_CLUB_RATER 2
+#define SCROLL_MULTI_BF_EXCHANGE_CORNER_DECOR_VENDOR_1 3
+#define SCROLL_MULTI_BF_EXCHANGE_CORNER_DECOR_VENDOR_2 4
+#define SCROLL_MULTI_BF_EXCHANGE_CORNER_VITAMIN_VENDOR 5
+#define SCROLL_MULTI_BF_EXCHANGE_CORNER_HOLD_ITEM_VENDOR 6
+#define SCROLL_MULTI_BERRY_POWDER_VENDOR 7
+#define SCROLL_MULTI_BF_RECEPTIONIST 8
+#define SCROLL_MULTI_BF_MOVE_TUTOR_1 9
+#define SCROLL_MULTI_BF_MOVE_TUTOR_2 10
+#define SCROLL_MULTI_SS_TIDAL_DESTINATION 11
+#define SCROLL_MULTI_BATTLE_TENT_RULES 12
+
+#define MAX_SCROLL_MULTI_ON_SCREEN 6
+#define MAX_SCROLL_MULTI_LENGTH 16
+
+// Dept Store Floor Numbers
+#define DEPT_STORE_FLOORNUM_B4F 0
+#define DEPT_STORE_FLOORNUM_B3F 1
+#define DEPT_STORE_FLOORNUM_B2F 2
+#define DEPT_STORE_FLOORNUM_B1F 3
+#define DEPT_STORE_FLOORNUM_1F 4
+#define DEPT_STORE_FLOORNUM_2F 5
+#define DEPT_STORE_FLOORNUM_3F 6
+#define DEPT_STORE_FLOORNUM_4F 7
+#define DEPT_STORE_FLOORNUM_5F 8
+#define DEPT_STORE_FLOORNUM_6F 9
+#define DEPT_STORE_FLOORNUM_7F 10
+#define DEPT_STORE_FLOORNUM_8F 11
+#define DEPT_STORE_FLOORNUM_9F 12
+#define DEPT_STORE_FLOORNUM_10F 13
+#define DEPT_STORE_FLOORNUM_11F 14
+#define DEPT_STORE_FLOORNUM_ROOFTOP 15
+
+#endif // GUARD_CONSTANTS_FIELD_SPECIALS_H
diff --git a/include/constants/flags.h b/include/constants/flags.h
index 7aa5c3ed3..4679e953c 100644
--- a/include/constants/flags.h
+++ b/include/constants/flags.h
@@ -701,7 +701,7 @@
#define FLAG_HIDE_LITTLEROOT_TOWN_BRENDANS_HOUSE_BRENDAN 0x2E9
#define FLAG_HIDE_LITTLEROOT_TOWN_MAYS_HOUSE_BRENDAN 0x2EA
#define FLAG_HIDE_SAFARI_ZONE_SOUTH_EAST_EXPANSION 0x2EB
-#define FLAG_HIDE_LILYCOVE_HARBOR_EON_TICKET_TAKER 0x2EC
+#define FLAG_HIDE_LILYCOVE_HARBOR_EVENT_TICKET_TAKER 0x2EC
#define FLAG_HIDE_SLATEPORT_CITY_SCOTT 0x2ED
#define FLAG_HIDE_ROUTE_101_ZIGZAGOON 0x2EE
#define FLAG_HIDE_VICTORY_ROAD_EXIT_WALLY 0x2EF
@@ -1400,7 +1400,7 @@
#define FLAG_ENABLE_SHIP_BIRTH_ISLAND (SYSTEM_FLAGS + 0x75)
#define FLAG_ENABLE_SHIP_FARAWAY_ISLAND (SYSTEM_FLAGS + 0x76)
-#define FLAG_SYS_STORAGE_UNKNOWN_FLAG (SYSTEM_FLAGS + 0x77)
+#define FLAG_SHOWN_BOX_WAS_FULL_MESSAGE (SYSTEM_FLAGS + 0x77)
#define FLAG_ARRIVED_ON_FARAWAY_ISLAND (SYSTEM_FLAGS + 0x78)
#define FLAG_ARRIVED_AT_MARINE_CAVE_EMERGE_SPOT (SYSTEM_FLAGS + 0x79)
diff --git a/include/constants/global.h b/include/constants/global.h
index ff28d6a4b..7e0b5cfa4 100644
--- a/include/constants/global.h
+++ b/include/constants/global.h
@@ -50,6 +50,10 @@
#define PYRAMID_BAG_ITEMS_COUNT 10
#define HALL_FACILITIES_COUNT 9 // 7 facilities for single mode + tower double mode + tower multi mode.
+#define TRAINER_ID_LENGTH 4
+#define PARTY_SIZE 6
+#define MAX_MON_MOVES 4
+
// string lengths
#define ITEM_NAME_LENGTH 14
#define POKEMON_NAME_LENGTH 10
@@ -59,6 +63,7 @@
#define MALE 0
#define FEMALE 1
+#define GENDER_COUNT 2
#define OPTIONS_BUTTON_MODE_NORMAL 0
#define OPTIONS_BUTTON_MODE_LR 1
@@ -74,4 +79,14 @@
#define OPTIONS_BATTLE_STYLE_SHIFT 0
#define OPTIONS_BATTLE_STYLE_SET 1
+#define DIR_NONE 0
+#define DIR_SOUTH 1
+#define DIR_NORTH 2
+#define DIR_WEST 3
+#define DIR_EAST 4
+#define DIR_SOUTHWEST 5
+#define DIR_SOUTHEAST 6
+#define DIR_NORTHWEST 7
+#define DIR_NORTHEAST 8
+
#endif // GUARD_CONSTANTS_GLOBAL_H
diff --git a/include/constants/item.h b/include/constants/item.h
new file mode 100644
index 000000000..a5c34418d
--- /dev/null
+++ b/include/constants/item.h
@@ -0,0 +1,20 @@
+#ifndef GUARD_ITEM_CONSTANTS_H
+#define GUARD_ITEM_CONSTANTS_H
+
+// These constants are used in gItems
+#define POCKET_NONE 0
+#define POCKET_ITEMS 1
+#define POCKET_POKE_BALLS 2
+#define POCKET_TM_HM 3
+#define POCKET_BERRIES 4
+#define POCKET_KEY_ITEMS 5
+
+#define ITEMS_POCKET 0
+#define BALLS_POCKET 1
+#define TMHM_POCKET 2
+#define BERRIES_POCKET 3
+#define KEYITEMS_POCKET 4
+#define POCKETS_COUNT 5
+
+
+#endif // GUARD_ITEM_CONSTANTS_H
diff --git a/include/constants/lilycove_lady.h b/include/constants/lilycove_lady.h
new file mode 100644
index 000000000..01f60ccf4
--- /dev/null
+++ b/include/constants/lilycove_lady.h
@@ -0,0 +1,26 @@
+#ifndef GUARD_LILYCOVE_LADY_CONSTANTS_H
+#define GUARD_LILYCOVE_LADY_CONSTANTS_H
+
+#define LILYCOVE_LADY_QUIZ 0
+#define LILYCOVE_LADY_FAVOR 1
+#define LILYCOVE_LADY_CONTEST 2
+#define LILYCOVE_LADY_COUNT 3
+
+#define LILYCOVE_LADY_STATE_READY 0
+#define LILYCOVE_LADY_STATE_COMPLETED 1
+#define LILYCOVE_LADY_STATE_PRIZE 2
+
+#define LILYCOVE_LADY_GIFT_THRESHOLD 5
+
+#define QUIZ_AUTHOR_PLAYER 0
+#define QUIZ_AUTHOR_OTHER_PLAYER 1
+#define QUIZ_AUTHOR_LADY 2
+
+// Would be redundant with the above set if GF hadn't mixed the order
+#define QUIZ_AUTHOR_NAME_LADY 0
+#define QUIZ_AUTHOR_NAME_PLAYER 1
+#define QUIZ_AUTHOR_NAME_OTHER_PLAYER 2
+
+#define QUIZ_QUESTION_LEN 9
+
+#endif
diff --git a/include/constants/map_groups.h b/include/constants/map_groups.h
index dc2ac2f32..6a3276b44 100755
--- a/include/constants/map_groups.h
+++ b/include/constants/map_groups.h
@@ -398,67 +398,67 @@
#define MAP_METEOR_FALLS_STEVENS_CAVE (107 | (24 << 8))
// Map Group 25
-#define MAP_SECRET_BASE_RED_CAVE1 (0 | (25 << 8))
-#define MAP_SECRET_BASE_BROWN_CAVE1 (1 | (25 << 8))
-#define MAP_SECRET_BASE_BLUE_CAVE1 (2 | (25 << 8))
-#define MAP_SECRET_BASE_YELLOW_CAVE1 (3 | (25 << 8))
-#define MAP_SECRET_BASE_TREE1 (4 | (25 << 8))
-#define MAP_SECRET_BASE_SHRUB1 (5 | (25 << 8))
-#define MAP_SECRET_BASE_RED_CAVE2 (6 | (25 << 8))
-#define MAP_SECRET_BASE_BROWN_CAVE2 (7 | (25 << 8))
-#define MAP_SECRET_BASE_BLUE_CAVE2 (8 | (25 << 8))
-#define MAP_SECRET_BASE_YELLOW_CAVE2 (9 | (25 << 8))
-#define MAP_SECRET_BASE_TREE2 (10 | (25 << 8))
-#define MAP_SECRET_BASE_SHRUB2 (11 | (25 << 8))
-#define MAP_SECRET_BASE_RED_CAVE3 (12 | (25 << 8))
-#define MAP_SECRET_BASE_BROWN_CAVE3 (13 | (25 << 8))
-#define MAP_SECRET_BASE_BLUE_CAVE3 (14 | (25 << 8))
-#define MAP_SECRET_BASE_YELLOW_CAVE3 (15 | (25 << 8))
-#define MAP_SECRET_BASE_TREE3 (16 | (25 << 8))
-#define MAP_SECRET_BASE_SHRUB3 (17 | (25 << 8))
-#define MAP_SECRET_BASE_RED_CAVE4 (18 | (25 << 8))
-#define MAP_SECRET_BASE_BROWN_CAVE4 (19 | (25 << 8))
-#define MAP_SECRET_BASE_BLUE_CAVE4 (20 | (25 << 8))
-#define MAP_SECRET_BASE_YELLOW_CAVE4 (21 | (25 << 8))
-#define MAP_SECRET_BASE_TREE4 (22 | (25 << 8))
-#define MAP_SECRET_BASE_SHRUB4 (23 | (25 << 8))
-#define MAP_SINGLE_BATTLE_COLOSSEUM (24 | (25 << 8))
-#define MAP_TRADE_CENTER (25 | (25 << 8))
-#define MAP_RECORD_CORNER (26 | (25 << 8))
-#define MAP_DOUBLE_BATTLE_COLOSSEUM (27 | (25 << 8))
-#define MAP_LINK_CONTEST_ROOM1 (28 | (25 << 8))
-#define MAP_UNKNOWN_MAP_25_29 (29 | (25 << 8))
-#define MAP_UNKNOWN_MAP_25_30 (30 | (25 << 8))
-#define MAP_UNKNOWN_MAP_25_31 (31 | (25 << 8))
-#define MAP_UNKNOWN_MAP_25_32 (32 | (25 << 8))
-#define MAP_UNKNOWN_MAP_25_33 (33 | (25 << 8))
-#define MAP_UNKNOWN_MAP_25_34 (34 | (25 << 8))
-#define MAP_LINK_CONTEST_ROOM2 (35 | (25 << 8))
-#define MAP_LINK_CONTEST_ROOM3 (36 | (25 << 8))
-#define MAP_LINK_CONTEST_ROOM4 (37 | (25 << 8))
-#define MAP_LINK_CONTEST_ROOM5 (38 | (25 << 8))
-#define MAP_LINK_CONTEST_ROOM6 (39 | (25 << 8))
-#define MAP_INSIDE_OF_TRUCK (40 | (25 << 8))
-#define MAP_SS_TIDAL_CORRIDOR (41 | (25 << 8))
-#define MAP_SS_TIDAL_LOWER_DECK (42 | (25 << 8))
-#define MAP_SS_TIDAL_ROOMS (43 | (25 << 8))
-#define MAP_BATTLE_PYRAMID_SQUARE01 (44 | (25 << 8))
-#define MAP_BATTLE_PYRAMID_SQUARE02 (45 | (25 << 8))
-#define MAP_BATTLE_PYRAMID_SQUARE03 (46 | (25 << 8))
-#define MAP_BATTLE_PYRAMID_SQUARE04 (47 | (25 << 8))
-#define MAP_BATTLE_PYRAMID_SQUARE05 (48 | (25 << 8))
-#define MAP_BATTLE_PYRAMID_SQUARE06 (49 | (25 << 8))
-#define MAP_BATTLE_PYRAMID_SQUARE07 (50 | (25 << 8))
-#define MAP_BATTLE_PYRAMID_SQUARE08 (51 | (25 << 8))
-#define MAP_BATTLE_PYRAMID_SQUARE09 (52 | (25 << 8))
-#define MAP_BATTLE_PYRAMID_SQUARE10 (53 | (25 << 8))
-#define MAP_BATTLE_PYRAMID_SQUARE11 (54 | (25 << 8))
-#define MAP_BATTLE_PYRAMID_SQUARE12 (55 | (25 << 8))
-#define MAP_BATTLE_PYRAMID_SQUARE13 (56 | (25 << 8))
-#define MAP_BATTLE_PYRAMID_SQUARE14 (57 | (25 << 8))
-#define MAP_BATTLE_PYRAMID_SQUARE15 (58 | (25 << 8))
-#define MAP_BATTLE_PYRAMID_SQUARE16 (59 | (25 << 8))
-#define MAP_UNION_ROOM (60 | (25 << 8))
+#define MAP_SECRET_BASE_RED_CAVE1 (0 | (25 << 8))
+#define MAP_SECRET_BASE_BROWN_CAVE1 (1 | (25 << 8))
+#define MAP_SECRET_BASE_BLUE_CAVE1 (2 | (25 << 8))
+#define MAP_SECRET_BASE_YELLOW_CAVE1 (3 | (25 << 8))
+#define MAP_SECRET_BASE_TREE1 (4 | (25 << 8))
+#define MAP_SECRET_BASE_SHRUB1 (5 | (25 << 8))
+#define MAP_SECRET_BASE_RED_CAVE2 (6 | (25 << 8))
+#define MAP_SECRET_BASE_BROWN_CAVE2 (7 | (25 << 8))
+#define MAP_SECRET_BASE_BLUE_CAVE2 (8 | (25 << 8))
+#define MAP_SECRET_BASE_YELLOW_CAVE2 (9 | (25 << 8))
+#define MAP_SECRET_BASE_TREE2 (10 | (25 << 8))
+#define MAP_SECRET_BASE_SHRUB2 (11 | (25 << 8))
+#define MAP_SECRET_BASE_RED_CAVE3 (12 | (25 << 8))
+#define MAP_SECRET_BASE_BROWN_CAVE3 (13 | (25 << 8))
+#define MAP_SECRET_BASE_BLUE_CAVE3 (14 | (25 << 8))
+#define MAP_SECRET_BASE_YELLOW_CAVE3 (15 | (25 << 8))
+#define MAP_SECRET_BASE_TREE3 (16 | (25 << 8))
+#define MAP_SECRET_BASE_SHRUB3 (17 | (25 << 8))
+#define MAP_SECRET_BASE_RED_CAVE4 (18 | (25 << 8))
+#define MAP_SECRET_BASE_BROWN_CAVE4 (19 | (25 << 8))
+#define MAP_SECRET_BASE_BLUE_CAVE4 (20 | (25 << 8))
+#define MAP_SECRET_BASE_YELLOW_CAVE4 (21 | (25 << 8))
+#define MAP_SECRET_BASE_TREE4 (22 | (25 << 8))
+#define MAP_SECRET_BASE_SHRUB4 (23 | (25 << 8))
+#define MAP_SINGLE_BATTLE_COLOSSEUM (24 | (25 << 8))
+#define MAP_TRADE_CENTER (25 | (25 << 8))
+#define MAP_RECORD_CORNER (26 | (25 << 8))
+#define MAP_DOUBLE_BATTLE_COLOSSEUM (27 | (25 << 8))
+#define MAP_LINK_CONTEST_ROOM1 (28 | (25 << 8))
+#define MAP_UNKNOWN_LINK_CONTEST_ROOM_25_29 (29 | (25 << 8))
+#define MAP_UNKNOWN_LINK_CONTEST_ROOM_25_30 (30 | (25 << 8))
+#define MAP_UNKNOWN_LINK_CONTEST_ROOM_25_31 (31 | (25 << 8))
+#define MAP_UNKNOWN_LINK_CONTEST_ROOM_25_32 (32 | (25 << 8))
+#define MAP_UNKNOWN_LINK_CONTEST_ROOM_25_33 (33 | (25 << 8))
+#define MAP_UNKNOWN_LINK_CONTEST_ROOM_25_34 (34 | (25 << 8))
+#define MAP_LINK_CONTEST_ROOM2 (35 | (25 << 8))
+#define MAP_LINK_CONTEST_ROOM3 (36 | (25 << 8))
+#define MAP_LINK_CONTEST_ROOM4 (37 | (25 << 8))
+#define MAP_LINK_CONTEST_ROOM5 (38 | (25 << 8))
+#define MAP_LINK_CONTEST_ROOM6 (39 | (25 << 8))
+#define MAP_INSIDE_OF_TRUCK (40 | (25 << 8))
+#define MAP_SS_TIDAL_CORRIDOR (41 | (25 << 8))
+#define MAP_SS_TIDAL_LOWER_DECK (42 | (25 << 8))
+#define MAP_SS_TIDAL_ROOMS (43 | (25 << 8))
+#define MAP_BATTLE_PYRAMID_SQUARE01 (44 | (25 << 8))
+#define MAP_BATTLE_PYRAMID_SQUARE02 (45 | (25 << 8))
+#define MAP_BATTLE_PYRAMID_SQUARE03 (46 | (25 << 8))
+#define MAP_BATTLE_PYRAMID_SQUARE04 (47 | (25 << 8))
+#define MAP_BATTLE_PYRAMID_SQUARE05 (48 | (25 << 8))
+#define MAP_BATTLE_PYRAMID_SQUARE06 (49 | (25 << 8))
+#define MAP_BATTLE_PYRAMID_SQUARE07 (50 | (25 << 8))
+#define MAP_BATTLE_PYRAMID_SQUARE08 (51 | (25 << 8))
+#define MAP_BATTLE_PYRAMID_SQUARE09 (52 | (25 << 8))
+#define MAP_BATTLE_PYRAMID_SQUARE10 (53 | (25 << 8))
+#define MAP_BATTLE_PYRAMID_SQUARE11 (54 | (25 << 8))
+#define MAP_BATTLE_PYRAMID_SQUARE12 (55 | (25 << 8))
+#define MAP_BATTLE_PYRAMID_SQUARE13 (56 | (25 << 8))
+#define MAP_BATTLE_PYRAMID_SQUARE14 (57 | (25 << 8))
+#define MAP_BATTLE_PYRAMID_SQUARE15 (58 | (25 << 8))
+#define MAP_BATTLE_PYRAMID_SQUARE16 (59 | (25 << 8))
+#define MAP_UNION_ROOM (60 | (25 << 8))
// Map Group 26
#define MAP_SAFARI_ZONE_NORTHWEST (0 | (26 << 8))
diff --git a/include/constants/pokemon.h b/include/constants/pokemon.h
index 5d0e562bc..52a4f0254 100644
--- a/include/constants/pokemon.h
+++ b/include/constants/pokemon.h
@@ -2,81 +2,82 @@
#define GUARD_CONSTANTS_POKEMON_H
// Pokemon types
-#define TYPE_NONE 0xFF
-#define TYPE_NORMAL 0x00
-#define TYPE_FIGHTING 0x01
-#define TYPE_FLYING 0x02
-#define TYPE_POISON 0x03
-#define TYPE_GROUND 0x04
-#define TYPE_ROCK 0x05
-#define TYPE_BUG 0x06
-#define TYPE_GHOST 0x07
-#define TYPE_STEEL 0x08
-#define TYPE_MYSTERY 0x09
-#define TYPE_FIRE 0x0a
-#define TYPE_WATER 0x0b
-#define TYPE_GRASS 0x0c
-#define TYPE_ELECTRIC 0x0d
-#define TYPE_PSYCHIC 0x0e
-#define TYPE_ICE 0x0f
-#define TYPE_DRAGON 0x10
-#define TYPE_DARK 0x11
-#define NUMBER_OF_MON_TYPES 0x12
-
+#define TYPE_NONE 255
+#define TYPE_NORMAL 0
+#define TYPE_FIGHTING 1
+#define TYPE_FLYING 2
+#define TYPE_POISON 3
+#define TYPE_GROUND 4
+#define TYPE_ROCK 5
+#define TYPE_BUG 6
+#define TYPE_GHOST 7
+#define TYPE_STEEL 8
+#define TYPE_MYSTERY 9
+#define TYPE_FIRE 10
+#define TYPE_WATER 11
+#define TYPE_GRASS 12
+#define TYPE_ELECTRIC 13
+#define TYPE_PSYCHIC 14
+#define TYPE_ICE 15
+#define TYPE_DRAGON 16
+#define TYPE_DARK 17
+#define NUMBER_OF_MON_TYPES 18
// Pokemon egg groups
-#define EGG_GROUP_NONE 0
-#define EGG_GROUP_MONSTER 1
-#define EGG_GROUP_WATER_1 2
-#define EGG_GROUP_BUG 3
-#define EGG_GROUP_FLYING 4
-#define EGG_GROUP_FIELD 5
-#define EGG_GROUP_FAIRY 6
-#define EGG_GROUP_GRASS 7
-#define EGG_GROUP_HUMAN_LIKE 8
-#define EGG_GROUP_WATER_3 9
-#define EGG_GROUP_MINERAL 10
-#define EGG_GROUP_AMORPHOUS 11
-#define EGG_GROUP_WATER_2 12
-#define EGG_GROUP_DITTO 13
-#define EGG_GROUP_DRAGON 14
-#define EGG_GROUP_UNDISCOVERED 15
+#define EGG_GROUP_NONE 0
+#define EGG_GROUP_MONSTER 1
+#define EGG_GROUP_WATER_1 2
+#define EGG_GROUP_BUG 3
+#define EGG_GROUP_FLYING 4
+#define EGG_GROUP_FIELD 5
+#define EGG_GROUP_FAIRY 6
+#define EGG_GROUP_GRASS 7
+#define EGG_GROUP_HUMAN_LIKE 8
+#define EGG_GROUP_WATER_3 9
+#define EGG_GROUP_MINERAL 10
+#define EGG_GROUP_AMORPHOUS 11
+#define EGG_GROUP_WATER_2 12
+#define EGG_GROUP_DITTO 13
+#define EGG_GROUP_DRAGON 14
+#define EGG_GROUP_UNDISCOVERED 15
+
+#define EGG_GROUPS_PER_MON 2
// Pokemon natures
-#define NATURE_HARDY 0
-#define NATURE_LONELY 1
-#define NATURE_BRAVE 2
-#define NATURE_ADAMANT 3
-#define NATURE_NAUGHTY 4
-#define NATURE_BOLD 5
-#define NATURE_DOCILE 6
-#define NATURE_RELAXED 7
-#define NATURE_IMPISH 8
-#define NATURE_LAX 9
-#define NATURE_TIMID 10
-#define NATURE_HASTY 11
-#define NATURE_SERIOUS 12
-#define NATURE_JOLLY 13
-#define NATURE_NAIVE 14
-#define NATURE_MODEST 15
-#define NATURE_MILD 16
-#define NATURE_QUIET 17
-#define NATURE_BASHFUL 18
-#define NATURE_RASH 19
-#define NATURE_CALM 20
-#define NATURE_GENTLE 21
-#define NATURE_SASSY 22
-#define NATURE_CAREFUL 23
-#define NATURE_QUIRKY 24
+#define NATURE_HARDY 0
+#define NATURE_LONELY 1
+#define NATURE_BRAVE 2
+#define NATURE_ADAMANT 3
+#define NATURE_NAUGHTY 4
+#define NATURE_BOLD 5
+#define NATURE_DOCILE 6
+#define NATURE_RELAXED 7
+#define NATURE_IMPISH 8
+#define NATURE_LAX 9
+#define NATURE_TIMID 10
+#define NATURE_HASTY 11
+#define NATURE_SERIOUS 12
+#define NATURE_JOLLY 13
+#define NATURE_NAIVE 14
+#define NATURE_MODEST 15
+#define NATURE_MILD 16
+#define NATURE_QUIET 17
+#define NATURE_BASHFUL 18
+#define NATURE_RASH 19
+#define NATURE_CALM 20
+#define NATURE_GENTLE 21
+#define NATURE_SASSY 22
+#define NATURE_CAREFUL 23
+#define NATURE_QUIRKY 24
// Pokemon Stats
-#define STAT_HP 0
-#define STAT_ATK 1
-#define STAT_DEF 2
-#define STAT_SPEED 3
-#define STAT_SPATK 4
-#define STAT_SPDEF 5
-#define STAT_ACC 6 // Only in battles.
+#define STAT_HP 0
+#define STAT_ATK 1
+#define STAT_DEF 2
+#define STAT_SPEED 3
+#define STAT_SPATK 4
+#define STAT_SPDEF 5
+#define STAT_ACC 6 // Only in battles.
#define STAT_EVASION 7 // Only in battles.
#define NUM_STATS 6
@@ -85,4 +86,187 @@
// Shiny odds
#define SHINY_ODDS 8 // Actual probability is SHINY_ODDS/65536
+// Flags for Get(Box)MonData / Set(Box)MonData
+#define MON_DATA_PERSONALITY 0
+#define MON_DATA_OT_ID 1
+#define MON_DATA_NICKNAME 2
+#define MON_DATA_LANGUAGE 3
+#define MON_DATA_SANITY_IS_BAD_EGG 4
+#define MON_DATA_SANITY_HAS_SPECIES 5
+#define MON_DATA_SANITY_IS_EGG 6
+#define MON_DATA_OT_NAME 7
+#define MON_DATA_MARKINGS 8
+#define MON_DATA_CHECKSUM 9
+#define MON_DATA_ENCRYPT_SEPARATOR 10
+#define MON_DATA_SPECIES 11
+#define MON_DATA_HELD_ITEM 12
+#define MON_DATA_MOVE1 13
+#define MON_DATA_MOVE2 14
+#define MON_DATA_MOVE3 15
+#define MON_DATA_MOVE4 16
+#define MON_DATA_PP1 17
+#define MON_DATA_PP2 18
+#define MON_DATA_PP3 19
+#define MON_DATA_PP4 20
+#define MON_DATA_PP_BONUSES 21
+#define MON_DATA_COOL 22
+#define MON_DATA_BEAUTY 23
+#define MON_DATA_CUTE 24
+#define MON_DATA_EXP 25
+#define MON_DATA_HP_EV 26
+#define MON_DATA_ATK_EV 27
+#define MON_DATA_DEF_EV 28
+#define MON_DATA_SPEED_EV 29
+#define MON_DATA_SPATK_EV 30
+#define MON_DATA_SPDEF_EV 31
+#define MON_DATA_FRIENDSHIP 32
+#define MON_DATA_SMART 33
+#define MON_DATA_POKERUS 34
+#define MON_DATA_MET_LOCATION 35
+#define MON_DATA_MET_LEVEL 36
+#define MON_DATA_MET_GAME 37
+#define MON_DATA_POKEBALL 38
+#define MON_DATA_HP_IV 39
+#define MON_DATA_ATK_IV 40
+#define MON_DATA_DEF_IV 41
+#define MON_DATA_SPEED_IV 42
+#define MON_DATA_SPATK_IV 43
+#define MON_DATA_SPDEF_IV 44
+#define MON_DATA_IS_EGG 45
+#define MON_DATA_ABILITY_NUM 46
+#define MON_DATA_TOUGH 47
+#define MON_DATA_SHEEN 48
+#define MON_DATA_OT_GENDER 49
+#define MON_DATA_COOL_RIBBON 50
+#define MON_DATA_BEAUTY_RIBBON 51
+#define MON_DATA_CUTE_RIBBON 52
+#define MON_DATA_SMART_RIBBON 53
+#define MON_DATA_TOUGH_RIBBON 54
+#define MON_DATA_STATUS 55
+#define MON_DATA_LEVEL 56
+#define MON_DATA_HP 57
+#define MON_DATA_MAX_HP 58
+#define MON_DATA_ATK 59
+#define MON_DATA_DEF 60
+#define MON_DATA_SPEED 61
+#define MON_DATA_SPATK 62
+#define MON_DATA_SPDEF 63
+#define MON_DATA_MAIL 64
+#define MON_DATA_SPECIES2 65
+#define MON_DATA_IVS 66
+#define MON_DATA_CHAMPION_RIBBON 67
+#define MON_DATA_WINNING_RIBBON 68
+#define MON_DATA_VICTORY_RIBBON 69
+#define MON_DATA_ARTIST_RIBBON 70
+#define MON_DATA_EFFORT_RIBBON 71
+#define MON_DATA_GIFT_RIBBON_1 72
+#define MON_DATA_GIFT_RIBBON_2 73
+#define MON_DATA_GIFT_RIBBON_3 74
+#define MON_DATA_GIFT_RIBBON_4 75
+#define MON_DATA_GIFT_RIBBON_5 76
+#define MON_DATA_GIFT_RIBBON_6 77
+#define MON_DATA_GIFT_RIBBON_7 78
+#define MON_DATA_FATEFUL_ENCOUNTER 79
+#define MON_DATA_OBEDIENCE 80
+#define MON_DATA_KNOWN_MOVES 81
+#define MON_DATA_RIBBON_COUNT 82
+#define MON_DATA_RIBBONS 83
+#define MON_DATA_ATK2 84
+#define MON_DATA_DEF2 85
+#define MON_DATA_SPEED2 86
+#define MON_DATA_SPATK2 87
+#define MON_DATA_SPDEF2 88
+
+#define MAX_LEVEL 100
+
+#define OT_ID_PLAYER_ID 0
+#define OT_ID_PRESET 1
+#define OT_ID_RANDOM_NO_SHINY 2
+
+
+#define MON_GIVEN_TO_PARTY 0
+#define MON_GIVEN_TO_PC 1
+#define MON_CANT_GIVE 2
+
+#define PLAYER_HAS_TWO_USABLE_MONS 0
+#define PLAYER_HAS_ONE_MON 1
+#define PLAYER_HAS_ONE_USABLE_MON 2
+
+#define MON_MALE 0x00
+#define MON_FEMALE 0xFE
+#define MON_GENDERLESS 0xFF
+
+#define FRIENDSHIP_EVENT_GROW_LEVEL 0
+#define FRIENDSHIP_EVENT_VITAMIN 1 // unused
+#define FRIENDSHIP_EVENT_BATTLE_ITEM 2 // unused
+#define FRIENDSHIP_EVENT_LEAGUE_BATTLE 3
+#define FRIENDSHIP_EVENT_LEARN_TMHM 4
+#define FRIENDSHIP_EVENT_WALKING 5
+#define FRIENDSHIP_EVENT_FAINT_SMALL 6
+#define FRIENDSHIP_EVENT_FAINT_OUTSIDE_BATTLE 7
+#define FRIENDSHIP_EVENT_FAINT_LARGE 8
+
+#define STATUS_PRIMARY_NONE 0
+#define STATUS_PRIMARY_POISON 1
+#define STATUS_PRIMARY_PARALYSIS 2
+#define STATUS_PRIMARY_SLEEP 3
+#define STATUS_PRIMARY_FREEZE 4
+#define STATUS_PRIMARY_BURN 5
+#define STATUS_PRIMARY_POKERUS 6
+#define STATUS_PRIMARY_FAINTED 7
+
+#define MAX_TOTAL_EVS 510
+#define EV_ITEM_RAISE_LIMIT 100
+
+#define UNOWN_FORM_COUNT 28
+
+// Battle move flags
+#define FLAG_MAKES_CONTACT 0x1
+#define FLAG_PROTECT_AFFECTED 0x2
+#define FLAG_MAGICCOAT_AFFECTED 0x4
+#define FLAG_SNATCH_AFFECTED 0x8
+#define FLAG_MIRROR_MOVE_AFFECTED 0x10
+#define FLAG_KINGSROCK_AFFECTED 0x20
+
+// Growth rates
+#define GROWTH_MEDIUM_FAST 0
+#define GROWTH_ERRATIC 1
+#define GROWTH_FLUCTUATING 2
+#define GROWTH_MEDIUM_SLOW 3
+#define GROWTH_FAST 4
+#define GROWTH_SLOW 5
+
+// Body colors for pokedex search
+#define BODY_COLOR_RED 0
+#define BODY_COLOR_BLUE 1
+#define BODY_COLOR_YELLOW 2
+#define BODY_COLOR_GREEN 3
+#define BODY_COLOR_BLACK 4
+#define BODY_COLOR_BROWN 5
+#define BODY_COLOR_PURPLE 6
+#define BODY_COLOR_GRAY 7
+#define BODY_COLOR_WHITE 8
+#define BODY_COLOR_PINK 9
+
+#define F_SUMMARY_SCREEN_FLIP_SPRITE 0x80
+
+// Evolution type flags
+#define EVO_FRIENDSHIP 0x0001 // Pokémon levels up with friendship ≥ 220
+#define EVO_FRIENDSHIP_DAY 0x0002 // Pokémon levels up during the day with friendship ≥ 220
+#define EVO_FRIENDSHIP_NIGHT 0x0003 // Pokémon levels up at night with friendship ≥ 220
+#define EVO_LEVEL 0x0004 // Pokémon reaches the specified level
+#define EVO_TRADE 0x0005 // Pokémon is traded
+#define EVO_TRADE_ITEM 0x0006 // Pokémon is traded while it's holding the specified item
+#define EVO_ITEM 0x0007 // specified item is used on Pokémon
+#define EVO_LEVEL_ATK_GT_DEF 0x0008 // Pokémon reaches the specified level with attack > defense
+#define EVO_LEVEL_ATK_EQ_DEF 0x0009 // Pokémon reaches the specified level with attack = defense
+#define EVO_LEVEL_ATK_LT_DEF 0x000a // Pokémon reaches the specified level with attack < defense
+#define EVO_LEVEL_SILCOON 0x000b // Pokémon reaches the specified level with a Silcoon personality value
+#define EVO_LEVEL_CASCOON 0x000c // Pokémon reaches the specified level with a Cascoon personality value
+#define EVO_LEVEL_NINJASK 0x000d // Pokémon reaches the specified level (special value for Ninjask)
+#define EVO_LEVEL_SHEDINJA 0x000e // Pokémon reaches the specified level (special value for Shedinja)
+#define EVO_BEAUTY 0x000f // Pokémon levels up with beauty ≥ specified value
+
+#define EVOS_PER_MON 5
+
#endif // GUARD_CONSTANTS_POKEMON_H
diff --git a/include/constants/script_menu.h b/include/constants/script_menu.h
new file mode 100644
index 000000000..b7ec908c1
--- /dev/null
+++ b/include/constants/script_menu.h
@@ -0,0 +1,168 @@
+#ifndef GUARD_SCRIPT_MENU_CONSTANTS_H
+#define GUARD_SCRIPT_MENU_CONSTANTS_H
+
+#define MULTICHOICE(name) {name, ARRAY_COUNT(name)}
+
+#define MAX_MULTICHOICE_WIDTH 28
+
+#define MULTI_B_PRESSED 127
+
+// Multichoice Ids
+#define MULTI_BRINEY_ON_DEWFORD 0
+#define MULTI_PC 1 // Exit only, populated by CreatePCMultichoice
+#define MULTI_ENTERINFO 2
+#define MULTI_CONTEST_INFO 3
+#define MULTI_CONTEST_TYPE 4
+#define MULTI_DECOR_NOREGISTRY 5
+#define MULTI_DECOR_REGISTRY 6
+#define MULTI_REGISTER_MENU 7
+#define MULTI_SSTIDAL_LILYCOVE 8 // Exit only, populated by CreateLilycoveSSTidalMultichoice
+#define MULTI_UNUSED_9 9
+#define MULTI_UNUSED_10 10
+#define MULTI_FRONTIER_PASS_INFO 11
+#define MULTI_BIKE 12
+#define MULTI_STATUS_INFO 13
+#define MULTI_BRINEY_OFF_DEWFORD 14
+#define MULTI_UNUSED_15 15
+#define MULTI_VIEWED_PAINTINGS 16
+#define MULTI_YESNOINFO 17
+#define MULTI_BATTLE_MODE 18
+#define MULTI_UNUSED_19 19
+#define MULTI_YESNOINFO_2 20
+#define MULTI_UNUSED_21 21
+#define MULTI_UNUSED_22 22
+#define MULTI_CHALLENGEINFO 23
+#define MULTI_LEVEL_MODE 24
+#define MULTI_MECHADOLL1_Q1 25
+#define MULTI_MECHADOLL1_Q2 26
+#define MULTI_MECHADOLL1_Q3 27
+#define MULTI_MECHADOLL2_Q1 28
+#define MULTI_MECHADOLL2_Q2 29
+#define MULTI_MECHADOLL2_Q3 30
+#define MULTI_MECHADOLL3_Q1 31
+#define MULTI_MECHADOLL3_Q2 32
+#define MULTI_MECHADOLL3_Q3 33
+#define MULTI_MECHADOLL4_Q1 34
+#define MULTI_MECHADOLL4_Q2 35
+#define MULTI_MECHADOLL4_Q3 36
+#define MULTI_MECHADOLL5_Q1 37
+#define MULTI_MECHADOLL5_Q2 38
+#define MULTI_MECHADOLL5_Q3 39
+#define MULTI_UNUSED_40 40
+#define MULTI_UNUSED_41 41
+#define MULTI_VENDING_MACHINE 42
+#define MULTI_MACH_BIKE_INFO 43
+#define MULTI_ACRO_BIKE_INFO 44
+#define MULTI_SATISFACTION 45
+#define MULTI_STERN_DEEPSEA 46
+#define MULTI_UNUSED_ASH_VENDOR 47 // Replaced by scrollable multichoice
+#define MULTI_GAME_CORNER_DOLLS 48
+#define MULTI_GAME_CORNER_COINS 49
+#define MULTI_HOWS_FISHING 50
+#define MULTI_UNUSED_51 51
+#define MULTI_SSTIDAL_SLATEPORT_WITH_BF 52
+#define MULTI_SSTIDAL_BATTLE_FRONTIER 53
+#define MULTI_RIGHTLEFT 54
+#define MULTI_GAME_CORNER_TMS 55
+#define MULTI_SSTIDAL_SLATEPORT_NO_BF 56
+#define MULTI_FLOORS 57
+#define MULTI_SHARDS_R 58
+#define MULTI_SHARDS_Y 59
+#define MULTI_SHARDS_RY 60
+#define MULTI_SHARDS_B 61
+#define MULTI_SHARDS_RB 62
+#define MULTI_SHARDS_YB 63
+#define MULTI_SHARDS_RYB 64
+#define MULTI_SHARDS_G 65
+#define MULTI_SHARDS_RG 66
+#define MULTI_SHARDS_YG 67
+#define MULTI_SHARDS_RYG 68
+#define MULTI_SHARDS_BG 69
+#define MULTI_SHARDS_RBG 70
+#define MULTI_SHARDS_YBG 71
+#define MULTI_SHARDS_RYBG 72
+#define MULTI_TOURNEY_WITH_RECORD 73
+#define MULTI_CABLE_CLUB_NO_RECORD_MIX 74
+#define MULTI_WIRELESS_NO_RECORD_BERRY 75
+#define MULTI_CABLE_CLUB_WITH_RECORD_MIX 76
+#define MULTI_WIRELESS_NO_BERRY 77
+#define MULTI_WIRELESS_NO_RECORD 78
+#define MULTI_WIRELESS_ALL_SERVICES 79
+#define MULTI_WIRELESS_MINIGAME 80
+#define MULTI_LINK_LEADER 81
+#define MULTI_CONTEST_RANK 82
+#define MULTI_FRONTIER_ITEM_CHOOSE 83
+#define MULTI_LINK_CONTEST_INFO 84
+#define MULTI_LINK_CONTEST_MODE 85
+#define MULTI_FORCED_START_MENU 86
+#define MULTI_FRONTIER_GAMBLER_BET 87
+#define MULTI_TENT 88
+#define MULTI_UNUSED_SSTIDAL_1 89 // These 4 were replaced by CreateLilycoveSSTidalMultichoice
+#define MULTI_UNUSED_SSTIDAL_2 90 //
+#define MULTI_UNUSED_SSTIDAL_3 91 //
+#define MULTI_UNUSED_SSTIDAL_4 92 //
+#define MULTI_FOSSIL 93
+#define MULTI_YESNO 94
+#define MULTI_FRONTIER_RULES 95
+#define MULTI_BATTLE_ARENA_RULES 96
+#define MULTI_BATTLE_TOWER_RULES 97
+#define MULTI_BATTLE_DOME_RULES 98
+#define MULTI_BATTLE_FACTORY_RULES 99
+#define MULTI_BATTLE_PALACE_RULES 100
+#define MULTI_BATTLE_PYRAMID_RULES 101
+#define MULTI_BATTLE_PIKE_RULES 102
+#define MULTI_GO_ON_RECORD_REST_RETIRE 103
+#define MULTI_GO_ON_REST_RETIRE 104
+#define MULTI_GO_ON_RECORD_RETIRE 105
+#define MULTI_GO_ON_RETIRE 106
+#define MULTI_TOURNEY_NO_RECORD 107
+#define MULTI_TV_LATI 108
+#define MULTI_BATTLE_TOWER_FEELINGS 109
+#define MULTI_WHERES_RAYQUAZA 110
+#define MULTI_SLATEPORT_TENT_RULES 111
+#define MULTI_FALLARBOR_TENT_RULES 112
+#define MULTI_TAG_MATCH_TYPE 113
+
+// Lilycove SS Tidal Multichoice Selections
+#define SSTIDAL_SELECTION_SLATEPORT 0
+#define SSTIDAL_SELECTION_BATTLE_FRONTIER 1
+#define SSTIDAL_SELECTION_SOUTHERN_ISLAND 2
+#define SSTIDAL_SELECTION_NAVEL_ROCK 3
+#define SSTIDAL_SELECTION_BIRTH_ISLAND 4
+#define SSTIDAL_SELECTION_FARAWAY_ISLAND 5
+#define SSTIDAL_SELECTION_EXIT 6
+#define SSTIDAL_SELECTION_COUNT 7
+
+// Std String Ids
+#define STDSTRING_COOL 0
+#define STDSTRING_BEAUTY 1
+#define STDSTRING_CUTE 2
+#define STDSTRING_SMART 3
+#define STDSTRING_TOUGH 4
+#define STDSTRING_NORMAL 5
+#define STDSTRING_SUPER 6
+#define STDSTRING_HYPER 7
+#define STDSTRING_MASTER 8
+#define STDSTRING_COOL2 9
+#define STDSTRING_BEAUTY2 10
+#define STDSTRING_CUTE2 11
+#define STDSTRING_SMART2 12
+#define STDSTRING_TOUGH2 13
+#define STDSTRING_ITEMS 14
+#define STDSTRING_KEYITEMS 15
+#define STDSTRING_POKEBALLS 16
+#define STDSTRING_TMHMS 17
+#define STDSTRING_BERRIES 18
+#define STDSTRING_SINGLE 19
+#define STDSTRING_DOUBLE 20
+#define STDSTRING_MULTI 21
+#define STDSTRING_MULTI_LINK 22
+#define STDSTRING_BATTLE_TOWER 23
+#define STDSTRING_BATTLE_DOME 24
+#define STDSTRING_BATTLE_FACTORY 25
+#define STDSTRING_BATTLE_PALACE 26
+#define STDSTRING_BATTLE_ARENA 27
+#define STDSTRING_BATTLE_PIKE 28
+#define STDSTRING_BATTLE_PYRAMID 29
+
+#endif //GUARD_SCRIPT_MENU_CONSTANTS_H
diff --git a/include/constants/vars.h b/include/constants/vars.h
index 6b213c8cc..72b15654e 100644
--- a/include/constants/vars.h
+++ b/include/constants/vars.h
@@ -61,14 +61,14 @@
#define VAR_0x402E 0x402E
#define VAR_FRONTIER_MANIAC_FACILITY 0x402F
-#define VAR_FRONTIER_GAMBLER_FACILITY 0x4030
-#define VAR_FRONTIER_GAMBLER_SET_FACILITY_F 0x4031
+#define VAR_FRONTIER_GAMBLER_CHALLENGE 0x4030
+#define VAR_FRONTIER_GAMBLER_SET_CHALLENGE 0x4031
#define VAR_FRONTIER_GAMBLER_AMOUNT_BET 0x4032
-#define VAR_FRONTIER_GAMBLER_PLACED_BET_F 0x4033
+#define VAR_FRONTIER_GAMBLER_STATE 0x4033
#define VAR_DEOXYS_ROCK_STEP_COUNT 0x4034
#define VAR_DEOXYS_ROCK_LEVEL 0x4035
-#define VAR_STORAGE_UNKNOWN 0x4036
+#define VAR_PC_BOX_TO_SEND_MON 0x4036
#define VAR_UNUSUAL_WEATHER_LOCATION 0x4037
#define VAR_UNUSUAL_WEATHER_STEP_COUNTER 0x4038
#define VAR_SHOULD_END_UNUSUAL_WEATHER 0x4039
diff --git a/include/contest.h b/include/contest.h
index a4e209bcb..2b1b95af5 100644
--- a/include/contest.h
+++ b/include/contest.h
@@ -2,10 +2,7 @@
#define GUARD_CONTEST_H
#include "palette.h"
-
-#define CONTESTANT_COUNT 4
-#define APPLAUSE_METER_SIZE 5
-#define CONTEST_TURN_COUNT 5
+#include "constants/contest.h"
enum
{
@@ -18,20 +15,6 @@ enum
CONTEST_DEBUG_MODE_PRINT_UNK_D
};
-#define LINK_CONTEST_FLAG_IS_LINK (1 << 0)
-#define LINK_CONTEST_FLAG_IS_WIRELESS (1 << 1)
-#define LINK_CONTEST_FLAG_HAS_RS_PLAYER (1 << 2)
-
-enum
-{
- CONTEST_CATEGORY_COOL,
- CONTEST_CATEGORY_BEAUTY,
- CONTEST_CATEGORY_CUTE,
- CONTEST_CATEGORY_SMART,
- CONTEST_CATEGORY_TOUGH,
- CONTEST_CATEGORIES_COUNT,
-};
-
enum
{
CONTEST_EFFECT_HIGHLY_APPEALING,
@@ -244,7 +227,7 @@ struct ContestPokemon
u8 aiPool_Cute:1; // 0x10
u8 aiPool_Smart:1; // 0x20
u8 aiPool_Tough:1; // 0x40
- /*0x1E*/ u16 moves[4]; // moves
+ /*0x1E*/ u16 moves[MAX_MON_MOVES]; // moves
/*0x26*/ u8 cool; // cool
/*0x27*/ u8 beauty; // beauty
/*0x28*/ u8 cute; // cute
diff --git a/include/credits.h b/include/credits.h
index e7e58415b..f7dfa9997 100644
--- a/include/credits.h
+++ b/include/credits.h
@@ -7,6 +7,6 @@
extern EWRAM_DATA bool8 gHasHallOfFameRecords;
// Exported ROM declarations
-void sub_8175620(void);
+void CB2_StartCreditsSequence(void);
#endif // GUARD_CREDITS_H
diff --git a/include/data.h b/include/data.h
index f1a4caa6a..49b98663a 100644
--- a/include/data.h
+++ b/include/data.h
@@ -34,7 +34,7 @@ struct TrainerMonNoItemCustomMoves
u16 iv;
u8 lvl;
u16 species;
- u16 moves[4];
+ u16 moves[MAX_MON_MOVES];
};
struct TrainerMonItemCustomMoves
@@ -43,7 +43,7 @@ struct TrainerMonItemCustomMoves
u8 lvl;
u16 species;
u16 heldItem;
- u16 moves[4];
+ u16 moves[MAX_MON_MOVES];
};
union TrainerMonPtr
diff --git a/include/daycare.h b/include/daycare.h
index ecd875865..7d6f2fb19 100644
--- a/include/daycare.h
+++ b/include/daycare.h
@@ -1,10 +1,10 @@
#ifndef GUARD_DAYCARE_H
#define GUARD_DAYCARE_H
-#define EGG_HATCH_LEVEL 5
+#include "constants/daycare.h"
-u8 *GetMonNick(struct Pokemon *mon, u8 *dest);
-u8 *GetBoxMonNick(struct BoxPokemon *mon, u8 *dest);
+u8 *GetMonNickname2(struct Pokemon *mon, u8 *dest);
+u8 *GetBoxMonNickname(struct BoxPokemon *mon, u8 *dest);
u8 CountPokemonInDaycare(struct DayCare *daycare);
void InitDaycareMailRecordMixing(struct DayCare *daycare, struct RecordMixingDayCareMail *daycareMail);
void StoreSelectedPokemonInDaycare(void);
@@ -16,7 +16,7 @@ void RejectEggFromDayCare(void);
void CreateEgg(struct Pokemon *mon, u16 species, bool8 setHotSpringsLocation);
void GiveEggFromDaycare(void);
bool8 ShouldEggHatch(void);
-u16 GetSelectedMonNickAndSpecies(void);
+u16 GetSelectedMonNicknameAndSpecies(void);
void GetDaycareMonNicknames(void);
u8 GetDaycareState(void);
void SetDaycareCompatibilityString(void);
diff --git a/include/egg_hatch.h b/include/egg_hatch.h
index 862d33947..64d07c813 100644
--- a/include/egg_hatch.h
+++ b/include/egg_hatch.h
@@ -2,9 +2,9 @@
#define GUARD_EGG_HATCH_H
void ScriptHatchMon(void);
-bool8 sub_8071614(void);
+bool8 CheckDaycareMonReceivedMail(void);
void EggHatch(void);
u8 GetEggStepsToSubtract(void);
-u16 sub_80722E0(void);
+u16 CountPartyAliveNonEggMons(void);
#endif // GUARD_EGG_HATCH_H
diff --git a/include/ereader_helpers.h b/include/ereader_helpers.h
index bcbb68d4f..8dc3b907a 100755
--- a/include/ereader_helpers.h
+++ b/include/ereader_helpers.h
@@ -1,51 +1,34 @@
#ifndef GUARD_EREADER_HELPERS_H
#define GUARD_EREADER_HELPERS_H
-struct Unk81D38FC
+#include "trainer_hill.h"
+
+struct EReaderTrainerHillTrainer
{
u8 unk0;
- u8 filler_1[3];
- u8 unk4[0x148];
- u8 unk14C[0x124];
- int checksum;
-};
+ struct TrainerHillTrainer unk4;
+ struct TrHillDisplay unk14C;
+ u32 checksum;
+}; // size=0x274
struct EReaderTrainerHillSet
{
- u8 unk_0;
- u8 unk_1;
- u8 unk_2;
- u8 unk_3;
- int checksum;
- struct Unk81D38FC unk_8[6];
+ u8 count;
+ u8 id;
+ u16 dummy;
+ u32 checksum;
+ struct EReaderTrainerHillTrainer unk_8[6];
u8 unk_ec0[40];
-};
-
-struct Unk81D3998Sub
-{
- u8 unk_000[4];
- u8 unk_004[0x148];
- u8 unk_14C[0x148];
- u8 unk_294[0x124];
-};
-
-struct Unk81D3998
-{
- u8 unk_000;
- u8 unk_001;
- u8 unk_002;
- int checksum;
- struct Unk81D3998Sub unk_008[4];
-};
+}; // size = 0xf00
bool8 EReader_IsReceivedDataValid(struct EReaderTrainerHillSet *buffer);
bool32 TryWriteTrainerHill(struct EReaderTrainerHillSet *arg0);
bool32 ReadTrainerHillAndValidate(void);
-int sub_81D3D70(u8, u32, u32*, u32*);
+int EReaderHandleTransfer(u8, u32, u32*, u32*);
void sub_81D3F9C(void);
void sub_81D3FAC(void);
-void sub_81D41A0(void);
-void sub_81D41F4(void);
+void EReaderHelper_SaveRegsState(void);
+void EReaderHelper_RestoreRegsState(void);
void sub_81D4238(void);
#endif // GUARD_EREADER_HELPERS_H
diff --git a/include/field_specials.h b/include/field_specials.h
index b1a50c811..952081e93 100644
--- a/include/field_specials.h
+++ b/include/field_specials.h
@@ -5,8 +5,8 @@ extern bool8 gBikeCyclingChallenge;
extern u8 gBikeCollisions;
u8 GetLeadMonIndex(void);
-u8 sub_813B260(void);
-u16 get_unknown_box_id(void);
+u8 IsDestinationBoxFull(void);
+u16 GetPCBoxToSendMon(void);
bool8 InMultiBattleRoom(void);
void sub_813BF10(void);
void IncrementBirthIslandRockStepCount(void);
@@ -19,17 +19,17 @@ bool32 ShouldDoRoxanneCall(void);
bool32 ShouldDoRivalRayquazaCall(void);
bool32 CountSSTidalStep(u16 delta);
u8 GetSSTidalLocation(s8 *mapGroup, s8 *mapNum, s16 *x, s16 *y);
-void sub_813A128(void);
-void sub_813A878(u8 a0);
+void ShowScrollableMultichoice(void);
+void FrontierGamblerSetWonOrLost(bool8 won);
u8 sub_813BADC(u8 a0);
-bool8 sub_813B9C0(void);
-void SetShoalItemFlag(u16 v0);
-void UpdateFrontierManiac(u16 a0);
-void UpdateFrontierGambler(u16 a0);
+bool8 InPokemonCenter(void);
+void SetShoalItemFlag(u16 unused);
+void UpdateFrontierManiac(u16 daysSince);
+void UpdateFrontierGambler(u16 daysSince);
void ResetCyclingRoadChallengeData(void);
-bool8 warp0_in_pokecenter(void);
+bool8 UsedPokemonCenterWarp(void);
void ResetFanClub(void);
-bool8 sub_813B21C(void);
-void set_unknown_box_id(u8 id);
+bool8 ShouldShowBoxWasFullMessage(void);
+void SetPCBoxToSendMon(u8 boxId);
#endif // GUARD_FIELD_SPECIALS_H
diff --git a/include/gba/types.h b/include/gba/types.h
index 9f2594703..7163f925f 100644
--- a/include/gba/types.h
+++ b/include/gba/types.h
@@ -68,6 +68,10 @@ struct OamData
/*0x06*/ u16 affineParam;
};
+#define ST_OAM_HFLIP 0x08
+#define ST_OAM_VFLIP 0x10
+#define ST_OAM_MNUM_FLIP_MASK 0x18
+
#define ST_OAM_OBJ_NORMAL 0
#define ST_OAM_OBJ_BLEND 1
#define ST_OAM_OBJ_WINDOW 2
diff --git a/include/global.fieldmap.h b/include/global.fieldmap.h
index b5a86e311..a17180589 100644
--- a/include/global.fieldmap.h
+++ b/include/global.fieldmap.h
@@ -267,19 +267,6 @@ enum
enum
{
- DIR_NONE,
- DIR_SOUTH,
- DIR_NORTH,
- DIR_WEST,
- DIR_EAST,
- DIR_SOUTHWEST,
- DIR_SOUTHEAST,
- DIR_NORTHWEST,
- DIR_NORTHEAST,
-};
-
-enum
-{
COLLISION_LEDGE_JUMP = 6
};
diff --git a/include/global.h b/include/global.h
index 14377d8bb..44a4d0164 100644
--- a/include/global.h
+++ b/include/global.h
@@ -63,8 +63,6 @@
// Converts a Q24.8 fixed-point format number to a regular integer
#define Q_24_8_TO_INT(n) ((int)((n) >> 8))
-#define PARTY_SIZE 6
-
#define POKEMON_SLOTS_NUMBER 412
#define min(a, b) ((a) < (b) ? (a) : (b))
@@ -212,7 +210,7 @@ struct BerryCrush
struct ApprenticeMon
{
u16 species;
- u16 moves[4];
+ u16 moves[MAX_MON_MOVES];
u16 item;
};
@@ -224,7 +222,7 @@ struct Apprentice
u8 number;
struct ApprenticeMon party[3];
u16 easyChatWords[6];
- u8 playerId[4];
+ u8 playerId[TRAINER_ID_LENGTH];
u8 playerName[PLAYER_NAME_LENGTH];
u8 language;
u32 checksum;
@@ -234,7 +232,7 @@ struct BattleTowerPokemon
{
u16 species;
u16 heldItem;
- u16 moves[4];
+ u16 moves[MAX_MON_MOVES];
u8 level;
u8 ppBonuses;
u8 hpEV;
@@ -257,13 +255,15 @@ struct BattleTowerPokemon
u8 friendship;
};
+#define NULL_BATTLE_TOWER_POKEMON { .nickname = __("$$$$$$$$$$$") }
+
struct EmeraldBattleTowerRecord
{
/*0x00*/ u8 lvlMode; // 0 = level 50, 1 = level 100
/*0x01*/ u8 facilityClass;
/*0x02*/ u16 winStreak;
/*0x04*/ u8 name[PLAYER_NAME_LENGTH + 1];
- /*0x0C*/ u8 trainerId[4];
+ /*0x0C*/ u8 trainerId[TRAINER_ID_LENGTH];
/*0x10*/ u16 greeting[6];
/*0x1C*/ u16 speechWon[6];
/*0x28*/ u16 speechLost[6];
@@ -278,7 +278,7 @@ struct BattleTowerEReaderTrainer
/*0x01*/ u8 facilityClass;
/*0x02*/ u16 winStreak;
/*0x04*/ u8 name[PLAYER_NAME_LENGTH + 1];
- /*0x0C*/ u8 trainerId[4];
+ /*0x0C*/ u8 trainerId[TRAINER_ID_LENGTH];
/*0x10*/ u16 greeting[6];
/*0x1C*/ u16 farewellPlayerLost[6];
/*0x28*/ u16 farewellPlayerWon[6];
@@ -288,7 +288,7 @@ struct BattleTowerEReaderTrainer
struct FrontierMonData
{
- u16 moves[4];
+ u16 moves[MAX_MON_MOVES];
u8 evs[6];
u8 nature;
};
@@ -425,7 +425,7 @@ struct PlayersApprentice
struct RankingHall1P
{
- u8 id[4];
+ u8 id[TRAINER_ID_LENGTH];
u16 winStreak;
u8 name[PLAYER_NAME_LENGTH + 1];
u8 language;
@@ -433,8 +433,8 @@ struct RankingHall1P
struct RankingHall2P
{
- u8 id1[4];
- u8 id2[4];
+ u8 id1[TRAINER_ID_LENGTH];
+ u8 id2[TRAINER_ID_LENGTH];
u16 winStreak;
u8 name1[PLAYER_NAME_LENGTH + 1];
u8 name2[PLAYER_NAME_LENGTH + 1];
@@ -446,7 +446,7 @@ struct SaveBlock2
/*0x00*/ u8 playerName[PLAYER_NAME_LENGTH + 1];
/*0x08*/ u8 playerGender; // MALE, FEMALE
/*0x09*/ u8 specialSaveWarpFlags;
- /*0x0A*/ u8 playerTrainerId[4];
+ /*0x0A*/ u8 playerTrainerId[TRAINER_ID_LENGTH];
/*0x0E*/ u16 playTimeHours;
/*0x10*/ u8 playTimeMinutes;
/*0x11*/ u8 playTimeSeconds;
@@ -495,7 +495,7 @@ struct SecretBase
/*0x1A9D*/ u8 battledOwnerToday:1;
/*0x1A9D*/ u8 registryStatus:2;
/*0x1A9E*/ u8 trainerName[PLAYER_NAME_LENGTH];
- /*0x1AA5*/ u8 trainerId[4]; // byte 0 is used for determining trainer class
+ /*0x1AA5*/ u8 trainerId[TRAINER_ID_LENGTH]; // byte 0 is used for determining trainer class
/*0x1AA9*/ u8 language;
/*0x1AAA*/ u16 numSecretBasesReceived;
/*0x1AAC*/ u8 numTimesEntered;
@@ -581,7 +581,7 @@ struct MailStruct
{
/*0x00*/ u16 words[MAIL_WORDS_COUNT];
/*0x12*/ u8 playerName[PLAYER_NAME_LENGTH + 1];
- /*0x1A*/ u8 trainerId[4];
+ /*0x1A*/ u8 trainerId[TRAINER_ID_LENGTH];
/*0x1E*/ u16 species;
/*0x20*/ u16 itemId;
};
@@ -598,7 +598,7 @@ struct MauvilleManBard
/*0x0E*/ u16 temporaryLyrics[6];
/*0x1A*/ u8 playerName[8];
/*0x22*/ u8 filler_2DB6[0x3];
- /*0x25*/ u8 playerTrainerId[4];
+ /*0x25*/ u8 playerTrainerId[TRAINER_ID_LENGTH];
/*0x29*/ bool8 hasChangedSong;
/*0x2A*/ u8 language;
}; /*size = 0x2C*/
@@ -737,50 +737,43 @@ struct RecordMixingDayCareMail
bool16 holdsItem[DAYCARE_MON_COUNT];
};
-enum
-{
- LILYCOVE_LADY_QUIZ,
- LILYCOVE_LADY_FAVOUR,
- LILYCOVE_LADY_CONTEST
-};
-
struct LilycoveLadyQuiz
{
/*0x000*/ u8 id;
- /*0x001*/ u8 phase;
- /*0x002*/ u16 unk_002[9];
- /*0x014*/ u16 unk_014;
- /*0x016*/ u16 unk_016;
+ /*0x001*/ u8 state;
+ /*0x002*/ u16 question[9];
+ /*0x014*/ u16 correctAnswer;
+ /*0x016*/ u16 playerAnswer;
/*0x018*/ u8 playerName[PLAYER_NAME_LENGTH + 1];
- /*0x020*/ u16 playerTrainerId[4];
- /*0x028*/ u16 itemId;
- /*0x02a*/ u8 unk_02a;
- /*0x02b*/ u8 unk_02b;
- /*0x02c*/ u8 unk_02c;
+ /*0x020*/ u16 playerTrainerId[TRAINER_ID_LENGTH];
+ /*0x028*/ u16 prize;
+ /*0x02a*/ bool8 waitingForChallenger;
+ /*0x02b*/ u8 questionId;
+ /*0x02c*/ u8 prevQuestionId;
/*0x02d*/ u8 language;
};
-struct LilycoveLadyFavour
+struct LilycoveLadyFavor
{
/*0x000*/ u8 id;
- /*0x001*/ u8 phase;
- /*0x002*/ u8 unk_002;
- /*0x003*/ u8 unk_003;
+ /*0x001*/ u8 state;
+ /*0x002*/ bool8 likedItem;
+ /*0x003*/ u8 numItemsGiven;
/*0x004*/ u8 playerName[PLAYER_NAME_LENGTH + 1];
- /*0x00c*/ u8 unk_00c;
+ /*0x00c*/ u8 favorId;
/*0x00e*/ u16 itemId;
- /*0x010*/ u16 unk_010;
+ /*0x010*/ u16 bestItem;
/*0x012*/ u8 language;
};
struct LilycoveLadyContest
{
/*0x000*/ u8 id;
- /*0x001*/ u8 phase;
- /*0x002*/ u8 fave_pkblk;
- /*0x003*/ u8 other_pkblk;
+ /*0x001*/ bool8 givenPokeblock;
+ /*0x002*/ u8 numGoodPokeblocksGiven;
+ /*0x003*/ u8 numOtherPokeblocksGiven;
/*0x004*/ u8 playerName[PLAYER_NAME_LENGTH + 1];
- /*0x00c*/ u8 max_sheen;
+ /*0x00c*/ u8 maxSheen;
/*0x00d*/ u8 category;
/*0x00e*/ u8 language;
};
@@ -788,7 +781,7 @@ struct LilycoveLadyContest
typedef union // 3b58
{
struct LilycoveLadyQuiz quiz;
- struct LilycoveLadyFavour favour;
+ struct LilycoveLadyFavor favor;
struct LilycoveLadyContest contest;
u8 id;
u8 pad[0x40];
@@ -951,7 +944,7 @@ struct SaveBlock1
/*0x2B94*/ u8 outbreakPokemonLevel;
/*0x2B95*/ u8 outbreakUnk1;
/*0x2B96*/ u16 outbreakUnk2;
- /*0x2B98*/ u16 outbreakPokemonMoves[4];
+ /*0x2B98*/ u16 outbreakPokemonMoves[MAX_MON_MOVES];
/*0x2BA0*/ u8 outbreakUnk4;
/*0x2BA1*/ u8 outbreakPokemonProbability;
/*0x2BA2*/ u16 outbreakDaysLeft;
diff --git a/include/global.tv.h b/include/global.tv.h
index aa151a75c..1cef057ae 100644
--- a/include/global.tv.h
+++ b/include/global.tv.h
@@ -4,8 +4,7 @@
enum
{
TVSHOW_OFF_AIR,
-
- TVSHOW_FAN_CLUB_LETTER = 1,
+ TVSHOW_FAN_CLUB_LETTER,
TVSHOW_RECENT_HAPPENINGS,
TVSHOW_PKMN_FAN_CLUB_OPINIONS,
TVSHOW_UNKN_SHOWTYPE_04,
@@ -482,7 +481,7 @@ typedef union // size = 0x24
/*0x01*/ bool8 active;
/*0x02*/ u8 var02;
/*0x03*/ u8 var03;
- /*0x04*/ u16 moves[4];
+ /*0x04*/ u16 moves[MAX_MON_MOVES];
/*0x0C*/ u16 species;
/*0x0E*/ u16 var0E;
/*0x10*/ u8 locationMapNum;
diff --git a/include/graphics.h b/include/graphics.h
index d1d99cc8f..5f5c579d2 100644
--- a/include/graphics.h
+++ b/include/graphics.h
@@ -3093,90 +3093,93 @@ extern const u32 gPokeblock_Gfx[];
extern const u32 gItemIcon_QuestionMark[];
extern const u32 gItemIconPalette_QuestionMark[];
-extern const u32 gUnknown_08DB7AA0[];
-extern const u32 gUnknown_08DB7B34[];
-extern const u32 gUnknown_08DB7B5C[];
-extern const u32 gUnknown_08DB7BEC[];
-extern const u32 gUnknown_08DB7C08[];
-extern const u32 gUnknown_08DB7CE8[];
-extern const u32 gUnknown_08DB7D08[];
-extern const u32 gUnknown_08DB7DCC[];
-extern const u32 gUnknown_08DB7DF4[];
-extern const u32 gUnknown_08DB7EA0[];
-extern const u32 gUnknown_08DB7EC4[];
-extern const u32 gUnknown_08DB7F60[];
-extern const u32 gUnknown_08DB7F7C[];
-extern const u32 gUnknown_08DB8070[];
-extern const u32 gUnknown_08DB808C[];
-extern const u32 gUnknown_08DB8138[];
-extern const u32 gUnknown_08DB8160[];
-extern const u32 gUnknown_08DB8218[];
-extern const u32 gUnknown_08DB823C[];
-extern const u32 gUnknown_08DB8300[];
-extern const u32 gUnknown_08DB8328[];
-extern const u32 gUnknown_08DB8430[];
-extern const u32 gUnknown_08DB8458[];
-extern const u32 gUnknown_08DB8528[];
-extern const u32 gUnknown_08DB854C[];
-extern const u32 gUnknown_08DB862C[];
-extern const u32 gUnknown_08DB8654[];
-extern const u32 gUnknown_08DB86C4[];
-extern const u32 gUnknown_08DB86E0[];
-extern const u32 gUnknown_08DB8750[];
-extern const u32 gUnknown_08DB876C[];
-extern const u32 gUnknown_08DB87DC[];
-extern const u32 gUnknown_08DB87F8[];
-extern const u32 gUnknown_08DB88D8[];
-extern const u32 gUnknown_08DB8900[];
-extern const u32 gUnknown_08DB89E0[];
-extern const u32 gUnknown_08DB8A08[];
-extern const u32 gUnknown_08DB8A68[];
-extern const u32 gUnknown_08DB8A84[];
-extern const u32 gUnknown_08DB8B40[];
-extern const u32 gUnknown_08DB8B68[];
-extern const u32 gUnknown_08DB8C40[];
-extern const u32 gUnknown_08DB8C5C[];
-extern const u32 gUnknown_08DB8CF4[];
-extern const u32 gUnknown_08DB8D18[];
-extern const u32 gUnknown_08DB8DB0[];
-extern const u32 gUnknown_08DB8DD4[];
-extern const u32 gUnknown_08DB8E80[];
-extern const u32 gUnknown_08DB8EA0[];
-extern const u32 gUnknown_08DB8F58[];
-extern const u32 gUnknown_08DB8F7C[];
-extern const u32 gUnknown_08DB9038[];
-extern const u32 gUnknown_08DB9058[];
-extern const u32 gUnknown_08DB9130[];
-extern const u32 gUnknown_08DB9154[];
-extern const u32 gUnknown_08DB9218[];
-extern const u32 gUnknown_08DB9234[];
-extern const u32 gUnknown_08DB92FC[];
-extern const u32 gUnknown_08DB931C[];
-extern const u32 gUnknown_08DB93E8[];
-extern const u32 gUnknown_08DB940C[];
-extern const u32 gUnknown_08DB94CC[];
-extern const u32 gUnknown_08DB94E8[];
-extern const u32 gUnknown_08DB95AC[];
-extern const u32 gUnknown_08DB95D0[];
-extern const u32 gUnknown_08DB96C4[];
-extern const u32 gUnknown_08DB96EC[];
-extern const u32 gUnknown_08DB97F4[];
-extern const u32 gUnknown_08DB981C[];
-extern const u32 gUnknown_08DB9908[];
-extern const u32 gUnknown_08DB9930[];
-extern const u32 gUnknown_08DB9A54[];
-extern const u32 gUnknown_08DB9A7C[];
-extern const u32 gUnknown_08DB9B7C[];
-extern const u32 gUnknown_08DB9BA4[];
-extern const u32 gUnknown_08DB9CB0[];
-extern const u32 gUnknown_08DB9CD8[];
-extern const u32 gUnknown_08DB9DAC[];
-extern const u32 gUnknown_08DB9DD4[];
-extern const u32 gUnknown_08DB9EE4[];
-extern const u32 gUnknown_08DB9F08[];
-extern const u32 gUnknown_08DB9FFC[];
-extern const u32 gUnknown_08DBA020[];
-extern const u32 gUnknown_08DBA12C[];
+
+// Decorations
+extern const u32 gDecorIcon_HeavyDesk[];
+extern const u32 gDecorIconPalette_HeavyDesk[];
+extern const u32 gDecorIcon_RaggedDesk[];
+extern const u32 gDecorIconPalette_RaggedDesk[];
+extern const u32 gDecorIcon_ComfortDesk[];
+extern const u32 gDecorIconPalette_ComfortDesk[];
+extern const u32 gDecorIcon_PrettyDesk[];
+extern const u32 gDecorIconPalette_PrettyDesk[];
+extern const u32 gDecorIcon_BrickDesk[];
+extern const u32 gDecorIconPalette_BrickDesk[];
+extern const u32 gDecorIcon_CampDesk[];
+extern const u32 gDecorIconPalette_CampDesk[];
+extern const u32 gDecorIcon_HardDesk[];
+extern const u32 gDecorIconPalette_HardDesk[];
+extern const u32 gDecorIcon_RedPlant[];
+extern const u32 gDecorIconPalette_RedPlant[];
+extern const u32 gDecorIcon_TropicalPlant[];
+extern const u32 gDecorIconPalette_TropicalPlant[];
+extern const u32 gDecorIcon_PrettyFlowers[];
+extern const u32 gDecorIconPalette_PrettyFlowers[];
+extern const u32 gDecorIcon_ColorfulPlant[];
+extern const u32 gDecorIconPalette_ColorfulPlant[];
+extern const u32 gDecorIcon_BigPlant[];
+extern const u32 gDecorIconPalette_BigPlant[];
+extern const u32 gDecorIcon_GorgeousPlant[];
+extern const u32 gDecorIconPalette_GorgeousPlant[];
+extern const u32 gDecorIcon_RedBrick[];
+extern const u32 gDecorIconPalette_RedBrick[];
+extern const u32 gDecorIcon_YellowBrick[];
+extern const u32 gDecorIconPalette_YellowBrick[];
+extern const u32 gDecorIcon_BlueBrick[];
+extern const u32 gDecorIconPalette_BlueBrick[];
+extern const u32 gDecorIcon_RedTent[];
+extern const u32 gDecorIconPalette_RedTent[];
+extern const u32 gDecorIcon_BlueTent[];
+extern const u32 gDecorIconPalette_BlueTent[];
+extern const u32 gDecorIcon_SolidBoard[];
+extern const u32 gDecorIconPalette_SolidBoard[];
+extern const u32 gDecorIcon_Slide[];
+extern const u32 gDecorIconPalette_Slide[];
+extern const u32 gDecorIcon_Tire[];
+extern const u32 gDecorIconPalette_Tire[];
+extern const u32 gDecorIcon_Stand[];
+extern const u32 gDecorIconPalette_Stand[];
+extern const u32 gDecorIcon_BreakableDoor[];
+extern const u32 gDecorIconPalette_BreakableDoor[];
+extern const u32 gDecorIcon_SandOrnament[];
+extern const u32 gDecorIconPalette_SandOrnament[];
+extern const u32 gDecorIcon_GlassOrnament[];
+extern const u32 gDecorIconPalette_GlassOrnament[];
+extern const u32 gDecorIcon_SurfMat[];
+extern const u32 gDecorIconPalette_SurfMat[];
+extern const u32 gDecorIcon_ThunderMat[];
+extern const u32 gDecorIconPalette_ThunderMat[];
+extern const u32 gDecorIcon_FireBlastMat[];
+extern const u32 gDecorIconPalette_FireBlastMat[];
+extern const u32 gDecorIcon_PowderSnowMat[];
+extern const u32 gDecorIconPalette_PowderSnowMat[];
+extern const u32 gDecorIcon_AttractMat[];
+extern const u32 gDecorIconPalette_AttractMat[];
+extern const u32 gDecorIcon_FissureMat[];
+extern const u32 gDecorIconPalette_FissureMat[];
+extern const u32 gDecorIcon_SpikesMat[];
+extern const u32 gDecorIconPalette_SpikesMat[];
+extern const u32 gDecorIcon_SnorlaxDoll[];
+extern const u32 gDecorIconPalette_SnorlaxDoll[];
+extern const u32 gDecorIcon_RhydonDoll[];
+extern const u32 gDecorIconPalette_RhydonDoll[];
+extern const u32 gDecorIcon_LaprasDoll[];
+extern const u32 gDecorIconPalette_LaprasDoll[];
+extern const u32 gDecorIcon_VenusaurDoll[];
+extern const u32 gDecorIconPalette_VenusaurDoll[];
+extern const u32 gDecorIcon_CharizardDoll[];
+extern const u32 gDecorIconPalette_CharizardDoll[];
+extern const u32 gDecorIcon_BlastoiseDoll[];
+extern const u32 gDecorIconPalette_BlastoiseDoll[];
+extern const u32 gDecorIcon_WailmerDoll[];
+extern const u32 gDecorIconPalette_WailmerDoll[];
+extern const u32 gDecorIcon_RegirockDoll[];
+extern const u32 gDecorIconPalette_RegirockDoll[];
+extern const u32 gDecorIcon_RegiceDoll[];
+extern const u32 gDecorIconPalette_RegiceDoll[];
+extern const u32 gDecorIcon_RegisteelDoll[];
+extern const u32 gDecorIconPalette_RegisteelDoll[];
+
extern const u32 gWallclock_Gfx[];
extern const u16 gWallclockMale_Pal[];
extern const u16 gWallclockFemale_Pal[];
diff --git a/include/item.h b/include/item.h
index 881d3a3d4..87ff57bc7 100644
--- a/include/item.h
+++ b/include/item.h
@@ -1,26 +1,7 @@
#ifndef GUARD_ITEM_H
#define GUARD_ITEM_H
-// These constants are used in gItems
-enum
-{
- POCKET_NONE,
- POCKET_ITEMS,
- POCKET_POKE_BALLS,
- POCKET_TM_HM,
- POCKET_BERRIES,
- POCKET_KEY_ITEMS,
-};
-
-enum
-{
- ITEMS_POCKET,
- BALLS_POCKET,
- TMHM_POCKET,
- BERRIES_POCKET,
- KEYITEMS_POCKET,
- POCKETS_COUNT
-};
+#include "constants/item.h"
typedef void (*ItemUseFunc)(u8);
diff --git a/include/item_menu.h b/include/item_menu.h
index 5580fa4b4..b1275549d 100644
--- a/include/item_menu.h
+++ b/include/item_menu.h
@@ -69,8 +69,8 @@ extern u16 gSpecialVar_ItemId;
// Exported ROM declarations
void sub_81AAC14(void);
-void sub_81AAC50(void);
-void sub_81AAC70(void);
+void FavorLadyOpenBagMenu(void);
+void QuizLadyOpenBagMenu(void);
void sub_81AAC28(void);
void sub_81AABB0(void);
void SetInitialScrollAndCursorPositions(u8 pocketId);
diff --git a/include/lilycove_lady.h b/include/lilycove_lady.h
index f26285d68..1ec327be9 100644
--- a/include/lilycove_lady.h
+++ b/include/lilycove_lady.h
@@ -2,16 +2,16 @@
#define GUARD_LILYCOVE_LADY_H
u8 GetLilycoveLadyId(void);
-void SetLilycoveLady(void);
-void sub_818DA78(void);
-void sub_818DEF4(void);
-void sub_818E564(void);
-void sub_818E570(const LilycoveLady *lilycoveLady);
+void InitLilycoveLady(void);
+void ResetLilycoveLadyForRecordMix(void);
+void FieldCallback_FavorLadyEnableScriptContexts(void);
+void FieldCallback_QuizLadyEnableScriptContexts(void);
+void QuizLadyClearQuestionForRecordMix(const LilycoveLady *lilycoveLady);
bool8 GivePokeblockToContestLady(struct Pokeblock *pokeblock);
-void sub_818E7E0(u8 *dest1, u8 *dest2);
-void sub_818E81C(u8 *dest);
-void sub_818E848(u8 *dest);
-void sub_818E868(u8 *dest, u8 category);
+void BufferContestLadyMonName(u8 *dest1, u8 *dest2);
+void BufferContestLadyPlayerName(u8 *dest);
+void BufferContestLadyLanguage(u8 *dest);
+void BufferContestName(u8 *dest, u8 category);
u8 sub_818E880(void);
#endif //GUARD_LILYCOVE_LADY_H
diff --git a/include/mon_markings.h b/include/mon_markings.h
index 8e4ec58bd..241b31e01 100644
--- a/include/mon_markings.h
+++ b/include/mon_markings.h
@@ -1,17 +1,19 @@
#ifndef POKEEMERALD_MON_MARKINGS_H
#define POKEEMERALD_MON_MARKINGS_H
+#define NUM_MON_MARKINGS 4
+
struct PokemonMarkMenu
{
/*0x0000*/ u16 baseTileTag;
/*0x0002*/ u16 basePaletteTag;
/*0x0004*/ u8 markings; // bit flags
/*0x0005*/ s8 cursorPos;
- /*0x0006*/ bool8 markingsArray[4];
+ /*0x0006*/ bool8 markingsArray[NUM_MON_MARKINGS];
/*0x000A*/ u8 cursorBaseY;
/*0x000B*/ bool8 spriteSheetLoadRequired;
/*0x000C*/ struct Sprite *menuWindowSprites[2]; // upper and lower halves of menu window
- /*0x0014*/ struct Sprite *menuMarkingSprites[4];
+ /*0x0014*/ struct Sprite *menuMarkingSprites[NUM_MON_MARKINGS];
/*0x0024*/ struct Sprite *unkSprite;
/*0x0028*/ struct Sprite *menuTextSprite;
/*0x002C*/ const u8 *frameTiles;
diff --git a/include/party_menu.h b/include/party_menu.h
index c9843e484..d76e50788 100644
--- a/include/party_menu.h
+++ b/include/party_menu.h
@@ -26,6 +26,41 @@ enum
PARTY_GIVE_ITEM,
};
+enum
+{
+ TUTOR_MOVE_MEGA_PUNCH,
+ TUTOR_MOVE_SWORDS_DANCE,
+ TUTOR_MOVE_MEGA_KICK,
+ TUTOR_MOVE_BODY_SLAM,
+ TUTOR_MOVE_DOUBLE_EDGE,
+ TUTOR_MOVE_COUNTER,
+ TUTOR_MOVE_SEISMIC_TOSS,
+ TUTOR_MOVE_MIMIC,
+ TUTOR_MOVE_METRONOME,
+ TUTOR_MOVE_SOFT_BOILED,
+ TUTOR_MOVE_DREAM_EATER,
+ TUTOR_MOVE_THUNDER_WAVE,
+ TUTOR_MOVE_EXPLOSION,
+ TUTOR_MOVE_ROCK_SLIDE,
+ TUTOR_MOVE_SUBSTITUTE,
+ TUTOR_MOVE_DYNAMIC_PUNCH,
+ TUTOR_MOVE_ROLLOUT,
+ TUTOR_MOVE_PSYCH_UP,
+ TUTOR_MOVE_SNORE,
+ TUTOR_MOVE_ICY_WIND,
+ TUTOR_MOVE_ENDURE,
+ TUTOR_MOVE_MUD_SLAP,
+ TUTOR_MOVE_ICE_PUNCH,
+ TUTOR_MOVE_SWAGGER,
+ TUTOR_MOVE_SLEEP_TALK,
+ TUTOR_MOVE_SWIFT,
+ TUTOR_MOVE_DEFENSE_CURL,
+ TUTOR_MOVE_THUNDER_PUNCH,
+ TUTOR_MOVE_FIRE_PUNCH,
+ TUTOR_MOVE_FURY_CUTTER,
+ TUTOR_MOVE_COUNT
+};
+
struct Struct203CEC8
{
MainCallback exitCallback;
diff --git a/include/pokedex.h b/include/pokedex.h
index a1b7378bf..532c823ee 100644
--- a/include/pokedex.h
+++ b/include/pokedex.h
@@ -4,6 +4,7 @@
extern u8 gUnusedPokedexU8;
extern void (*gUnknown_030060B4)(void);
+#define KANTO_DEX_COUNT 151
#define HOENN_DEX_COUNT 202
#define NATIONAL_DEX_COUNT 386
@@ -43,7 +44,7 @@ s8 GetSetPokedexFlag(u16 nationalNum, u8 caseId);
u16 CreateMonSpriteFromNationalDexNumber(u16, s16, s16, u16);
bool16 HasAllHoennMons(void);
void ResetPokedexScrollPositions(void);
-u16 sub_80C0944(void);
+bool16 HasAllMons(void);
void CB2_Pokedex(void);
#endif // GUARD_POKEDEX_H
diff --git a/include/pokemon.h b/include/pokemon.h
index 07bcff2e3..6a34e3cda 100644
--- a/include/pokemon.h
+++ b/include/pokemon.h
@@ -4,136 +4,6 @@
#include "constants/pokemon.h"
#include "sprite.h"
-#define MON_DATA_PERSONALITY 0
-#define MON_DATA_OT_ID 1
-#define MON_DATA_NICKNAME 2
-#define MON_DATA_LANGUAGE 3
-#define MON_DATA_SANITY_IS_BAD_EGG 4
-#define MON_DATA_SANITY_HAS_SPECIES 5
-#define MON_DATA_SANITY_IS_EGG 6
-#define MON_DATA_OT_NAME 7
-#define MON_DATA_MARKINGS 8
-#define MON_DATA_CHECKSUM 9
-#define MON_DATA_ENCRYPT_SEPARATOR 10
-#define MON_DATA_SPECIES 11
-#define MON_DATA_HELD_ITEM 12
-#define MON_DATA_MOVE1 13
-#define MON_DATA_MOVE2 14
-#define MON_DATA_MOVE3 15
-#define MON_DATA_MOVE4 16
-#define MON_DATA_PP1 17
-#define MON_DATA_PP2 18
-#define MON_DATA_PP3 19
-#define MON_DATA_PP4 20
-#define MON_DATA_PP_BONUSES 21
-#define MON_DATA_COOL 22
-#define MON_DATA_BEAUTY 23
-#define MON_DATA_CUTE 24
-#define MON_DATA_EXP 25
-#define MON_DATA_HP_EV 26
-#define MON_DATA_ATK_EV 27
-#define MON_DATA_DEF_EV 28
-#define MON_DATA_SPEED_EV 29
-#define MON_DATA_SPATK_EV 30
-#define MON_DATA_SPDEF_EV 31
-#define MON_DATA_FRIENDSHIP 32
-#define MON_DATA_SMART 33
-#define MON_DATA_POKERUS 34
-#define MON_DATA_MET_LOCATION 35
-#define MON_DATA_MET_LEVEL 36
-#define MON_DATA_MET_GAME 37
-#define MON_DATA_POKEBALL 38
-#define MON_DATA_HP_IV 39
-#define MON_DATA_ATK_IV 40
-#define MON_DATA_DEF_IV 41
-#define MON_DATA_SPEED_IV 42
-#define MON_DATA_SPATK_IV 43
-#define MON_DATA_SPDEF_IV 44
-#define MON_DATA_IS_EGG 45
-#define MON_DATA_ABILITY_NUM 46
-#define MON_DATA_TOUGH 47
-#define MON_DATA_SHEEN 48
-#define MON_DATA_OT_GENDER 49
-#define MON_DATA_COOL_RIBBON 50
-#define MON_DATA_BEAUTY_RIBBON 51
-#define MON_DATA_CUTE_RIBBON 52
-#define MON_DATA_SMART_RIBBON 53
-#define MON_DATA_TOUGH_RIBBON 54
-#define MON_DATA_STATUS 55
-#define MON_DATA_LEVEL 56
-#define MON_DATA_HP 57
-#define MON_DATA_MAX_HP 58
-#define MON_DATA_ATK 59
-#define MON_DATA_DEF 60
-#define MON_DATA_SPEED 61
-#define MON_DATA_SPATK 62
-#define MON_DATA_SPDEF 63
-#define MON_DATA_MAIL 64
-#define MON_DATA_SPECIES2 65
-#define MON_DATA_IVS 66
-#define MON_DATA_CHAMPION_RIBBON 67
-#define MON_DATA_WINNING_RIBBON 68
-#define MON_DATA_VICTORY_RIBBON 69
-#define MON_DATA_ARTIST_RIBBON 70
-#define MON_DATA_EFFORT_RIBBON 71
-#define MON_DATA_GIFT_RIBBON_1 72
-#define MON_DATA_GIFT_RIBBON_2 73
-#define MON_DATA_GIFT_RIBBON_3 74
-#define MON_DATA_GIFT_RIBBON_4 75
-#define MON_DATA_GIFT_RIBBON_5 76
-#define MON_DATA_GIFT_RIBBON_6 77
-#define MON_DATA_GIFT_RIBBON_7 78
-#define MON_DATA_FATEFUL_ENCOUNTER 79
-#define MON_DATA_OBEDIENCE 80
-#define MON_DATA_KNOWN_MOVES 81
-#define MON_DATA_RIBBON_COUNT 82
-#define MON_DATA_RIBBONS 83
-#define MON_DATA_ATK2 84
-#define MON_DATA_DEF2 85
-#define MON_DATA_SPEED2 86
-#define MON_DATA_SPATK2 87
-#define MON_DATA_SPDEF2 88
-
-#define MAX_LEVEL 100
-
-#define OT_ID_RANDOM_NO_SHINY 2
-#define OT_ID_PRESET 1
-#define OT_ID_PLAYER_ID 0
-
-#define MON_GIVEN_TO_PARTY 0x0
-#define MON_GIVEN_TO_PC 0x1
-#define MON_CANT_GIVE 0x2
-
-#define PLAYER_HAS_TWO_USABLE_MONS 0x0
-#define PLAYER_HAS_ONE_MON 0x1
-#define PLAYER_HAS_ONE_USABLE_MON 0x2
-
-#define MON_MALE 0x00
-#define MON_FEMALE 0xFE
-#define MON_GENDERLESS 0xFF
-
-#define FRIENDSHIP_EVENT_GROW_LEVEL 0x0
-#define FRIENDSHIP_EVENT_VITAMIN 0x1 // unused
-#define FRIENDSHIP_EVENT_BATTLE_ITEM 0x2 // unused
-#define FRIENDSHIP_EVENT_LEAGUE_BATTLE 0x3
-#define FRIENDSHIP_EVENT_LEARN_TMHM 0x4
-#define FRIENDSHIP_EVENT_WALKING 0x5
-#define FRIENDSHIP_EVENT_FAINT_SMALL 0x6
-#define FRIENDSHIP_EVENT_FAINT_OUTSIDE_BATTLE 0x7
-#define FRIENDSHIP_EVENT_FAINT_LARGE 0x8
-
-#define STATUS_PRIMARY_NONE 0x0
-#define STATUS_PRIMARY_POISON 0x1
-#define STATUS_PRIMARY_PARALYSIS 0x2
-#define STATUS_PRIMARY_SLEEP 0x3
-#define STATUS_PRIMARY_FREEZE 0x4
-#define STATUS_PRIMARY_BURN 0x5
-#define STATUS_PRIMARY_POKERUS 0x6
-#define STATUS_PRIMARY_FAINTED 0x7
-
-#define MAX_TOTAL_EVS 510
-#define UNOWN_FORM_COUNT 28
-
struct PokemonSubstruct0
{
u16 species;
@@ -145,8 +15,8 @@ struct PokemonSubstruct0
struct PokemonSubstruct1
{
- u16 moves[4];
- u8 pp[4];
+ u16 moves[MAX_MON_MOVES];
+ u8 pp[MAX_MON_MOVES];
};
struct PokemonSubstruct2
@@ -273,7 +143,7 @@ struct BattlePokemon
/*0x06*/ u16 speed;
/*0x08*/ u16 spAttack;
/*0x0A*/ u16 spDefense;
- /*0x0C*/ u16 moves[4];
+ /*0x0C*/ u16 moves[MAX_MON_MOVES];
/*0x14*/ u32 hpIV:5;
/*0x14*/ u32 attackIV:5;
/*0x15*/ u32 defenseIV:5;
@@ -287,7 +157,7 @@ struct BattlePokemon
/*0x21*/ u8 type1;
/*0x22*/ u8 type2;
/*0x23*/ u8 unknown;
- /*0x24*/ u8 pp[4];
+ /*0x24*/ u8 pp[MAX_MON_MOVES];
/*0x28*/ u16 hp;
/*0x2A*/ u8 level;
/*0x2B*/ u8 friendship;
@@ -348,13 +218,6 @@ struct BattleMove
u8 flags;
};
-#define FLAG_MAKES_CONTACT 0x1
-#define FLAG_PROTECT_AFFECTED 0x2
-#define FLAG_MAGICCOAT_AFFECTED 0x4
-#define FLAG_SNATCH_AFFECTED 0x8
-#define FLAG_MIRROR_MOVE_AFFECTED 0x10
-#define FLAG_KINGSROCK_AFFECTED 0x20
-
struct SpindaSpot
{
u8 x, y;
@@ -367,46 +230,6 @@ struct __attribute__((packed)) LevelUpMove
u16 level:7;
};
-enum
-{
- GROWTH_MEDIUM_FAST,
- GROWTH_ERRATIC,
- GROWTH_FLUCTUATING,
- GROWTH_MEDIUM_SLOW,
- GROWTH_FAST,
- GROWTH_SLOW
-};
-
-enum
-{
- BODY_COLOR_RED,
- BODY_COLOR_BLUE,
- BODY_COLOR_YELLOW,
- BODY_COLOR_GREEN,
- BODY_COLOR_BLACK,
- BODY_COLOR_BROWN,
- BODY_COLOR_PURPLE,
- BODY_COLOR_GRAY,
- BODY_COLOR_WHITE,
- BODY_COLOR_PINK
-};
-
-#define EVO_FRIENDSHIP 0x0001 // Pokémon levels up with friendship ≥ 220
-#define EVO_FRIENDSHIP_DAY 0x0002 // Pokémon levels up during the day with friendship ≥ 220
-#define EVO_FRIENDSHIP_NIGHT 0x0003 // Pokémon levels up at night with friendship ≥ 220
-#define EVO_LEVEL 0x0004 // Pokémon reaches the specified level
-#define EVO_TRADE 0x0005 // Pokémon is traded
-#define EVO_TRADE_ITEM 0x0006 // Pokémon is traded while it's holding the specified item
-#define EVO_ITEM 0x0007 // specified item is used on Pokémon
-#define EVO_LEVEL_ATK_GT_DEF 0x0008 // Pokémon reaches the specified level with attack > defense
-#define EVO_LEVEL_ATK_EQ_DEF 0x0009 // Pokémon reaches the specified level with attack = defense
-#define EVO_LEVEL_ATK_LT_DEF 0x000a // Pokémon reaches the specified level with attack < defense
-#define EVO_LEVEL_SILCOON 0x000b // Pokémon reaches the specified level with a Silcoon personality value
-#define EVO_LEVEL_CASCOON 0x000c // Pokémon reaches the specified level with a Cascoon personality value
-#define EVO_LEVEL_NINJASK 0x000d // Pokémon reaches the specified level (special value for Ninjask)
-#define EVO_LEVEL_SHEDINJA 0x000e // Pokémon reaches the specified level (special value for Shedinja)
-#define EVO_BEAUTY 0x000f // Pokémon levels up with beauty ≥ specified value
-
struct Evolution
{
u16 method;
@@ -414,8 +237,6 @@ struct Evolution
u16 targetSpecies;
};
-#define EVOS_PER_MON 5
-
extern u8 gPlayerPartyCount;
extern struct Pokemon gPlayerParty[PARTY_SIZE];
extern u8 gEnemyPartyCount;
@@ -506,7 +327,7 @@ u8 CalculatePlayerPartyCount(void);
u8 CalculateEnemyPartyCount(void);
u8 GetMonsStateToDoubles(void);
u8 GetMonsStateToDoubles_2(void);
-u8 GetAbilityBySpecies(u16 species, bool8 abilityNum);
+u8 GetAbilityBySpecies(u16 species, u8 abilityNum);
u8 GetMonAbility(struct Pokemon *mon);
void CreateSecretBaseEnemyParty(struct SecretBase *secretBaseRecord);
u8 GetSecretBaseTrainerPicIndex(void);
diff --git a/include/pokenav.h b/include/pokenav.h
index db32e3029..b1c3287f1 100644
--- a/include/pokenav.h
+++ b/include/pokenav.h
@@ -56,6 +56,32 @@ enum
POKENAV_MENU_E,
};
+enum
+{
+ MC_HEADER_MR_STONE,
+ MC_HEADER_PROF_BIRCH,
+ MC_HEADER_BRENDAN,
+ MC_HEADER_MAY,
+ MC_HEADER_WALLY,
+ MC_HEADER_NORMAN,
+ MC_HEADER_MOM,
+ MC_HEADER_STEVEN,
+ MC_HEADER_SCOTT,
+ MC_HEADER_ROXANNE,
+ MC_HEADER_BRAWLY,
+ MC_HEADER_WATTSON,
+ MC_HEADER_FLANNERY,
+ MC_HEADER_WINONA,
+ MC_HEADER_TATE_LIZA,
+ MC_HEADER_JUAN,
+ MC_HEADER_SIDNEY,
+ MC_HEADER_PHOEBE,
+ MC_HEADER_GLACIA,
+ MC_HEADER_DRAKE,
+ MC_HEADER_WALLACE,
+ MC_HEADER_COUNT
+};
+
// pokenav.c
void sub_81C7694(u32);
u32 sub_81C76AC(void);
@@ -109,15 +135,15 @@ bool32 sub_81C81D4(const struct BgTemplate *arg0, struct MatchCallListTemplate *
void sub_81C8234(void);
// pokenav_match_call_data.c
-bool32 sub_81D17E8(u32 idx);
+bool32 MatchCall_HasCheckPage(u32 idx);
u8 MatchCallMapSecGetByIndex(u32 idx);
bool32 sub_81D1BF8(u32 idx);
bool32 MatchCallFlagGetByIndex(u32 idx);
u32 MatchCall_GetRematchTableIdx(u32 idx);
u32 GetTrainerIdxByRematchIdx(u32 rematchIdx);
-int sub_81D1BD0(u32 idx);
+int MatchCall_GetOverrideFacilityClass(u32 idx);
void MatchCall_GetMessage(u32 idx, u8 *dest);
-const u8 *sub_81D1B40(u32 idx, u32 offset);
+const u8 *MatchCall_GetOverrideFlavorText(u32 idx, u32 offset);
void sub_81D1A78(u32 idx, const u8 **desc, const u8 **name);
// pokenav_main_menu.c
diff --git a/include/script_menu.h b/include/script_menu.h
index efb51870b..086ad147f 100644
--- a/include/script_menu.h
+++ b/include/script_menu.h
@@ -1,20 +1,20 @@
#ifndef GUARD_SCRIPT_MENU_H
#define GUARD_SCRIPT_MENU_H
-extern const u8 *const gUnknown_0858BAF0[];
+extern const u8 *const gStdStrings[];
-bool8 ScriptMenu_Multichoice(u8 left, u8 top, u8 var3, u8 var4);
-bool8 ScriptMenu_MultichoiceWithDefault(u8 left, u8 top, u8 var3, u8 var4, u8 var5);
-bool8 ScriptMenu_YesNo(u8 var1, u8 var2);
-bool8 ScriptMenu_MultichoiceGrid(u8 left, u8 top, u8 multichoiceId, u8 a4, u8 columnCount);
-bool8 ScriptMenu_ShowPokemonPic(u16 var1, u8 var2, u8 var3);
+bool8 ScriptMenu_Multichoice(u8 left, u8 top, u8 multichoiceId, bool8 ignoreBPress);
+bool8 ScriptMenu_MultichoiceWithDefault(u8 left, u8 top, u8 multichoiceId, bool8 ignoreBPress, u8 defaultChoice);
+bool8 ScriptMenu_YesNo(u8 left, u8 top);
+bool8 ScriptMenu_MultichoiceGrid(u8 left, u8 top, u8 multichoiceId, bool8 ignoreBPress, u8 columnCount);
+bool8 ScriptMenu_ShowPokemonPic(u16 species, u8 x, u8 y);
bool8 (*ScriptMenu_GetPicboxWaitFunc(void))(void);
-int convert_pixel_width_to_tile_width(int);
-u8 CreateWindowFromRect(u8, u8, u8, u8);
-void ClearToTransparentAndRemoveWindow(u8);
-int display_text_and_get_width(const u8*, int);
-int sub_80E2D5C(int arg0, int tileWidth);
-bool16 ScrSpecial_CreatePCMenu(void);
+int ConvertPixelWidthToTileWidth(int width);
+u8 CreateWindowFromRect(u8 x, u8 y, u8 width, u8 height);
+void ClearToTransparentAndRemoveWindow(u8 windowId);
+int DisplayTextAndGetWidth(const u8* str, int width);
+int ScriptMenu_AdjustLeftCoordFromWidth(int left, int width);
+bool16 ScriptMenu_CreatePCMultichoice(void);
void ScriptMenu_DisplayPCStartupPrompt(void);
#endif //GUARD_SCRIPT_MENU_H
diff --git a/include/script_movement.h b/include/script_movement.h
index 4c3fa6002..f9a97cf46 100644
--- a/include/script_movement.h
+++ b/include/script_movement.h
@@ -1,8 +1,8 @@
#ifndef GUARD_SCRIPT_MOVEMENT_H
#define GUARD_SCRIPT_MOVEMENT_H
-bool8 ScriptMovement_StartObjectMovementScript(u8, u8, u8, const u8 *);
-bool8 ScriptMovement_IsObjectMovementFinished(u8, u8, u8);
-void sub_80D338C(void);
+bool8 ScriptMovement_StartObjectMovementScript(u8 localId, u8 mapNum, u8 mapGroup, const u8 *movementScript);
+bool8 ScriptMovement_IsObjectMovementFinished(u8 localId, u8 mapNum, u8 mapGroup);
+void ScriptMovement_UnfreezeEventObjects(void);
#endif // GUARD_SCRIPT_MOVEMENT_H
diff --git a/include/slot_machine.h b/include/slot_machine.h
index d441b7411..1b22e165f 100644
--- a/include/slot_machine.h
+++ b/include/slot_machine.h
@@ -4,6 +4,7 @@
#define NUM_REELS 3
#define REEL_NUM_TAGS 21
#define REEL_TAG_HEIGHT 24
+#define SLOT_MACHINE_COUNT 12
// Lucky Flags
#define LUCKY_BIAS_REPLAY (1 << 0)
diff --git a/include/strings.h b/include/strings.h
index 7e7fcd322..c1414269a 100644
--- a/include/strings.h
+++ b/include/strings.h
@@ -758,31 +758,29 @@ extern const u8 BattleFrontier_Lounge2_Text_26174D[];
extern const u8 BattleFrontier_Lounge2_Text_2617F9[];
extern const u8 BattleFrontier_Lounge2_Text_2618C4[];
-extern const u8 BattleFrontier_Lounge5_Text_26468D[];
-extern const u8 BattleFrontier_Lounge5_Text_2646E5[];
-extern const u8 BattleFrontier_Lounge5_Text_264741[];
-extern const u8 BattleFrontier_Lounge5_Text_2647A4[];
-extern const u8 BattleFrontier_Lounge5_Text_2647FC[];
-extern const u8 BattleFrontier_Lounge5_Text_264858[];
-extern const u8 BattleFrontier_Lounge5_Text_2648BE[];
-extern const u8 BattleFrontier_Lounge5_Text_264916[];
-extern const u8 BattleFrontier_Lounge5_Text_264972[];
-extern const u8 BattleFrontier_Lounge5_Text_2649D5[];
-extern const u8 BattleFrontier_Lounge5_Text_264A3F[];
-extern const u8 BattleFrontier_Lounge5_Text_264A9B[];
-extern const u8 BattleFrontier_Lounge5_Text_264AF3[];
-extern const u8 BattleFrontier_Lounge5_Text_264B5D[];
-extern const u8 BattleFrontier_Lounge5_Text_2648BE[];
-extern const u8 BattleFrontier_Lounge5_Text_264BC3[];
-extern const u8 BattleFrontier_Lounge5_Text_264C36[];
-extern const u8 BattleFrontier_Lounge5_Text_2648BE[];
-extern const u8 BattleFrontier_Lounge5_Text_264C95[];
-extern const u8 BattleFrontier_Lounge5_Text_264D01[];
-extern const u8 BattleFrontier_Lounge5_Text_264D6B[];
-extern const u8 BattleFrontier_Lounge5_Text_264DD7[];
-extern const u8 BattleFrontier_Lounge5_Text_264E33[];
-extern const u8 BattleFrontier_Lounge5_Text_264E8F[];
-extern const u8 BattleFrontier_Lounge5_Text_2648BE[];
+// Battle Frontier Nature Girl
+extern const u8 BattleFrontier_Lounge5_Text_NatureGirlHardy[];
+extern const u8 BattleFrontier_Lounge5_Text_NatureGirlLonely[];
+extern const u8 BattleFrontier_Lounge5_Text_NatureGirlBrave[];
+extern const u8 BattleFrontier_Lounge5_Text_NatureGirlAdamant[];
+extern const u8 BattleFrontier_Lounge5_Text_NatureGirlNaughty[];
+extern const u8 BattleFrontier_Lounge5_Text_NatureGirlBold[];
+extern const u8 BattleFrontier_Lounge5_Text_NatureGirlDocileNaiveQuietQuirky[];
+extern const u8 BattleFrontier_Lounge5_Text_NatureGirlRelaxed[];
+extern const u8 BattleFrontier_Lounge5_Text_NatureGirlImpish[];
+extern const u8 BattleFrontier_Lounge5_Text_NatureGirlLax[];
+extern const u8 BattleFrontier_Lounge5_Text_NatureGirlTimid[];
+extern const u8 BattleFrontier_Lounge5_Text_NatureGirlHasty[];
+extern const u8 BattleFrontier_Lounge5_Text_NatureGirlSerious[];
+extern const u8 BattleFrontier_Lounge5_Text_NatureGirlJolly[];
+extern const u8 BattleFrontier_Lounge5_Text_NatureGirlModest[];
+extern const u8 BattleFrontier_Lounge5_Text_NatureGirlMild[];
+extern const u8 BattleFrontier_Lounge5_Text_NatureGirlBashful[];
+extern const u8 BattleFrontier_Lounge5_Text_NatureGirlRash[];
+extern const u8 BattleFrontier_Lounge5_Text_NatureGirlCalm[];
+extern const u8 BattleFrontier_Lounge5_Text_NatureGirlGentle[];
+extern const u8 BattleFrontier_Lounge5_Text_NatureGirlSassy[];
+extern const u8 BattleFrontier_Lounge5_Text_NatureGirlCareful[];
extern const u8 BattleFrontier_Lounge3_Text_262261[];
extern const u8 BattleFrontier_Lounge3_Text_26230D[];
@@ -1024,81 +1022,76 @@ extern const u8 gText_PokenavRibbons_RibbonListButtons[];
extern const u8 gText_PokenavRibbons_RibbonCheckButtons[];
extern const u8 gText_Number2[];
-extern const u8 gUnknown_085EAD37[];
-extern const u8 gUnknown_085EAD41[];
-extern const u8 gUnknown_085EAD67[];
-extern const u8 gUnknown_085EAD6D[];
-extern const u8 gUnknown_085EAD72[];
-extern const u8 gUnknown_085EAD84[];
-extern const u8 gUnknown_085EAD96[];
-extern const u8 gUnknown_085EADA4[];
-extern const u8 gUnknown_085EADB5[];
-extern const u8 gUnknown_085EADC4[];
-extern const u8 gUnknown_085EADD5[];
-extern const u8 gUnknown_085EADE7[];
-extern const u8 gUnknown_085EADF9[];
-extern const u8 gUnknown_085EAE04[];
-extern const u8 gUnknown_085EAE12[];
-extern const u8 gUnknown_085EAE1B[];
-extern const u8 gUnknown_085EAE27[];
-extern const u8 gUnknown_085EAE2C[];
-extern const u8 gUnknown_085EAE31[];
-extern const u8 gUnknown_085EAE35[];
-extern const u8 gUnknown_085EAE39[];
-extern const u8 gUnknown_085EAE3D[];
-extern const u8 gUnknown_085EAE41[];
-extern const u8 gUnknown_085EAD5F[];
-extern const u8 gUnknown_085EAE53[];
-extern const u8 gUnknown_085EAE5A[];
+extern const u8 gText_Petalburg[];
+extern const u8 gText_Slateport[];
+extern const u8 gText_Enter2[];
+extern const u8 gText_Info2[];
+extern const u8 gText_WhatsAContest[];
+extern const u8 gText_TypesOfContests[];
+extern const u8 gText_Ranks[];
+extern const u8 gText_Decoration2[];
+extern const u8 gText_PackUp[];
+extern const u8 gText_Registry[];
+extern const u8 gText_Information[];
+extern const u8 gText_Mach[];
+extern const u8 gText_Acro[];
+extern const u8 gText_Psn[];
+extern const u8 gText_Par[];
+extern const u8 gText_Slp[];
+extern const u8 gText_Brn[];
+extern const u8 gText_Frz[];
+extern const u8 gText_Dewford[];
+extern const u8 gText_SawIt[];
+extern const u8 gText_NotYet[];
extern const u8 gText_Yes[];
extern const u8 gText_No[];
-extern const u8 gUnknown_085EAEA2[];
-extern const u8 gUnknown_085EAEAC[];
-extern const u8 gUnknown_0827ECBC[];
-extern const u8 gUnknown_0827ECC3[];
-extern const u8 gUnknown_0827ECCD[];
-extern const u8 gUnknown_0827ECD5[];
-extern const u8 gUnknown_0827ECDD[];
-extern const u8 gUnknown_0827ECE3[];
-extern const u8 gUnknown_0827ECEB[];
-extern const u8 gUnknown_0827ECF2[];
-extern const u8 gUnknown_0827ECF8[];
-extern const u8 gUnknown_0827ED00[];
-extern const u8 gUnknown_0827ED06[];
-extern const u8 gUnknown_0827ED10[];
-extern const u8 gUnknown_0827ED18[];
-extern const u8 gUnknown_0827ED22[];
-extern const u8 gUnknown_0827ED2C[];
-extern const u8 gUnknown_0827ED36[];
-extern const u8 gUnknown_0827ED40[];
-extern const u8 gUnknown_0827ED46[];
-extern const u8 gUnknown_0827ED4F[];
-extern const u8 gUnknown_0827ED59[];
-extern const u8 gUnknown_0827ED65[];
-extern const u8 gUnknown_0827ED70[];
-extern const u8 gUnknown_0827ED74[];
-extern const u8 gUnknown_0827ED78[];
-extern const u8 gUnknown_0827ED80[];
-extern const u8 gUnknown_0827ED95[];
-extern const u8 gUnknown_0827EDAA[];
-extern const u8 gUnknown_0827EDB5[];
-extern const u8 gUnknown_0827EDBA[];
-extern const u8 gUnknown_0827EDC1[];
-extern const u8 gUnknown_0827EDC9[];
-extern const u8 gUnknown_0827EDD5[];
-extern const u8 gUnknown_0827EDE4[];
-extern const u8 gUnknown_0827EDF0[];
-extern const u8 gUnknown_0827EDF5[];
-extern const u8 gUnknown_0827EDF7[];
-extern const u8 gUnknown_0827EDF9[];
-extern const u8 gUnknown_0827EDFB[];
-extern const u8 gUnknown_0827EDFD[];
-extern const u8 gUnknown_0827EDFF[];
-extern const u8 gUnknown_0827EE01[];
-extern const u8 gUnknown_0827EE03[];
-extern const u8 gUnknown_0827EE05[];
-extern const u8 gUnknown_0827EE07[];
-extern const u8 gUnknown_0827EE09[];
+extern const u8 gText_Challenge[];
+extern const u8 gText_Info3[];
+extern const u8 gTrickHouse_Mechadoll_Oddish[];
+extern const u8 gTrickHouse_Mechadoll_Poochyena[];
+extern const u8 gTrickHouse_Mechadoll_Taillow[];
+extern const u8 gTrickHouse_Mechadoll_Azurill[];
+extern const u8 gTrickHouse_Mechadoll_Lotad[];
+extern const u8 gTrickHouse_Mechadoll_Wingull[];
+extern const u8 gTrickHouse_Mechadoll_Dustox[];
+extern const u8 gTrickHouse_Mechadoll_Zubat[];
+extern const u8 gTrickHouse_Mechadoll_Nincada[];
+extern const u8 gTrickHouse_Mechadoll_Ralts[];
+extern const u8 gTrickHouse_Mechadoll_Zigzagoon[];
+extern const u8 gTrickHouse_Mechadoll_Slakoth[];
+extern const u8 gTrickHouse_Mechadoll_Poochyena2[];
+extern const u8 gTrickHouse_Mechadoll_Shroomish[];
+extern const u8 gTrickHouse_Mechadoll_Zigzagoon2[];
+extern const u8 gTrickHouse_Mechadoll_Poochyena3[];
+extern const u8 gTrickHouse_Mechadoll_Zubat2[];
+extern const u8 gTrickHouse_Mechadoll_Carvanha[];
+extern const u8 gTrickHouse_Mechadoll_BurnHeal[];
+extern const u8 gTrickHouse_Mechadoll_HarborMail[];
+extern const u8 gTrickHouse_Mechadoll_SamePrice[];
+extern const u8 gTrickHouse_Mechadoll_60Yen[];
+extern const u8 gTrickHouse_Mechadoll_55Yen[];
+extern const u8 gTrickHouse_Mechadoll_Nothing[];
+extern const u8 gTrickHouse_Mechadoll_CostMore[];
+extern const u8 gTrickHouse_Mechadoll_CostLess[];
+extern const u8 gTrickHouse_Mechadoll_SamePrice2[];
+extern const u8 gTrickHouse_Mechadoll_Male[];
+extern const u8 gTrickHouse_Mechadoll_Female[];
+extern const u8 gTrickHouse_Mechadoll_Neither[];
+extern const u8 gTrickHouse_Mechadoll_ElderlyMen[];
+extern const u8 gTrickHouse_Mechadoll_ElderlyLadies[];
+extern const u8 gTrickHouse_Mechadoll_SameNumber[];
+extern const u8 gTrickHouse_Mechadoll_None[];
+extern const u8 gTrickHouse_Mechadoll_One[];
+extern const u8 gTrickHouse_Mechadoll_Two[];
+extern const u8 gTrickHouse_Mechadoll_Two2[];
+extern const u8 gTrickHouse_Mechadoll_Three[];
+extern const u8 gTrickHouse_Mechadoll_Four[];
+extern const u8 gTrickHouse_Mechadoll_Six[];
+extern const u8 gTrickHouse_Mechadoll_Seven[];
+extern const u8 gTrickHouse_Mechadoll_Eight[];
+extern const u8 gTrickHouse_Mechadoll_Six2[];
+extern const u8 gTrickHouse_Mechadoll_Seven2[];
+extern const u8 gTrickHouse_Mechadoll_Eight2[];
// Pokedex strings
extern const u8 gUnknown_085E87A5[];
@@ -1149,65 +1142,64 @@ extern const u8 gText_DexEmptyString[];
extern const u8 gText_DexSearchDontSpecify[];
extern const u8 gText_DexSearchTypeNone[];
-extern const u8 gUnknown_085EAEC3[];
-extern const u8 gUnknown_085EAED6[];
-extern const u8 gUnknown_085EAEE6[];
-extern const u8 gUnknown_085EAEF6[];
-extern const u8 gUnknown_085EAF02[];
-extern const u8 gUnknown_085EAF0E[];
-extern const u8 gUnknown_085EAF1B[];
-extern const u8 gUnknown_085EAF24[];
-extern const u8 gUnknown_085EAF2F[];
-extern const u8 gUnknown_085EAF34[];
-extern const u8 gUnknown_085EAF3E[];
-extern const u8 gUnknown_085EAF4B[];
-extern const u8 gUnknown_085EAF58[];
-extern const u8 gUnknown_085EAF65[];
-extern const u8 gUnknown_085EAF70[];
-extern const u8 gUnknown_085EAF7D[];
-extern const u8 gUnknown_085EAF87[];
-extern const u8 gUnknown_085EAF93[];
-extern const u8 gUnknown_085EAF9F[];
-extern const u8 gUnknown_085EAFAB[];
-extern const u8 gUnknown_085EAFB6[];
-extern const u8 gUnknown_085EAFCF[];
-extern const u8 gUnknown_085EAFE8[];
-extern const u8 gUnknown_085EB089[];
-extern const u8 gUnknown_085EB09C[];
-extern const u8 gUnknown_085EB0AF[];
-extern const u8 gUnknown_085EB0C2[];
-extern const u8 gUnknown_085EB0D5[];
-extern const u8 gUnknown_085EB002[];
-extern const u8 gUnknown_085EB017[];
-extern const u8 gUnknown_085EB02A[];
-extern const u8 gUnknown_085EB034[];
+extern const u8 gText_FreshWaterAndPrice[];
+extern const u8 gText_SodaPopAndPrice[];
+extern const u8 gText_LemonadeAndPrice[];
+extern const u8 gText_HowToRide[];
+extern const u8 gText_HowToTurn[];
+extern const u8 gText_SandySlopes[];
+extern const u8 gText_Wheelies[];
+extern const u8 gText_BunnyHops[];
+extern const u8 gText_Jump[];
+extern const u8 gText_Satisfied[];
+extern const u8 gText_Dissatisfied[];
+extern const u8 gText_DeepSeaTooth[];
+extern const u8 gText_DeepSeaScale[];
+extern const u8 gText_BlueFlute2[];
+extern const u8 gText_YellowFlute2[];
+extern const u8 gText_RedFlute2[];
+extern const u8 gText_WhiteFlute2[];
+extern const u8 gText_BlackFlute2[];
+extern const u8 gText_GlassChair[];
+extern const u8 gText_GlassDesk[];
+extern const u8 gText_TreeckoDollAndPrice[];
+extern const u8 gText_TorchicDollAndPrice[];
+extern const u8 gText_MudkipDollAndPrice[];
+extern const u8 gText_TM32AndPrice[];
+extern const u8 gText_TM29AndPrice[];
+extern const u8 gText_TM35AndPrice[];
+extern const u8 gText_TM24AndPrice[];
+extern const u8 gText_TM13AndPrice[];
+extern const u8 gText_50CoinsAndPrice[];
+extern const u8 gText_500CoinsAndPrice[];
+extern const u8 gText_Excellent2[];
+extern const u8 gText_NotSoGood[];
extern const u8 gText_LilycoveCity[];
-extern const u8 gUnknown_085EB07E[];
-extern const u8 gUnknown_085EB084[];
-extern const u8 gUnknown_085EB040[];
-extern const u8 gUnknown_085EB04A[];
-extern const u8 gUnknown_085EB057[];
-extern const u8 gUnknown_085EB062[];
+extern const u8 gText_Right[];
+extern const u8 gText_Left[];
+extern const u8 gText_RedShard[];
+extern const u8 gText_YellowShard[];
+extern const u8 gText_BlueShard[];
+extern const u8 gText_GreenShard[];
extern const u8 gText_Opponent[];
extern const u8 gText_Tourney_Tree[];
extern const u8 gText_ReadyToStart[];
-extern const u8 gUnknown_085EB5BC[];
-extern const u8 gUnknown_085EB5C3[];
-extern const u8 gUnknown_085EB5C8[];
-extern const u8 gUnknown_085EB29A[];
-extern const u8 gUnknown_085EB2A3[];
-extern const u8 gUnknown_085EB372[];
-extern const u8 gUnknown_085EB37F[];
-extern const u8 gUnknown_085EB389[];
-extern const u8 gUnknown_085EAE6E[];
-extern const u8 gUnknown_085EAE7C[];
-extern const u8 gUnknown_085EAE8A[];
-extern const u8 gUnknown_085EAD6D[];
-extern const u8 gUnknown_085EB397[];
-extern const u8 gUnknown_085EB3A4[];
-extern const u8 gUnknown_085EB3B1[];
-extern const u8 gUnknown_085EB3D4[];
-extern const u8 gUnknown_085EB3C6[];
+extern const u8 gText_Record2[];
+extern const u8 gText_Rest[];
+extern const u8 gText_Retire[];
+extern const u8 gText_RedTent[];
+extern const u8 gText_BlueTent[];
+extern const u8 gText_TradeCenter[];
+extern const u8 gText_Colosseum[];
+extern const u8 gText_RecordCorner[];
+extern const u8 gText_SingleBattle[];
+extern const u8 gText_DoubleBattle[];
+extern const u8 gText_MultiBattle[];
+extern const u8 gText_BerryCrush3[];
+extern const u8 gText_PokemonJump[];
+extern const u8 gText_DodrioBerryPicking[];
+extern const u8 gText_JoinGroup[];
+extern const u8 gText_BecomeLeader[];
extern const u8 gText_NormalRank[];
extern const u8 gText_SuperRank[];
extern const u8 gText_HyperRank[];
@@ -1219,56 +1211,56 @@ extern const u8 gText_AboutE_Mode[];
extern const u8 gText_AboutG_Mode[];
extern const u8 gText_E_Mode[];
extern const u8 gText_G_Mode[];
-extern const u8 gUnknown_085EB278[];
-extern const u8 gUnknown_085EB28A[];
-extern const u8 gUnknown_085EB290[];
-extern const u8 gUnknown_085EB295[];
-extern const u8 gUnknown_085EB2E4[];
-extern const u8 gUnknown_085EB2F0[];
-extern const u8 gUnknown_085EB2FC[];
-extern const u8 gUnknown_085EB3DF[];
-extern const u8 gUnknown_085EB3EA[];
-extern const u8 gUnknown_085EB3F1[];
-extern const u8 gUnknown_085EB3FC[];
-extern const u8 gUnknown_085EB40A[];
-extern const u8 gUnknown_085EB415[];
-extern const u8 gUnknown_085EB41D[];
-extern const u8 gUnknown_085EB424[];
-extern const u8 gUnknown_085EB45C[];
-extern const u8 gUnknown_085EB469[];
-extern const u8 gUnknown_085EB475[];
-extern const u8 gUnknown_085EB482[];
-extern const u8 gUnknown_085EB42F[];
-extern const u8 gUnknown_085EB43A[];
-extern const u8 gUnknown_085EB444[];
-extern const u8 gUnknown_085EB451[];
-extern const u8 gUnknown_085EB48E[];
-extern const u8 gUnknown_085EB496[];
-extern const u8 gUnknown_085EB4A3[];
-extern const u8 gUnknown_085EB4AD[];
-extern const u8 gUnknown_085EB4B9[];
-extern const u8 gUnknown_085EB4C7[];
-extern const u8 gUnknown_085EB4D4[];
-extern const u8 gUnknown_085EB4E0[];
-extern const u8 gUnknown_085EB532[];
-extern const u8 gUnknown_085EB543[];
-extern const u8 gUnknown_085EB555[];
-extern const u8 gUnknown_085EB563[];
-extern const u8 gUnknown_085EB56E[];
-extern const u8 gUnknown_085EB57E[];
-extern const u8 gUnknown_085EB589[];
-extern const u8 gUnknown_085EB5B6[];
-extern const u8 gUnknown_085EE14B[];
-extern const u8 gUnknown_085EE14F[];
-extern const u8 gUnknown_085EB2FF[];
-extern const u8 gUnknown_085EB310[];
-extern const u8 gUnknown_085EB317[];
-extern const u8 gUnknown_085EB31F[];
+extern const u8 gText_Blank[];
+extern const u8 gText_5BP[];
+extern const u8 gText_10BP[];
+extern const u8 gText_15BP[];
+extern const u8 gText_ClawFossil[];
+extern const u8 gText_RootFossil[];
+extern const u8 gText_No4[];
+extern const u8 gText_TwoStyles[];
+extern const u8 gText_Lv50_3[];
+extern const u8 gText_OpenLevel2[];
+extern const u8 gText_MonTypeAndNo[];
+extern const u8 gText_HoldItems[];
+extern const u8 gText_Symbols2[];
+extern const u8 gText_Record3[];
+extern const u8 gText_BattlePts[];
+extern const u8 gText_BattleRules[];
+extern const u8 gText_JudgeMind[];
+extern const u8 gText_JudgeSkill[];
+extern const u8 gText_JudgeBody[];
+extern const u8 gText_TowerInfo[];
+extern const u8 gText_BattleMon[];
+extern const u8 gText_BattleSalon[];
+extern const u8 gText_MultiLink2[];
+extern const u8 gText_Matchup[];
+extern const u8 gText_TourneyTree[];
+extern const u8 gText_DoubleKO[];
+extern const u8 gText_BasicRules[];
+extern const u8 gText_SwapPartners[];
+extern const u8 gText_SwapNumber[];
+extern const u8 gText_SwapNotes[];
+extern const u8 gText_OpenLevel3[];
+extern const u8 gText_PyramidPokemon[];
+extern const u8 gText_PyramidTrainers[];
+extern const u8 gText_PyramidMaze[];
+extern const u8 gText_BattleBag2[];
+extern const u8 gText_PokenavAndBag[];
+extern const u8 gText_HeldItems[];
+extern const u8 gText_PokemonOrder[];
+extern const u8 gText_GoOn[];
+extern const u8 gText_Red[];
+extern const u8 gText_Blue[];
+extern const u8 gText_IllBattleNow[];
+extern const u8 gText_IWon[];
+extern const u8 gText_ILost[];
+extern const u8 gText_IWontTell[];
extern const u8 gText_CaveOfOrigin[];
extern const u8 gText_MtPyre[];
extern const u8 gText_SkyPillar[];
extern const u8 gText_DontRemember[];
-extern const u8 gUnknown_085EB597[];
+extern const u8 gText_BattlePokemon[];
extern const u8 gText_NormalTagMatch[];
extern const u8 gText_VarietyTagMatch[];
extern const u8 gText_UniqueTagMatch[];
@@ -1281,29 +1273,15 @@ extern const u8 gText_TrainerHill2F[];
extern const u8 gText_TrainerHill3F[];
extern const u8 gText_TrainerHill4F[];
-extern const u8 OldaleTown_PokemonCenter_2F_Text_277F1B[];
-extern const u8 OldaleTown_PokemonCenter_2F_Text_277F5A[];
-extern const u8 OldaleTown_PokemonCenter_2F_Text_277F96[];
-extern const u8 OldaleTown_PokemonCenter_2F_Text_27889C[];
-extern const u8 OldaleTown_PokemonCenter_2F_Text_27879F[];
-extern const u8 OldaleTown_PokemonCenter_2F_Text_2787D5[];
-extern const u8 OldaleTown_PokemonCenter_2F_Text_278831[];
-extern const u8 OldaleTown_PokemonCenter_2F_Text_27889C[];
-extern const u8 OldaleTown_PokemonCenter_2F_Text_27879F[];
-extern const u8 OldaleTown_PokemonCenter_2F_Text_2787D5[];
-extern const u8 OldaleTown_PokemonCenter_2F_Text_2787FC[];
-extern const u8 OldaleTown_PokemonCenter_2F_Text_27889C[];
-extern const u8 OldaleTown_PokemonCenter_2F_Text_27879F[];
-extern const u8 OldaleTown_PokemonCenter_2F_Text_2787D5[];
-extern const u8 OldaleTown_PokemonCenter_2F_Text_278831[];
-extern const u8 OldaleTown_PokemonCenter_2F_Text_2787FC[];
-extern const u8 OldaleTown_PokemonCenter_2F_Text_27889C[];
-extern const u8 OldaleTown_PokemonCenter_2F_Text_277F1B[];
-extern const u8 OldaleTown_PokemonCenter_2F_Text_277F5A[];
-extern const u8 OldaleTown_PokemonCenter_2F_Text_27889C[];
-extern const u8 OldaleTown_PokemonCenter_2F_Text_27879F[];
-extern const u8 OldaleTown_PokemonCenter_2F_Text_2787D5[];
-extern const u8 OldaleTown_PokemonCenter_2F_Text_27889C[];
+// Cable Club multichoice text
+extern const u8 CableClub_Text_TradeUsingLinkCable[];
+extern const u8 CableClub_Text_BattleUsingLinkCable[];
+extern const u8 CableClub_Text_RecordCornerUsingLinkCable[];
+extern const u8 CableClub_Text_CancelSelectedItem[];
+extern const u8 CableClub_Text_YouMayTradeHere[];
+extern const u8 CableClub_Text_YouMayBattleHere[];
+extern const u8 CableClub_Text_CanMixRecords[];
+extern const u8 CableClub_Text_CanMakeBerryPowder[];
// Frontier records.
extern const u8 gText_WinStreak[];
@@ -2744,6 +2722,31 @@ extern const u8 gText_JumpsInARow[];
extern const u8 gText_BestScore2[];
extern const u8 gText_ExcellentsInARow[];
+// Lilycove Lady
+extern const u8 gText_ContestLady_Handsome[];
+extern const u8 gText_ContestLady_Vinny[];
+extern const u8 gText_ContestLady_Moreme[];
+extern const u8 gText_ContestLady_Ironhard[];
+extern const u8 gText_ContestLady_Muscle[];
+extern const u8 gText_ContestLady_Coolness[];
+extern const u8 gText_ContestLady_Beauty[];
+extern const u8 gText_ContestLady_Cuteness[];
+extern const u8 gText_ContestLady_Smartness[];
+extern const u8 gText_ContestLady_Toughness[];
+extern const u8 gText_QuizLady_Lady[];
+extern const u8 gText_FavorLady_Slippery[];
+extern const u8 gText_FavorLady_Roundish[];
+extern const u8 gText_FavorLady_Whamish[];
+extern const u8 gText_FavorLady_Shiny[];
+extern const u8 gText_FavorLady_Sticky[];
+extern const u8 gText_FavorLady_Pointy[];
+
+extern const u8 gText_CoolnessContest[];
+extern const u8 gText_BeautyContest[];
+extern const u8 gText_CutenessContest[];
+extern const u8 gText_SmartnessContest[];
+extern const u8 gText_ToughnessContest[];
+
// Pokenav Match Call
extern const u8 gText_CallCantBeMadeHere[];
extern const u8 gText_NumberRegistered[];
diff --git a/include/task.h b/include/task.h
index 4852571b4..d0ca34f7f 100644
--- a/include/task.h
+++ b/include/task.h
@@ -5,6 +5,7 @@
#define TAIL_SENTINEL 0xFF
#define NUM_TASKS 16
+#define NUM_TASK_DATA 16
typedef void (*TaskFunc)(u8 taskId);
@@ -15,7 +16,7 @@ struct Task
u8 prev;
u8 next;
u8 priority;
- s16 data[16];
+ s16 data[NUM_TASK_DATA];
};
extern struct Task gTasks[];
diff --git a/include/text.h b/include/text.h
index d3ff663bb..e37773475 100644
--- a/include/text.h
+++ b/include/text.h
@@ -114,6 +114,21 @@
// 0x7
#define TEXT_COLOR_BLUE 0x8
+#define PLACEHOLDER_ID_UNKNOWN 0x0
+#define PLACEHOLDER_ID_PLAYER 0x1
+#define PLACEHOLDER_ID_STRING_VAR_1 0x2
+#define PLACEHOLDER_ID_STRING_VAR_2 0x3
+#define PLACEHOLDER_ID_STRING_VAR_3 0x4
+#define PLACEHOLDER_ID_KUN 0x5
+#define PLACEHOLDER_ID_RIVAL 0x6
+#define PLACEHOLDER_ID_VERSION 0x7
+#define PLACEHOLDER_ID_AQUA 0x8
+#define PLACEHOLDER_ID_MAGMA 0x9
+#define PLACEHOLDER_ID_ARCHIE 0xA
+#define PLACEHOLDER_ID_MAXIE 0xB
+#define PLACEHOLDER_ID_KYOGRE 0xC
+#define PLACEHOLDER_ID_GROUDON 0xD
+
// battle placeholders are located in battle_message.h
#define NUM_TEXT_PRINTERS 32
diff --git a/include/trainer_hill.h b/include/trainer_hill.h
index e605ac654..31480287a 100644
--- a/include/trainer_hill.h
+++ b/include/trainer_hill.h
@@ -1,6 +1,52 @@
#ifndef GUARD_TRAINER_HILL_H
#define GUARD_TRAINER_HILL_H
+#define HILL_TRAINER_NAME_LENGTH 11
+
+struct TrainerHillTrainer
+{
+ u8 name[HILL_TRAINER_NAME_LENGTH];
+ u8 facilityClass;
+ u32 unused;
+ u16 speechBefore[6];
+ u16 speechWin[6];
+ u16 speechLose[6];
+ u16 speechAfter[6];
+ struct BattleTowerPokemon mons[PARTY_SIZE];
+};
+
+struct TrHillRoomTrainers
+{
+ u8 name[2][HILL_TRAINER_NAME_LENGTH];
+ u8 facilityClass[2];
+};
+
+struct TrHillDisplay
+{
+ u8 data[0x100];
+ u16 unk3A0[16];
+ u8 coords[2]; // x first 4 bits, y last 4 bits
+ u8 direction; // array of 4 bits for each trainer
+ u8 range; // array of 4 bits for each trainer
+};
+
+struct TrHillFloor
+{
+ u8 unk0;
+ u8 unk1;
+ struct TrainerHillTrainer trainers[2];
+ struct TrHillDisplay display;
+};
+
+struct TrHillTag
+{
+ u8 unkField_0;
+ u8 unused1;
+ u8 numFloors;
+ u32 checksum;
+ struct TrHillFloor floors[0];
+};
+
extern u32 *gTrainerHillVBlankCounter;
void CallTrainerHillFunction(void);
diff --git a/ld_script.txt b/ld_script.txt
index 8d451338c..4247fca4d 100644
--- a/ld_script.txt
+++ b/ld_script.txt
@@ -47,7 +47,7 @@ SECTIONS {
.text :
ALIGN(4)
{
- asm/crt0.o(.text);
+ src/crt0.o(.text);
src/main.o(.text);
src/alloc.o(.text);
src/dma3_manager.o(.text);
@@ -348,8 +348,8 @@ SECTIONS {
lib_text :
ALIGN(4)
{
- asm/libgcnmultiboot.o(.text);
- asm/m4a_1.o(.text);
+ src/libgcnmultiboot.o(.text);
+ src/m4a_1.o(.text);
src/m4a.o(.text);
src/agb_flash.o(.text);
src/agb_flash_1m.o(.text);
@@ -360,7 +360,8 @@ SECTIONS {
asm/librfu_intr.o(.text);
src/librfu_rfu.o(.text);
asm/librfu.o(.text);
- asm/libagbsyscall.o(.text);
+ src/libisagbprn.o(.text);
+ src/libagbsyscall.o(.text);
*libgcc.a:_call_via_rX.o(.text);
*libgcc.a:_divdi3.o(.text);
*libgcc.a:_divsi3.o(.text);
@@ -380,38 +381,39 @@ SECTIONS {
*libc.a:memset.o(.text);
*libc.a:strcmp.o(.text);
*libc.a:strcpy.o(.text);
- *libc.a:vfprintf.o(.text);
+ *libc.a:impure.o(.text);
*libc.a:vsprintf.o(.text);
+ *libc.a:vfprintf.o(.text);
+ *libc.a:wsetup.o(.text);
+ *libc.a:dtoa.o(.text);
+ *libc.a:fflush.o(.text);
+ *libc.a:findfp.o(.text);
+ *libc.a:freer.o(.text);
+ *libc.a:mtrim.o(.text);
*libc.a:fvwrite.o(.text);
+ *libc.a:fwalk.o(.text);
*libc.a:locale.o(.text);
- *libc.a:findfp.o(.text);
- *libc.a:fflush.o(.text);
- *libc.a:wsetup.o(.text);
+ *libc.a:makebuf.o(.text);
+ *libc.a:mallocr.o(.text);
*libc.a:mbtowc_r.o(.text);
- *libc.a:s_isinf.o(.text);
- *libc.a:s_isnan.o(.text);
*libc.a:memchr.o(.text);
- *libc.a:strlen.o(.text);
- *libc.a:dtoa.o(.text);
*libc.a:memmove.o(.text);
- *libc.a:stdio.o(.text);
+ *libc.a:mlock.o(.text);
*libc.a:mprec.o(.text);
- *libc.a:mallocr.o(.text);
- *libc.a:fwalk.o(.text);
- *libc.a:freer.o(.text);
- *libc.a:makebuf.o(.text);
- *libc.a:readr.o(.text);
+ *libc.a:s_isinf.o(.text);
+ *libc.a:s_isnan.o(.text);
+ *libc.a:sbrkr.o(.text);
+ *libc.a:stdio.o(.text);
+ *libc.a:strlen.o(.text);
+ *libc.a:syscalls.o(.text);
*libc.a:writer.o(.text);
- *libc.a:lseekr.o(.text);
- *libc.a:closer.o(.text);
*libc.a:callocr.o(.text);
- *libc.a:sbrkr.o(.text);
- *libc.a:mlock.o(.text);
+ *libc.a:closer.o(.text);
+ *libc.a:errno.o(.text);
*libc.a:fstatr.o(.text);
*libc.a:libcfunc.o(.text);
- *libc.a:syscalls.o(.text);
- *libc.a:errno.o(.text);
- src/libisagbprn.o(.text);
+ *libc.a:lseekr.o(.text);
+ *libc.a:readr.o(.text);
} =0
.rodata :
@@ -661,10 +663,8 @@ SECTIONS {
src/pokenav_match_call_data.o(.rodata);
src/menu_specialized.o(.rodata);
src/ereader_helpers.o(.rodata);
- data/ereader_helpers.o(.rodata);
src/faraway_island.o(.rodata);
src/ereader_screen.o(.rodata);
- data/ereader_screen.o(.rodata);
src/trainer_hill.o(.rodata);
src/rayquaza_scene.o(.rodata);
src/walda_phrase.o(.rodata);
diff --git a/ld_script_modern.txt b/ld_script_modern.txt
index 98ef16b17..5157e81dc 100644
--- a/ld_script_modern.txt
+++ b/ld_script_modern.txt
@@ -25,7 +25,6 @@ SECTIONS {
{
/* .bss starts at 0x3000000 */
src/*.o(.bss);
- asm/m4a_1.o(.bss);
/* .bss.code starts at 0x3001AA8 */
src/m4a.o(.bss.code);
@@ -42,7 +41,7 @@ SECTIONS {
.text :
ALIGN(4)
{
- asm/crt0.o(.text);
+ src/crt0.o(.text);
src/*.o(.text);
asm/*.o(.text);
} =0
@@ -56,8 +55,8 @@ SECTIONS {
lib_text :
ALIGN(4)
{
- asm/libgcnmultiboot.o(.text);
- asm/m4a_1.o(.text);
+ src/libgcnmultiboot.o(.text);
+ src/m4a_1.o(.text);
src/m4a.o(.text);
src/agb_flash.o(.text);
src/agb_flash_1m.o(.text);
@@ -68,7 +67,7 @@ SECTIONS {
asm/librfu_intr.o(.text);
src/librfu_rfu.o(.text);
asm/librfu.o(.text);
- asm/libagbsyscall.o(.text);
+ src/libagbsyscall.o(.text);
*libgcc.a:*.o(.text*);
*libc.a:*.o(.text*);
src/libisagbprn.o(.text);
diff --git a/src/apprentice.c b/src/apprentice.c
index 4ad295e1a..113b22f6e 100644
--- a/src/apprentice.c
+++ b/src/apprentice.c
@@ -1100,7 +1100,7 @@ void ResetAllApprenticeData(void)
gSaveBlock2Ptr->apprentices[i].lvlMode = 0;
gSaveBlock2Ptr->apprentices[i].number = 0;
gSaveBlock2Ptr->apprentices[i].field_1 = 0;
- for (j = 0; j < 4; j++)
+ for (j = 0; j < TRAINER_ID_LENGTH; j++)
gSaveBlock2Ptr->apprentices[i].playerId[j] = 0;
gSaveBlock2Ptr->apprentices[i].language = gGameLanguage;
gSaveBlock2Ptr->apprentices[i].checksum = 0;
@@ -1410,7 +1410,7 @@ static void GetLatestLearnedMoves(u16 species, u16 *moves)
static u16 sub_81A0284(u8 arg0, u8 speciesTableId, u8 arg2)
{
- u16 moves[4];
+ u16 moves[MAX_MON_MOVES];
u8 i, count;
if (PLAYER_APPRENTICE.field_B1_1 < 3)
@@ -1559,8 +1559,8 @@ static void CreateMenuWithAnswers(u8 arg0)
pixelWidth = width;
}
- width = convert_pixel_width_to_tile_width(pixelWidth);
- left = sub_80E2D5C(left, width);
+ width = ConvertPixelWidthToTileWidth(pixelWidth);
+ left = ScriptMenu_AdjustLeftCoordFromWidth(left, width);
windowId = CreateAndShowWindow(left, top, width, count * 2);
SetStandardWindowBorderStyle(windowId, 0);
@@ -2063,7 +2063,7 @@ static void sub_81A1370(void)
r10 = 0xFFFF;
r9 = -1;
- for (i = 1; i < 4; i++)
+ for (i = 1; i < TRAINER_ID_LENGTH; i++)
{
if (GetTrainerId(gSaveBlock2Ptr->apprentices[i].playerId) == GetTrainerId(gSaveBlock2Ptr->playerTrainerId)
&& gSaveBlock2Ptr->apprentices[i].number < r10)
@@ -2092,7 +2092,7 @@ static void sub_81A1438(void)
gSaveBlock2Ptr->apprentices[0].number++;
sub_81A0390(gSaveBlock2Ptr->apprentices[0].field_1);
- for (i = 0; i < 4; i++)
+ for (i = 0; i < TRAINER_ID_LENGTH; i++)
gSaveBlock2Ptr->apprentices[0].playerId[i] = gSaveBlock2Ptr->playerTrainerId[i];
StringCopy(gSaveBlock2Ptr->apprentices[0].playerName, gSaveBlock2Ptr->playerName);
diff --git a/src/battle_ai_script_commands.c b/src/battle_ai_script_commands.c
index 6e438878b..c9a6a6606 100644
--- a/src/battle_ai_script_commands.c
+++ b/src/battle_ai_script_commands.c
@@ -298,7 +298,7 @@ void BattleAI_HandleItemUseBeforeAISetup(u8 defaultScoreMoves)
)
)
{
- for (i = 0; i < 4; i++)
+ for (i = 0; i < MAX_TRAINER_ITEMS; i++)
{
if (gTrainers[gTrainerBattleOpponent_A].items[i] != 0)
{
@@ -397,8 +397,8 @@ u8 BattleAI_ChooseMoveOrAction(void)
static u8 ChooseMoveOrAction_Singles(void)
{
- u8 currentMoveArray[4];
- u8 consideredMoveArray[4];
+ u8 currentMoveArray[MAX_MON_MOVES];
+ u8 consideredMoveArray[MAX_MON_MOVES];
u8 numOfBestMoves;
s32 i;
@@ -452,11 +452,11 @@ static u8 ChooseMoveOrAction_Doubles(void)
s32 i;
s32 j;
s32 scriptsToRun;
- s16 bestMovePointsForTarget[4];
- s8 mostViableTargetsArray[4];
- u8 actionOrMoveIndex[4];
- u8 mostViableMovesScores[4];
- u8 mostViableMovesIndices[4];
+ s16 bestMovePointsForTarget[MAX_BATTLERS_COUNT];
+ s8 mostViableTargetsArray[MAX_BATTLERS_COUNT];
+ u8 actionOrMoveIndex[MAX_BATTLERS_COUNT];
+ u8 mostViableMovesScores[MAX_MON_MOVES];
+ u8 mostViableMovesIndices[MAX_MON_MOVES];
s32 mostViableTargetsNo;
s32 mostViableMovesNo;
s16 mostMovePoints;
@@ -543,7 +543,7 @@ static u8 ChooseMoveOrAction_Doubles(void)
mostViableTargetsArray[0] = 0;
mostViableTargetsNo = 1;
- for (i = 1; i < MAX_MON_MOVES; i++)
+ for (i = 1; i < MAX_BATTLERS_COUNT; i++)
{
if (mostMovePoints == bestMovePointsForTarget[i])
{
@@ -1167,7 +1167,7 @@ static void Cmd_get_considered_move_power(void)
static void Cmd_get_how_powerful_move_is(void)
{
s32 i, checkedMove;
- s32 moveDmgs[4];
+ s32 moveDmgs[MAX_MON_MOVES];
for (i = 0; sDiscouragedPowerfulMoveEffects[i] != 0xFFFF; i++)
{
diff --git a/src/battle_ai_switch_items.c b/src/battle_ai_switch_items.c
index cd31293f8..6ef359150 100644
--- a/src/battle_ai_switch_items.c
+++ b/src/battle_ai_switch_items.c
@@ -820,7 +820,7 @@ static bool8 ShouldUseItem(void)
}
}
- for (i = 0; i < 4; i++)
+ for (i = 0; i < MAX_TRAINER_ITEMS; i++)
{
u16 item;
const u8 *itemEffects;
diff --git a/src/battle_anim.c b/src/battle_anim.c
index 3cac9f33e..ab1e5ed6a 100644
--- a/src/battle_anim.c
+++ b/src/battle_anim.c
@@ -1841,7 +1841,7 @@ void LaunchBattleAnimation(const u8 *const animsTable[], u16 tableId, bool8 isMo
UpdateOamPriorityInAllHealthboxes(0);
for (i = 0; i < MAX_BATTLERS_COUNT; i++)
{
- if (GetBattlerSide(i) != 0)
+ if (GetBattlerSide(i) != B_SIDE_PLAYER)
gAnimBattlerSpecies[i] = GetMonData(&gEnemyParty[gBattlerPartyIndexes[i]], MON_DATA_SPECIES);
else
gAnimBattlerSpecies[i] = GetMonData(&gPlayerParty[gBattlerPartyIndexes[i]], MON_DATA_SPECIES);
diff --git a/src/battle_anim_effects_1.c b/src/battle_anim_effects_1.c
index b3a67a509..db9057cb4 100644
--- a/src/battle_anim_effects_1.c
+++ b/src/battle_anim_effects_1.c
@@ -2547,7 +2547,7 @@ static void AnimPetalDanceSmallFlowerStep(struct Sprite* sprite)
{
sprite->pos2.x += Sin(sprite->data[5], 8);
if ((u16)(sprite->data[5] - 59) < 5 || (u16)(sprite->data[5] - 187) < 5)
- sprite->oam.matrixNum ^= 0x8; // horizontal flip
+ sprite->oam.matrixNum ^= ST_OAM_HFLIP;
sprite->data[5] += 5;
sprite->data[5] &= 0xFF;
@@ -3560,7 +3560,7 @@ void sub_8100640(struct Sprite* sprite)
else
battler = gBattleAnimTarget;
- if (GetBattlerSide(battler) != 0)
+ if (GetBattlerSide(battler) != B_SIDE_PLAYER)
{
sprite->data[4] = 0;
sprite->data[2] = gBattleAnimArgs[3];
@@ -3731,7 +3731,7 @@ static void sub_81009DC(struct Sprite* sprite)
void sub_81009F8(struct Sprite* sprite)
{
- if (GetBattlerSide(gBattleAnimAttacker) != 0)
+ if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER)
{
sprite->pos1.x -= gBattleAnimArgs[0];
sprite->pos1.y += gBattleAnimArgs[1];
@@ -3828,7 +3828,7 @@ void sub_8100B88(struct Sprite* sprite)
sprite->pos1.x = a;
sprite->pos1.y = b;
- if (GetBattlerSide(gBattleAnimTarget) == 0)
+ if (GetBattlerSide(gBattleAnimTarget) == B_SIDE_PLAYER)
sprite->pos1.y += 8;
sprite->callback = AnimSliceStep;
@@ -4380,19 +4380,19 @@ void sub_8101898(struct Sprite* sprite)
{
sprite->pos1.x -= 0x18;
sprite->pos1.y += 0x18;
- sprite->oam.matrixNum = 16;
+ sprite->oam.matrixNum = ST_OAM_VFLIP;
}
else if ((s16)sprite->oam.affineParam == 3)
{
sprite->pos1.x += 0x18;
sprite->pos1.y -= 0x18;
- sprite->oam.matrixNum = 8;
+ sprite->oam.matrixNum = ST_OAM_HFLIP;
}
else
{
sprite->pos1.x += 0x18;
sprite->pos1.y += 0x18;
- sprite->oam.matrixNum = 24;
+ sprite->oam.matrixNum = ST_OAM_HFLIP | ST_OAM_VFLIP;
}
sprite->oam.tileNum = (sprite->oam.tileNum + 16);
@@ -5105,7 +5105,7 @@ void sub_8102844(struct Sprite* sprite)
sprite->data[7] = sprite->pos1.y;
if (IsContest())
{
- sprite->oam.matrixNum = 8;
+ sprite->oam.matrixNum = ST_OAM_HFLIP;
sprite->pos1.x += 40;
sprite->pos1.y += 20;
sprite->data[2] = sprite->pos1.x << 7;
@@ -5130,7 +5130,7 @@ void sub_8102844(struct Sprite* sprite)
sprite->data[3] = -0x1400 / sprite->data[1];
sprite->data[4] = sprite->pos1.y << 7;
sprite->data[5] = 0xA00 / sprite->data[1];
- sprite->oam.matrixNum = 24;
+ sprite->oam.matrixNum = (ST_OAM_HFLIP | ST_OAM_VFLIP);
}
sprite->callback = sub_810296C;
@@ -5387,7 +5387,7 @@ void sub_8102FB8(struct Sprite* sprite)
s16 a;
if (gBattleAnimArgs[0] == 1)
{
- sprite->oam.matrixNum = 8;
+ sprite->oam.matrixNum = ST_OAM_HFLIP;
a = 16;
}
else
diff --git a/src/battle_anim_effects_2.c b/src/battle_anim_effects_2.c
index 65cc55604..1add76bf3 100755
--- a/src/battle_anim_effects_2.c
+++ b/src/battle_anim_effects_2.c
@@ -1479,7 +1479,7 @@ void AnimSonicBoomProjectile(struct Sprite *sprite)
{
gBattleAnimArgs[2] = -gBattleAnimArgs[2];
}
- else if (GetBattlerSide(gBattleAnimAttacker) != 0)
+ else if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER)
{
gBattleAnimArgs[2] = -gBattleAnimArgs[2];
gBattleAnimArgs[1] = -gBattleAnimArgs[1];
@@ -1609,10 +1609,10 @@ static void sub_8103C0C(u8 taskId)
switch (gTasks[taskId].data[4])
{
case 1:
- sprite->oam.matrixNum |= 24;
+ sprite->oam.matrixNum |= (ST_OAM_HFLIP | ST_OAM_VFLIP);
break;
case 2:
- sprite->oam.matrixNum = 8;
+ sprite->oam.matrixNum = ST_OAM_HFLIP;
break;
}
@@ -1646,7 +1646,7 @@ void sub_8103CF0(u8 taskId)
}
else
{
- if ((gBattlerPositions[gBattleAnimTarget] & 1) == 0)
+ if ((gBattlerPositions[gBattleAnimTarget] & BIT_SIDE) == B_SIDE_PLAYER)
{
gTasks[taskId].data[4] = 1;
gBattleAnimArgs[0] = -gBattleAnimArgs[0];
diff --git a/src/battle_anim_effects_3.c b/src/battle_anim_effects_3.c
index 5d79a9e6b..79b728e61 100755
--- a/src/battle_anim_effects_3.c
+++ b/src/battle_anim_effects_3.c
@@ -1618,7 +1618,7 @@ void sub_815AAA4(struct Sprite *sprite)
if (gBattleAnimArgs[2] == 0)
{
- sprite->oam.matrixNum = 8;
+ sprite->oam.matrixNum = ST_OAM_HFLIP;
sprite->pos2.x = -12;
sprite->data[1] = 2;
}
@@ -4167,7 +4167,7 @@ void AnimSmellingSaltsHand(struct Sprite *sprite)
sprite->pos1.y = GetBattlerSpriteCoord(battler, 3);
if (gBattleAnimArgs[1] == 0)
{
- sprite->oam.matrixNum |= 0x8;
+ sprite->oam.matrixNum |= ST_OAM_HFLIP;
sprite->pos1.x = GetBattlerSpriteCoordAttr(battler, BATTLER_COORD_ATTR_LEFT) - 8;
}
else
@@ -4317,7 +4317,7 @@ void AnimHelpingHandClap(struct Sprite *sprite)
{
if (gBattleAnimArgs[0] == 0)
{
- sprite->oam.matrixNum |= 0x8; // horizontal flip
+ sprite->oam.matrixNum |= ST_OAM_HFLIP;
sprite->pos1.x = 100;
sprite->data[7] = 1;
}
@@ -4545,7 +4545,7 @@ void AnimForesightMagnifyingGlass(struct Sprite *sprite)
}
if (GetBattlerSide(sprite->data[7]) == B_SIDE_OPPONENT)
- sprite->oam.matrixNum = 8; // horizontal flip
+ sprite->oam.matrixNum = ST_OAM_HFLIP;
sprite->oam.priority = GetBattlerSpriteBGPriority(sprite->data[7]);
sprite->oam.objMode = ST_OAM_OBJ_BLEND;
diff --git a/src/battle_controller_player.c b/src/battle_controller_player.c
index b73bfc36f..1be5def47 100644
--- a/src/battle_controller_player.c
+++ b/src/battle_controller_player.c
@@ -664,7 +664,7 @@ u32 sub_8057FBC(void) // unused
static void HandleMoveSwitching(void)
{
- u8 perMovePPBonuses[4];
+ u8 perMovePPBonuses[MAX_MON_MOVES];
struct ChooseMoveStruct moveStruct;
u8 totalPPBonuses;
diff --git a/src/battle_controllers.c b/src/battle_controllers.c
index 4b5bb7a8a..17db0b868 100644
--- a/src/battle_controllers.c
+++ b/src/battle_controllers.c
@@ -64,7 +64,7 @@ void SetUpBattleVarsAndBirchZigzagoon(void)
if (gBattleTypeFlags & BATTLE_TYPE_FIRST_BATTLE)
{
ZeroEnemyPartyMons();
- CreateMon(&gEnemyParty[0], SPECIES_ZIGZAGOON, 2, 32, 0, 0, 0, 0);
+ CreateMon(&gEnemyParty[0], SPECIES_ZIGZAGOON, 2, 32, 0, 0, OT_ID_PLAYER_ID, 0);
i = 0;
SetMonData(&gEnemyParty[0], MON_DATA_HELD_ITEM, &i);
}
@@ -234,16 +234,16 @@ static void InitSinglePlayerBtlControllers(void)
gBattleMainFunc = BeginBattleIntro;
gBattlerControllerFuncs[0] = SetControllerToRecordedPlayer;
- gBattlerPositions[0] = 0;
+ gBattlerPositions[0] = B_POSITION_PLAYER_LEFT;
gBattlerControllerFuncs[1] = SetControllerToOpponent;
- gBattlerPositions[1] = 1;
+ gBattlerPositions[1] = B_POSITION_OPPONENT_LEFT;
gBattlerControllerFuncs[2] = SetControllerToRecordedPlayer;
- gBattlerPositions[2] = 2;
+ gBattlerPositions[2] = B_POSITION_PLAYER_RIGHT;
gBattlerControllerFuncs[3] = SetControllerToOpponent;
- gBattlerPositions[3] = 3;
+ gBattlerPositions[3] = B_POSITION_OPPONENT_RIGHT;
gBattlersCount = MAX_BATTLERS_COUNT;
@@ -524,12 +524,12 @@ static void InitLinkBtlControllers(void)
{
case 0:
case 3:
- gBattlerPositions[gLinkPlayers[i].id] = 0;
+ gBattlerPositions[gLinkPlayers[i].id] = B_POSITION_PLAYER_LEFT;
gBattlerPartyIndexes[gLinkPlayers[i].id] = 0;
break;
case 1:
case 2:
- gBattlerPositions[gLinkPlayers[i].id] = 2;
+ gBattlerPositions[gLinkPlayers[i].id] = B_POSITION_PLAYER_RIGHT;
gBattlerPartyIndexes[gLinkPlayers[i].id] = 3;
break;
}
@@ -544,12 +544,12 @@ static void InitLinkBtlControllers(void)
{
case 0:
case 3:
- gBattlerPositions[gLinkPlayers[i].id] = 0;
+ gBattlerPositions[gLinkPlayers[i].id] = B_POSITION_PLAYER_LEFT;
gBattlerPartyIndexes[gLinkPlayers[i].id] = 0;
break;
case 1:
case 2:
- gBattlerPositions[gLinkPlayers[i].id] = 2;
+ gBattlerPositions[gLinkPlayers[i].id] = B_POSITION_PLAYER_RIGHT;
gBattlerPartyIndexes[gLinkPlayers[i].id] = 3;
break;
}
@@ -561,12 +561,12 @@ static void InitLinkBtlControllers(void)
{
case 0:
case 3:
- gBattlerPositions[gLinkPlayers[i].id] = 1;
+ gBattlerPositions[gLinkPlayers[i].id] = B_POSITION_OPPONENT_LEFT;
gBattlerPartyIndexes[gLinkPlayers[i].id] = 0;
break;
case 1:
case 2:
- gBattlerPositions[gLinkPlayers[i].id] = 3;
+ gBattlerPositions[gLinkPlayers[i].id] = B_POSITION_OPPONENT_RIGHT;
gBattlerPartyIndexes[gLinkPlayers[i].id] = 3;
break;
}
diff --git a/src/battle_factory.c b/src/battle_factory.c
index 6c249bccc..bc47b1fda 100644
--- a/src/battle_factory.c
+++ b/src/battle_factory.c
@@ -415,7 +415,7 @@ static void SetPlayerAndOpponentParties(void)
monLevel,
ivs,
TRUE, gSaveBlock2Ptr->frontier.rentalMons[i].personality,
- 0, 0);
+ OT_ID_PLAYER_ID, 0);
count = 0;
bits = gFacilityTrainerMons[monSetId].evSpread;
@@ -456,7 +456,7 @@ static void SetPlayerAndOpponentParties(void)
monLevel,
ivs,
TRUE, gSaveBlock2Ptr->frontier.rentalMons[i + 3].personality,
- 0, 0);
+ OT_ID_PLAYER_ID, 0);
count = 0;
bits = gFacilityTrainerMons[monSetId].evSpread;
diff --git a/src/battle_gfx_sfx_util.c b/src/battle_gfx_sfx_util.c
index cdd7e8158..de403aec7 100644
--- a/src/battle_gfx_sfx_util.c
+++ b/src/battle_gfx_sfx_util.c
@@ -779,7 +779,7 @@ bool8 BattleInitAllSprites(u8 *state1, u8 *battlerId)
break;
case 4:
InitBattlerHealthboxCoords(*battlerId);
- if (gBattlerPositions[*battlerId] <= 1)
+ if (gBattlerPositions[*battlerId] <= B_POSITION_OPPONENT_LEFT)
DummyBattleInterfaceFunc(gHealthboxSpriteIds[*battlerId], FALSE);
else
DummyBattleInterfaceFunc(gHealthboxSpriteIds[*battlerId], TRUE);
diff --git a/src/battle_interface.c b/src/battle_interface.c
index 922437597..8fabfed68 100644
--- a/src/battle_interface.c
+++ b/src/battle_interface.c
@@ -1536,7 +1536,7 @@ u8 CreatePartyStatusSummarySprites(u8 battlerId, struct HpAndStatus *partyInfo,
if (isOpponent)
{
gSprites[summaryBarSpriteId].pos1.x -= 96;
- gSprites[summaryBarSpriteId].oam.matrixNum = 8;
+ gSprites[summaryBarSpriteId].oam.matrixNum = ST_OAM_HFLIP;
}
else
{
diff --git a/src/battle_main.c b/src/battle_main.c
index 498837e10..e623865f7 100644
--- a/src/battle_main.c
+++ b/src/battle_main.c
@@ -1790,9 +1790,9 @@ static void CB2_HandleStartMultiBattle(void)
gBattleCommunication[SPRITES_INIT_STATE2] = 0;
if (gBattleTypeFlags & BATTLE_TYPE_LINK)
{
- for (id = 0; id < 4 && (gLinkPlayers[id].version & 0xFF) == 3; id++);
+ for (id = 0; id < MAX_LINK_PLAYERS && (gLinkPlayers[id].version & 0xFF) == VERSION_EMERALD; id++);
- if (id == 4)
+ if (id == MAX_LINK_PLAYERS)
gBattleCommunication[MULTIUSE_STATE] = 8;
else
gBattleCommunication[MULTIUSE_STATE] = 10;
@@ -2004,7 +2004,7 @@ static u8 CreateNPCTrainerParty(struct Pokemon *party, u16 trainerNum, bool8 fir
personalityValue += nameHash << 8;
fixedIV = partyData[i].iv * 31 / 255;
- CreateMon(&party[i], partyData[i].species, partyData[i].lvl, fixedIV, TRUE, personalityValue, 2, 0);
+ CreateMon(&party[i], partyData[i].species, partyData[i].lvl, fixedIV, TRUE, personalityValue, OT_ID_RANDOM_NO_SHINY, 0);
for (j = 0; j < MAX_MON_MOVES; j++)
{
@@ -2022,7 +2022,7 @@ static u8 CreateNPCTrainerParty(struct Pokemon *party, u16 trainerNum, bool8 fir
personalityValue += nameHash << 8;
fixedIV = partyData[i].iv * 31 / 255;
- CreateMon(&party[i], partyData[i].species, partyData[i].lvl, fixedIV, TRUE, personalityValue, 2, 0);
+ CreateMon(&party[i], partyData[i].species, partyData[i].lvl, fixedIV, TRUE, personalityValue, OT_ID_RANDOM_NO_SHINY, 0);
SetMonData(&party[i], MON_DATA_HELD_ITEM, &partyData[i].heldItem);
break;
@@ -2036,7 +2036,7 @@ static u8 CreateNPCTrainerParty(struct Pokemon *party, u16 trainerNum, bool8 fir
personalityValue += nameHash << 8;
fixedIV = partyData[i].iv * 31 / 255;
- CreateMon(&party[i], partyData[i].species, partyData[i].lvl, fixedIV, TRUE, personalityValue, 2, 0);
+ CreateMon(&party[i], partyData[i].species, partyData[i].lvl, fixedIV, TRUE, personalityValue, OT_ID_RANDOM_NO_SHINY, 0);
SetMonData(&party[i], MON_DATA_HELD_ITEM, &partyData[i].heldItem);
@@ -4025,7 +4025,7 @@ void BattleTurnPassed(void)
if (gBattleOutcome != 0)
{
- gCurrentActionFuncId = 12;
+ gCurrentActionFuncId = B_ACTION_FINISHED;
gBattleMainFunc = RunTurnActionsFunctions;
return;
}
@@ -4244,7 +4244,7 @@ static void HandleTurnActionSelectionState(void)
moveInfo.monType1 = gBattleMons[gActiveBattler].type1;
moveInfo.monType2 = gBattleMons[gActiveBattler].type2;
- for (i = 0; i < 4; i++)
+ for (i = 0; i < MAX_MON_MOVES; i++)
{
moveInfo.moves[i] = gBattleMons[gActiveBattler].moves[i];
moveInfo.currentPp[i] = gBattleMons[gActiveBattler].pp[i];
@@ -4979,7 +4979,7 @@ static void CheckFocusPunch_ClearVarsBeforeTurnStarts(void)
static void RunTurnActionsFunctions(void)
{
if (gBattleOutcome != 0)
- gCurrentActionFuncId = 12;
+ gCurrentActionFuncId = B_ACTION_FINISHED;
*(&gBattleStruct->savedTurnActionNumber) = gCurrentTurnActionNumber;
sTurnActionsFuncsTable[gCurrentActionFuncId]();
@@ -5139,7 +5139,7 @@ static void HandleEndTurn_MonFled(void)
static void HandleEndTurn_FinishBattle(void)
{
- if (gCurrentActionFuncId == 0xB || gCurrentActionFuncId == 0xC)
+ if (gCurrentActionFuncId == B_ACTION_TRY_FINISH || gCurrentActionFuncId == B_ACTION_FINISHED)
{
if (!(gBattleTypeFlags & (BATTLE_TYPE_LINK
| BATTLE_TYPE_x2000000
@@ -5284,7 +5284,7 @@ static void ReturnFromBattleToOverworld(void)
void RunBattleScriptCommands_PopCallbacksStack(void)
{
- if (gCurrentActionFuncId == 0xB || gCurrentActionFuncId == 0xC)
+ if (gCurrentActionFuncId == B_ACTION_TRY_FINISH || gCurrentActionFuncId == B_ACTION_FINISHED)
{
if (gBattleResources->battleCallbackStack->size != 0)
gBattleResources->battleCallbackStack->size--;
@@ -5592,7 +5592,7 @@ static void HandleAction_UseItem(void)
else
{
PREPARE_STAT_BUFFER(gBattleTextBuff1, STAT_ATK)
- PREPARE_STRING_BUFFER(gBattleTextBuff2, 0xD2)
+ PREPARE_STRING_BUFFER(gBattleTextBuff2, CHAR_X)
while (!((*(gBattleStruct->AI_itemFlags + (gBattlerAttacker >> 1))) & 1))
{
diff --git a/src/battle_pike.c b/src/battle_pike.c
index 8846e2d1a..4e2be23e4 100644
--- a/src/battle_pike.c
+++ b/src/battle_pike.c
@@ -49,7 +49,7 @@ struct PikeWildMon
{
u16 species;
u8 levelDelta;
- u16 moves[4];
+ u16 moves[MAX_MON_MOVES];
};
// IWRAM bss
diff --git a/src/battle_pyramid.c b/src/battle_pyramid.c
index cc722da8d..4d35f4244 100644
--- a/src/battle_pyramid.c
+++ b/src/battle_pyramid.c
@@ -77,7 +77,7 @@ struct PyramidWildMon
u16 species;
u8 lvl;
u8 abilityNum;
- u16 moves[4];
+ u16 moves[MAX_MON_MOVES];
};
struct PyramidFloorTemplate
diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c
index 49b30ee6f..85ca4e167 100644
--- a/src/battle_script_commands.c
+++ b/src/battle_script_commands.c
@@ -1681,29 +1681,22 @@ static void Cmd_adjustnormaldamage(void)
RecordItemEffectBattle(gBattlerTarget, holdEffect);
gSpecialStatuses[gBattlerTarget].focusBanded = 1;
}
- if (gBattleMons[gBattlerTarget].status2 & STATUS2_SUBSTITUTE)
- goto END;
- if (gBattleMoves[gCurrentMove].effect != EFFECT_FALSE_SWIPE && !gProtectStructs[gBattlerTarget].endured
- && !gSpecialStatuses[gBattlerTarget].focusBanded)
- goto END;
-
- if (gBattleMons[gBattlerTarget].hp > gBattleMoveDamage)
- goto END;
-
- gBattleMoveDamage = gBattleMons[gBattlerTarget].hp - 1;
-
- if (gProtectStructs[gBattlerTarget].endured)
+ if (!(gBattleMons[gBattlerTarget].status2 & STATUS2_SUBSTITUTE)
+ && (gBattleMoves[gCurrentMove].effect == EFFECT_FALSE_SWIPE || gProtectStructs[gBattlerTarget].endured || gSpecialStatuses[gBattlerTarget].focusBanded)
+ && gBattleMons[gBattlerTarget].hp <= gBattleMoveDamage)
{
- gMoveResultFlags |= MOVE_RESULT_FOE_ENDURED;
- }
- else if (gSpecialStatuses[gBattlerTarget].focusBanded)
- {
- gMoveResultFlags |= MOVE_RESULT_FOE_HUNG_ON;
- gLastUsedItem = gBattleMons[gBattlerTarget].item;
+ gBattleMoveDamage = gBattleMons[gBattlerTarget].hp - 1;
+ if (gProtectStructs[gBattlerTarget].endured)
+ {
+ gMoveResultFlags |= MOVE_RESULT_FOE_ENDURED;
+ }
+ else if (gSpecialStatuses[gBattlerTarget].focusBanded)
+ {
+ gMoveResultFlags |= MOVE_RESULT_FOE_HUNG_ON;
+ gLastUsedItem = gBattleMons[gBattlerTarget].item;
+ }
}
-
- END:
- gBattlescriptCurrInstr++;
+ gBattlescriptCurrInstr++;
}
static void Cmd_adjustnormaldamage2(void) // The same as adjustnormaldamage except it doesn't check for false swipe move effect.
@@ -1730,27 +1723,22 @@ static void Cmd_adjustnormaldamage2(void) // The same as adjustnormaldamage exce
RecordItemEffectBattle(gBattlerTarget, holdEffect);
gSpecialStatuses[gBattlerTarget].focusBanded = 1;
}
- if (gBattleMons[gBattlerTarget].status2 & STATUS2_SUBSTITUTE)
- goto END;
- if (!gProtectStructs[gBattlerTarget].endured && !gSpecialStatuses[gBattlerTarget].focusBanded)
- goto END;
- if (gBattleMons[gBattlerTarget].hp > gBattleMoveDamage)
- goto END;
-
- gBattleMoveDamage = gBattleMons[gBattlerTarget].hp - 1;
-
- if (gProtectStructs[gBattlerTarget].endured)
- {
- gMoveResultFlags |= MOVE_RESULT_FOE_ENDURED;
- }
- else if (gSpecialStatuses[gBattlerTarget].focusBanded)
+ if (!(gBattleMons[gBattlerTarget].status2 & STATUS2_SUBSTITUTE)
+ && (gProtectStructs[gBattlerTarget].endured || gSpecialStatuses[gBattlerTarget].focusBanded)
+ && gBattleMons[gBattlerTarget].hp <= gBattleMoveDamage)
{
- gMoveResultFlags |= MOVE_RESULT_FOE_HUNG_ON;
- gLastUsedItem = gBattleMons[gBattlerTarget].item;
+ gBattleMoveDamage = gBattleMons[gBattlerTarget].hp - 1;
+ if (gProtectStructs[gBattlerTarget].endured)
+ {
+ gMoveResultFlags |= MOVE_RESULT_FOE_ENDURED;
+ }
+ else if (gSpecialStatuses[gBattlerTarget].focusBanded)
+ {
+ gMoveResultFlags |= MOVE_RESULT_FOE_HUNG_ON;
+ gLastUsedItem = gBattleMons[gBattlerTarget].item;
+ }
}
-
- END:
- gBattlescriptCurrInstr++;
+ gBattlescriptCurrInstr++;
}
static void Cmd_attackanimation(void)
@@ -4564,27 +4552,26 @@ static void Cmd_moveend(void)
gBattleScripting.moveendState++;
break;
case MOVEEND_CHOICE_MOVE: // update choice band move
- if (!(gHitMarker & HITMARKER_OBEYS) || holdEffectAtk != HOLD_EFFECT_CHOICE_BAND
- || gChosenMove == MOVE_STRUGGLE || (*choicedMoveAtk != 0 && *choicedMoveAtk != 0xFFFF))
- goto LOOP;
- if (gChosenMove == MOVE_BATON_PASS && !(gMoveResultFlags & MOVE_RESULT_FAILED))
+ if (gHitMarker & HITMARKER_OBEYS
+ && holdEffectAtk == HOLD_EFFECT_CHOICE_BAND
+ && gChosenMove != MOVE_STRUGGLE
+ && (*choicedMoveAtk == 0 || *choicedMoveAtk == 0xFFFF))
{
- gBattleScripting.moveendState++;
- break;
- }
- *choicedMoveAtk = gChosenMove;
- LOOP:
- {
- for (i = 0; i < MAX_MON_MOVES; i++)
+ if (gChosenMove == MOVE_BATON_PASS && !(gMoveResultFlags & MOVE_RESULT_FAILED))
{
- if (gBattleMons[gBattlerAttacker].moves[i] == *choicedMoveAtk)
- break;
+ ++gBattleScripting.moveendState;
+ break;
}
- if (i == MAX_MON_MOVES)
- *choicedMoveAtk = 0;
-
- gBattleScripting.moveendState++;
+ *choicedMoveAtk = gChosenMove;
+ }
+ for (i = 0; i < MAX_MON_MOVES; ++i)
+ {
+ if (gBattleMons[gBattlerAttacker].moves[i] == *choicedMoveAtk)
+ break;
}
+ if (i == MAX_MON_MOVES)
+ *choicedMoveAtk = 0;
+ ++gBattleScripting.moveendState;
break;
case MOVEEND_CHANGED_ITEMS: // changed held items
for (i = 0; i < gBattlersCount; i++)
@@ -6152,29 +6139,22 @@ static void Cmd_adjustsetdamage(void) // The same as adjustnormaldamage, except
RecordItemEffectBattle(gBattlerTarget, holdEffect);
gSpecialStatuses[gBattlerTarget].focusBanded = 1;
}
- if (gBattleMons[gBattlerTarget].status2 & STATUS2_SUBSTITUTE)
- goto END;
- if (gBattleMoves[gCurrentMove].effect != EFFECT_FALSE_SWIPE && !gProtectStructs[gBattlerTarget].endured
- && !gSpecialStatuses[gBattlerTarget].focusBanded)
- goto END;
-
- if (gBattleMons[gBattlerTarget].hp > gBattleMoveDamage)
- goto END;
-
- gBattleMoveDamage = gBattleMons[gBattlerTarget].hp - 1;
-
- if (gProtectStructs[gBattlerTarget].endured)
- {
- gMoveResultFlags |= MOVE_RESULT_FOE_ENDURED;
- }
- else if (gSpecialStatuses[gBattlerTarget].focusBanded)
+ if (!(gBattleMons[gBattlerTarget].status2 & STATUS2_SUBSTITUTE)
+ && (gBattleMoves[gCurrentMove].effect == EFFECT_FALSE_SWIPE || gProtectStructs[gBattlerTarget].endured || gSpecialStatuses[gBattlerTarget].focusBanded)
+ && gBattleMons[gBattlerTarget].hp <= gBattleMoveDamage)
{
- gMoveResultFlags |= MOVE_RESULT_FOE_HUNG_ON;
- gLastUsedItem = gBattleMons[gBattlerTarget].item;
+ gBattleMoveDamage = gBattleMons[gBattlerTarget].hp - 1;
+ if (gProtectStructs[gBattlerTarget].endured)
+ {
+ gMoveResultFlags |= MOVE_RESULT_FOE_ENDURED;
+ }
+ else if (gSpecialStatuses[gBattlerTarget].focusBanded)
+ {
+ gMoveResultFlags |= MOVE_RESULT_FOE_HUNG_ON;
+ gLastUsedItem = gBattleMons[gBattlerTarget].item;
+ }
}
-
- END:
- gBattlescriptCurrInstr++;
+ gBattlescriptCurrInstr++;
}
static void Cmd_removeitem(void)
@@ -10184,7 +10164,7 @@ static void Cmd_handleballthrow(void)
gBattlescriptCurrInstr = BattleScript_SuccessBallThrow;
SetMonData(&gEnemyParty[gBattlerPartyIndexes[gBattlerTarget]], MON_DATA_POKEBALL, &gLastUsedItem);
- if (CalculatePlayerPartyCount() == 6)
+ if (CalculatePlayerPartyCount() == PARTY_SIZE)
gBattleCommunication[MULTISTRING_CHOOSER] = 0;
else
gBattleCommunication[MULTISTRING_CHOOSER] = 1;
@@ -10196,7 +10176,7 @@ static void Cmd_handleballthrow(void)
odds = Sqrt(Sqrt(16711680 / odds));
odds = 1048560 / odds;
- for (shakes = 0; shakes < 4 && Random() < odds; shakes++);
+ for (shakes = 0; shakes < BALL_3_SHAKES_SUCCESS && Random() < odds; shakes++);
if (gLastUsedItem == ITEM_MASTER_BALL)
shakes = BALL_3_SHAKES_SUCCESS; // why calculate the shakes before that check?
@@ -10209,7 +10189,7 @@ static void Cmd_handleballthrow(void)
gBattlescriptCurrInstr = BattleScript_SuccessBallThrow;
SetMonData(&gEnemyParty[gBattlerPartyIndexes[gBattlerTarget]], MON_DATA_POKEBALL, &gLastUsedItem);
- if (CalculatePlayerPartyCount() == 6)
+ if (CalculatePlayerPartyCount() == PARTY_SIZE)
gBattleCommunication[MULTISTRING_CHOOSER] = 0;
else
gBattleCommunication[MULTISTRING_CHOOSER] = 1;
@@ -10227,17 +10207,17 @@ static void Cmd_givecaughtmon(void)
{
if (GiveMonToPlayer(&gEnemyParty[gBattlerPartyIndexes[gBattlerAttacker ^ BIT_SIDE]]) != MON_GIVEN_TO_PARTY)
{
- if (!sub_813B21C())
+ if (!ShouldShowBoxWasFullMessage())
{
gBattleCommunication[MULTISTRING_CHOOSER] = 0;
- StringCopy(gStringVar1, GetBoxNamePtr(VarGet(VAR_STORAGE_UNKNOWN)));
+ StringCopy(gStringVar1, GetBoxNamePtr(VarGet(VAR_PC_BOX_TO_SEND_MON)));
GetMonData(&gEnemyParty[gBattlerPartyIndexes[gBattlerAttacker ^ BIT_SIDE]], MON_DATA_NICKNAME, gStringVar2);
}
else
{
- StringCopy(gStringVar1, GetBoxNamePtr(VarGet(VAR_STORAGE_UNKNOWN)));
+ StringCopy(gStringVar1, GetBoxNamePtr(VarGet(VAR_PC_BOX_TO_SEND_MON))); // box the mon was sent to
GetMonData(&gEnemyParty[gBattlerPartyIndexes[gBattlerAttacker ^ BIT_SIDE]], MON_DATA_NICKNAME, gStringVar2);
- StringCopy(gStringVar3, GetBoxNamePtr(get_unknown_box_id()));
+ StringCopy(gStringVar3, GetBoxNamePtr(GetPCBoxToSendMon())); //box the mon was going to be sent to
gBattleCommunication[MULTISTRING_CHOOSER] = 2;
}
diff --git a/src/battle_setup.c b/src/battle_setup.c
index 288fdb3e9..c2d7cb6c6 100644
--- a/src/battle_setup.c
+++ b/src/battle_setup.c
@@ -231,86 +231,93 @@ static const struct TrainerBattleParameter sTrainerBContinueScriptBattleParams[]
{&sTrainerBattleEndScript, TRAINER_PARAM_LOAD_SCRIPT_RET_ADDR},
};
+#define REMATCH(trainer1, trainer2, trainer3, trainer4, trainer5, map) \
+{ \
+ .trainerIds = {trainer1, trainer2, trainer3, trainer4, trainer5}, \
+ .mapGroup = MAP_GROUP(map), \
+ .mapNum = MAP_NUM(map), \
+}
+
const struct RematchTrainer gRematchTable[REMATCH_TABLE_ENTRIES] =
{
- [REMATCH_ROSE] = {{TRAINER_ROSE_1, TRAINER_ROSE_2, TRAINER_ROSE_3, TRAINER_ROSE_4, TRAINER_ROSE_5}, 0x0, 0x21},
- [REMATCH_ANDRES] = {{TRAINER_ANDRES_1, TRAINER_ANDRES_2, TRAINER_ANDRES_3, TRAINER_ANDRES_4, TRAINER_ANDRES_5}, 0x0, 0x14},
- [REMATCH_DUSTY] = {{TRAINER_DUSTY_1, TRAINER_DUSTY_2, TRAINER_DUSTY_3, TRAINER_DUSTY_4, TRAINER_DUSTY_5}, 0x0, 0x1a},
- [REMATCH_LOLA] = {{TRAINER_LOLA_1, TRAINER_LOLA_2, TRAINER_LOLA_3, TRAINER_LOLA_4, TRAINER_LOLA_5}, 0x0, 0x18},
- [REMATCH_RICKY] = {{TRAINER_RICKY_1, TRAINER_RICKY_2, TRAINER_RICKY_3, TRAINER_RICKY_4, TRAINER_RICKY_5}, 0x0, 0x18},
- [REMATCH_LILA_AND_ROY] = {{TRAINER_LILA_AND_ROY_1, TRAINER_LILA_AND_ROY_2, TRAINER_LILA_AND_ROY_3, TRAINER_LILA_AND_ROY_4, TRAINER_LILA_AND_ROY_5}, 0x0, 0x27},
- [REMATCH_CRISTIN] = {{TRAINER_CRISTIN_1, TRAINER_CRISTIN_2, TRAINER_CRISTIN_3, TRAINER_CRISTIN_4, TRAINER_CRISTIN_5}, 0x0, 0x24},
- [REMATCH_BROOKE] = {{TRAINER_BROOKE_1, TRAINER_BROOKE_2, TRAINER_BROOKE_3, TRAINER_BROOKE_4, TRAINER_BROOKE_5}, 0x0, 0x1a},
- [REMATCH_WILTON] = {{TRAINER_WILTON_1, TRAINER_WILTON_2, TRAINER_WILTON_3, TRAINER_WILTON_4, TRAINER_WILTON_5}, 0x0, 0x1a},
- [REMATCH_VALERIE] = {{TRAINER_VALERIE_1, TRAINER_VALERIE_2, TRAINER_VALERIE_3, TRAINER_VALERIE_4, TRAINER_VALERIE_5}, 0x18, 0x14},
- [REMATCH_CINDY] = {{TRAINER_CINDY_1, TRAINER_CINDY_3, TRAINER_CINDY_4, TRAINER_CINDY_5, TRAINER_CINDY_6}, 0x0, 0x13},
- [REMATCH_THALIA] = {{TRAINER_THALIA_1, TRAINER_THALIA_2, TRAINER_THALIA_3, TRAINER_THALIA_4, TRAINER_THALIA_5}, 0x18, 0x38},
- [REMATCH_JESSICA] = {{TRAINER_JESSICA_1, TRAINER_JESSICA_2, TRAINER_JESSICA_3, TRAINER_JESSICA_4, TRAINER_JESSICA_5}, 0x0, 0x24},
- [REMATCH_WINSTON] = {{TRAINER_WINSTON_1, TRAINER_WINSTON_2, TRAINER_WINSTON_3, TRAINER_WINSTON_4, TRAINER_WINSTON_5}, 0x0, 0x13},
- [REMATCH_STEVE] = {{TRAINER_STEVE_1, TRAINER_STEVE_2, TRAINER_STEVE_3, TRAINER_STEVE_4, TRAINER_STEVE_5}, 0x0, 0x1d},
- [REMATCH_TONY] = {{TRAINER_TONY_1, TRAINER_TONY_2, TRAINER_TONY_3, TRAINER_TONY_4, TRAINER_TONY_5}, 0x0, 0x16},
- [REMATCH_NOB] = {{TRAINER_NOB_1, TRAINER_NOB_2, TRAINER_NOB_3, TRAINER_NOB_4, TRAINER_NOB_5}, 0x0, 0x1e},
- [REMATCH_KOJI] = {{TRAINER_KOJI_1, TRAINER_KOJI_2, TRAINER_KOJI_3, TRAINER_KOJI_4, TRAINER_KOJI_5}, 0x0, 0x2a},
- [REMATCH_FERNANDO] = {{TRAINER_FERNANDO_1, TRAINER_FERNANDO_2, TRAINER_FERNANDO_3, TRAINER_FERNANDO_4, TRAINER_FERNANDO_5}, 0x0, 0x26},
- [REMATCH_DALTON] = {{TRAINER_DALTON_1, TRAINER_DALTON_2, TRAINER_DALTON_3, TRAINER_DALTON_4, TRAINER_DALTON_5}, 0x0, 0x21},
- [REMATCH_BERNIE] = {{TRAINER_BERNIE_1, TRAINER_BERNIE_2, TRAINER_BERNIE_3, TRAINER_BERNIE_4, TRAINER_BERNIE_5}, 0x0, 0x1d},
- [REMATCH_ETHAN] = {{TRAINER_ETHAN_1, TRAINER_ETHAN_2, TRAINER_ETHAN_3, TRAINER_ETHAN_4, TRAINER_ETHAN_5}, 0x18, 0xd},
- [REMATCH_JOHN_AND_JAY] = {{TRAINER_JOHN_AND_JAY_1, TRAINER_JOHN_AND_JAY_2, TRAINER_JOHN_AND_JAY_3, TRAINER_JOHN_AND_JAY_4, TRAINER_JOHN_AND_JAY_5}, 0x18, 0x1},
- [REMATCH_JEFFREY] = {{TRAINER_JEFFREY_1, TRAINER_JEFFREY_2, TRAINER_JEFFREY_3, TRAINER_JEFFREY_4, TRAINER_JEFFREY_5}, 0x0, 0x23},
- [REMATCH_CAMERON] = {{TRAINER_CAMERON_1, TRAINER_CAMERON_2, TRAINER_CAMERON_3, TRAINER_CAMERON_4, TRAINER_CAMERON_5}, 0x0, 0x26},
- [REMATCH_JACKI] = {{TRAINER_JACKI_1, TRAINER_JACKI_2, TRAINER_JACKI_3, TRAINER_JACKI_4, TRAINER_JACKI_5}, 0x0, 0x26},
- [REMATCH_WALTER] = {{TRAINER_WALTER_1, TRAINER_WALTER_2, TRAINER_WALTER_3, TRAINER_WALTER_4, TRAINER_WALTER_5}, 0x0, 0x24},
- [REMATCH_KAREN] = {{TRAINER_KAREN_1, TRAINER_KAREN_2, TRAINER_KAREN_3, TRAINER_KAREN_4, TRAINER_KAREN_5}, 0x0, 0x1f},
- [REMATCH_JERRY] = {{TRAINER_JERRY_1, TRAINER_JERRY_2, TRAINER_JERRY_3, TRAINER_JERRY_4, TRAINER_JERRY_5}, 0x0, 0x1f},
- [REMATCH_ANNA_AND_MEG] = {{TRAINER_ANNA_AND_MEG_1, TRAINER_ANNA_AND_MEG_2, TRAINER_ANNA_AND_MEG_3, TRAINER_ANNA_AND_MEG_4, TRAINER_ANNA_AND_MEG_5}, 0x0, 0x20},
- [REMATCH_ISABEL] = {{TRAINER_ISABEL_1, TRAINER_ISABEL_2, TRAINER_ISABEL_3, TRAINER_ISABEL_4, TRAINER_ISABEL_5}, 0x0, 0x19},
- [REMATCH_MIGUEL] = {{TRAINER_MIGUEL_1, TRAINER_MIGUEL_2, TRAINER_MIGUEL_3, TRAINER_MIGUEL_4, TRAINER_MIGUEL_5}, 0x0, 0x12},
- [REMATCH_TIMOTHY] = {{TRAINER_TIMOTHY_1, TRAINER_TIMOTHY_2, TRAINER_TIMOTHY_3, TRAINER_TIMOTHY_4, TRAINER_TIMOTHY_5}, 0x0, 0x1e},
- [REMATCH_SHELBY] = {{TRAINER_SHELBY_1, TRAINER_SHELBY_2, TRAINER_SHELBY_3, TRAINER_SHELBY_4, TRAINER_SHELBY_5}, 0x18, 0xc},
- [REMATCH_CALVIN] = {{TRAINER_CALVIN_1, TRAINER_CALVIN_2, TRAINER_CALVIN_3, TRAINER_CALVIN_4, TRAINER_CALVIN_5}, 0x0, 0x11},
- [REMATCH_ELLIOT] = {{TRAINER_ELLIOT_1, TRAINER_ELLIOT_2, TRAINER_ELLIOT_3, TRAINER_ELLIOT_4, TRAINER_ELLIOT_5}, 0x0, 0x15},
- [REMATCH_ISAIAH] = {{TRAINER_ISAIAH_1, TRAINER_ISAIAH_2, TRAINER_ISAIAH_3, TRAINER_ISAIAH_4, TRAINER_ISAIAH_5}, 0x0, 0x2b},
- [REMATCH_MARIA] = {{TRAINER_MARIA_1, TRAINER_MARIA_2, TRAINER_MARIA_3, TRAINER_MARIA_4, TRAINER_MARIA_5}, 0x0, 0x20},
- [REMATCH_ABIGAIL] = {{TRAINER_ABIGAIL_1, TRAINER_ABIGAIL_2, TRAINER_ABIGAIL_3, TRAINER_ABIGAIL_4, TRAINER_ABIGAIL_5}, 0x0, 0x19},
- [REMATCH_DYLAN] = {{TRAINER_DYLAN_1, TRAINER_DYLAN_2, TRAINER_DYLAN_3, TRAINER_DYLAN_4, TRAINER_DYLAN_5}, 0x0, 0x20},
- [REMATCH_KATELYN] = {{TRAINER_KATELYN_1, TRAINER_KATELYN_2, TRAINER_KATELYN_3, TRAINER_KATELYN_4, TRAINER_KATELYN_5}, 0x0, 0x2b},
- [REMATCH_BENJAMIN] = {{TRAINER_BENJAMIN_1, TRAINER_BENJAMIN_2, TRAINER_BENJAMIN_3, TRAINER_BENJAMIN_4, TRAINER_BENJAMIN_5}, 0x0, 0x19},
- [REMATCH_PABLO] = {{TRAINER_PABLO_1, TRAINER_PABLO_2, TRAINER_PABLO_3, TRAINER_PABLO_4, TRAINER_PABLO_5}, 0x0, 0x29},
- [REMATCH_NICOLAS] = {{TRAINER_NICOLAS_1, TRAINER_NICOLAS_2, TRAINER_NICOLAS_3, TRAINER_NICOLAS_4, TRAINER_NICOLAS_5}, 0x18, 0x1},
- [REMATCH_ROBERT] = {{TRAINER_ROBERT_1, TRAINER_ROBERT_2, TRAINER_ROBERT_3, TRAINER_ROBERT_4, TRAINER_ROBERT_5}, 0x0, 0x23},
- [REMATCH_LAO] = {{TRAINER_LAO_1, TRAINER_LAO_2, TRAINER_LAO_3, TRAINER_LAO_4, TRAINER_LAO_5}, 0x0, 0x1c},
- [REMATCH_CYNDY] = {{TRAINER_CYNDY_1, TRAINER_CYNDY_2, TRAINER_CYNDY_3, TRAINER_CYNDY_4, TRAINER_CYNDY_5}, 0x0, 0x1e},
- [REMATCH_MADELINE] = {{TRAINER_MADELINE_1, TRAINER_MADELINE_2, TRAINER_MADELINE_3, TRAINER_MADELINE_4, TRAINER_MADELINE_5}, 0x0, 0x1c},
- [REMATCH_JENNY] = {{TRAINER_JENNY_1, TRAINER_JENNY_2, TRAINER_JENNY_3, TRAINER_JENNY_4, TRAINER_JENNY_5}, 0x0, 0x27},
- [REMATCH_DIANA] = {{TRAINER_DIANA_1, TRAINER_DIANA_2, TRAINER_DIANA_3, TRAINER_DIANA_4, TRAINER_DIANA_5}, 0x18, 0xd},
- [REMATCH_AMY_AND_LIV] = {{TRAINER_AMY_AND_LIV_1, TRAINER_AMY_AND_LIV_2, TRAINER_AMY_AND_LIV_4, TRAINER_AMY_AND_LIV_5, TRAINER_AMY_AND_LIV_6}, 0x0, 0x12},
- [REMATCH_ERNEST] = {{TRAINER_ERNEST_1, TRAINER_ERNEST_2, TRAINER_ERNEST_3, TRAINER_ERNEST_4, TRAINER_ERNEST_5}, 0x0, 0x28},
- [REMATCH_CORY] = {{TRAINER_CORY_1, TRAINER_CORY_2, TRAINER_CORY_3, TRAINER_CORY_4, TRAINER_CORY_5}, 0x0, 0x17},
- [REMATCH_EDWIN] = {{TRAINER_EDWIN_1, TRAINER_EDWIN_2, TRAINER_EDWIN_3, TRAINER_EDWIN_4, TRAINER_EDWIN_5}, 0x0, 0x19},
- [REMATCH_LYDIA] = {{TRAINER_LYDIA_1, TRAINER_LYDIA_2, TRAINER_LYDIA_3, TRAINER_LYDIA_4, TRAINER_LYDIA_5}, 0x0, 0x20},
- [REMATCH_ISAAC] = {{TRAINER_ISAAC_1, TRAINER_ISAAC_2, TRAINER_ISAAC_3, TRAINER_ISAAC_4, TRAINER_ISAAC_5}, 0x0, 0x20},
- [REMATCH_GABRIELLE] = {{TRAINER_GABRIELLE_1, TRAINER_GABRIELLE_2, TRAINER_GABRIELLE_3, TRAINER_GABRIELLE_4, TRAINER_GABRIELLE_5}, 0x18, 0x11},
- [REMATCH_CATHERINE] = {{TRAINER_CATHERINE_1, TRAINER_CATHERINE_2, TRAINER_CATHERINE_3, TRAINER_CATHERINE_4, TRAINER_CATHERINE_5}, 0x0, 0x22},
- [REMATCH_JACKSON] = {{TRAINER_JACKSON_1, TRAINER_JACKSON_2, TRAINER_JACKSON_3, TRAINER_JACKSON_4, TRAINER_JACKSON_5}, 0x0, 0x22},
- [REMATCH_HALEY] = {{TRAINER_HALEY_1, TRAINER_HALEY_2, TRAINER_HALEY_3, TRAINER_HALEY_4, TRAINER_HALEY_5}, 0x0, 0x13},
- [REMATCH_JAMES] = {{TRAINER_JAMES_1, TRAINER_JAMES_2, TRAINER_JAMES_3, TRAINER_JAMES_4, TRAINER_JAMES_5}, 0x18, 0xb},
- [REMATCH_TRENT] = {{TRAINER_TRENT_1, TRAINER_TRENT_2, TRAINER_TRENT_3, TRAINER_TRENT_4, TRAINER_TRENT_5}, 0x0, 0x1b},
- [REMATCH_SAWYER] = {{TRAINER_SAWYER_1, TRAINER_SAWYER_2, TRAINER_SAWYER_3, TRAINER_SAWYER_4, TRAINER_SAWYER_5}, 0x18, 0xc},
- [REMATCH_KIRA_AND_DAN] = {{TRAINER_KIRA_AND_DAN_1, TRAINER_KIRA_AND_DAN_2, TRAINER_KIRA_AND_DAN_3, TRAINER_KIRA_AND_DAN_4, TRAINER_KIRA_AND_DAN_5}, 0x18, 0x3e},
- [REMATCH_WALLY_3] = {{TRAINER_WALLY_3, TRAINER_WALLY_4, TRAINER_WALLY_5, TRAINER_WALLY_6, TRAINER_WALLY_6}, 0x18, 0x2b},
- [REMATCH_ROXANNE] = {{TRAINER_ROXANNE_1, TRAINER_ROXANNE_2, TRAINER_ROXANNE_3, TRAINER_ROXANNE_4, TRAINER_ROXANNE_5}, 0x0, 0x3},
- [REMATCH_BRAWLY] = {{TRAINER_BRAWLY_1, TRAINER_BRAWLY_2, TRAINER_BRAWLY_3, TRAINER_BRAWLY_4, TRAINER_BRAWLY_5}, 0x0, 0xb},
- [REMATCH_WATTSON] = {{TRAINER_WATTSON_1, TRAINER_WATTSON_2, TRAINER_WATTSON_3, TRAINER_WATTSON_4, TRAINER_WATTSON_5}, 0x0, 0x2},
- [REMATCH_FLANNERY] = {{TRAINER_FLANNERY_1, TRAINER_FLANNERY_2, TRAINER_FLANNERY_3, TRAINER_FLANNERY_4, TRAINER_FLANNERY_5}, 0x0, 0xc},
- [REMATCH_NORMAN] = {{TRAINER_NORMAN_1, TRAINER_NORMAN_2, TRAINER_NORMAN_3, TRAINER_NORMAN_4, TRAINER_NORMAN_5}, 0x0, 0x0},
- [REMATCH_WINONA] = {{TRAINER_WINONA_1, TRAINER_WINONA_2, TRAINER_WINONA_3, TRAINER_WINONA_4, TRAINER_WINONA_5}, 0x0, 0x4},
- [REMATCH_TATE_AND_LIZA] = {{TRAINER_TATE_AND_LIZA_1, TRAINER_TATE_AND_LIZA_2, TRAINER_TATE_AND_LIZA_3, TRAINER_TATE_AND_LIZA_4, TRAINER_TATE_AND_LIZA_5}, 0x0, 0x6},
- [REMATCH_JUAN] = {{TRAINER_JUAN_1, TRAINER_JUAN_2, TRAINER_JUAN_3, TRAINER_JUAN_4, TRAINER_JUAN_5}, 0x0, 0x7},
- [REMATCH_SIDNEY] = {{TRAINER_SIDNEY, TRAINER_SIDNEY, TRAINER_SIDNEY, TRAINER_SIDNEY, TRAINER_SIDNEY}, 0x0, 0x8},
- [REMATCH_PHOEBE] = {{TRAINER_PHOEBE, TRAINER_PHOEBE, TRAINER_PHOEBE, TRAINER_PHOEBE, TRAINER_PHOEBE}, 0x0, 0x8},
- [REMATCH_GLACIA] = {{TRAINER_GLACIA, TRAINER_GLACIA, TRAINER_GLACIA, TRAINER_GLACIA, TRAINER_GLACIA}, 0x0, 0x8},
- [REMATCH_DRAKE] = {{TRAINER_DRAKE, TRAINER_DRAKE, TRAINER_DRAKE, TRAINER_DRAKE, TRAINER_DRAKE}, 0x0, 0x8},
- [REMATCH_WALLACE] = {{TRAINER_WALLACE, TRAINER_WALLACE, TRAINER_WALLACE, TRAINER_WALLACE, TRAINER_WALLACE}, 0x0, 0x8},
+ [REMATCH_ROSE] = REMATCH(TRAINER_ROSE_1, TRAINER_ROSE_2, TRAINER_ROSE_3, TRAINER_ROSE_4, TRAINER_ROSE_5, ROUTE118),
+ [REMATCH_ANDRES] = REMATCH(TRAINER_ANDRES_1, TRAINER_ANDRES_2, TRAINER_ANDRES_3, TRAINER_ANDRES_4, TRAINER_ANDRES_5, ROUTE105),
+ [REMATCH_DUSTY] = REMATCH(TRAINER_DUSTY_1, TRAINER_DUSTY_2, TRAINER_DUSTY_3, TRAINER_DUSTY_4, TRAINER_DUSTY_5, ROUTE111),
+ [REMATCH_LOLA] = REMATCH(TRAINER_LOLA_1, TRAINER_LOLA_2, TRAINER_LOLA_3, TRAINER_LOLA_4, TRAINER_LOLA_5, ROUTE109),
+ [REMATCH_RICKY] = REMATCH(TRAINER_RICKY_1, TRAINER_RICKY_2, TRAINER_RICKY_3, TRAINER_RICKY_4, TRAINER_RICKY_5, ROUTE109),
+ [REMATCH_LILA_AND_ROY] = REMATCH(TRAINER_LILA_AND_ROY_1, TRAINER_LILA_AND_ROY_2, TRAINER_LILA_AND_ROY_3, TRAINER_LILA_AND_ROY_4, TRAINER_LILA_AND_ROY_5, ROUTE124),
+ [REMATCH_CRISTIN] = REMATCH(TRAINER_CRISTIN_1, TRAINER_CRISTIN_2, TRAINER_CRISTIN_3, TRAINER_CRISTIN_4, TRAINER_CRISTIN_5, ROUTE121),
+ [REMATCH_BROOKE] = REMATCH(TRAINER_BROOKE_1, TRAINER_BROOKE_2, TRAINER_BROOKE_3, TRAINER_BROOKE_4, TRAINER_BROOKE_5, ROUTE111),
+ [REMATCH_WILTON] = REMATCH(TRAINER_WILTON_1, TRAINER_WILTON_2, TRAINER_WILTON_3, TRAINER_WILTON_4, TRAINER_WILTON_5, ROUTE111),
+ [REMATCH_VALERIE] = REMATCH(TRAINER_VALERIE_1, TRAINER_VALERIE_2, TRAINER_VALERIE_3, TRAINER_VALERIE_4, TRAINER_VALERIE_5, MT_PYRE_6F),
+ [REMATCH_CINDY] = REMATCH(TRAINER_CINDY_1, TRAINER_CINDY_3, TRAINER_CINDY_4, TRAINER_CINDY_5, TRAINER_CINDY_6, ROUTE104),
+ [REMATCH_THALIA] = REMATCH(TRAINER_THALIA_1, TRAINER_THALIA_2, TRAINER_THALIA_3, TRAINER_THALIA_4, TRAINER_THALIA_5, ABANDONED_SHIP_ROOMS_1F),
+ [REMATCH_JESSICA] = REMATCH(TRAINER_JESSICA_1, TRAINER_JESSICA_2, TRAINER_JESSICA_3, TRAINER_JESSICA_4, TRAINER_JESSICA_5, ROUTE121),
+ [REMATCH_WINSTON] = REMATCH(TRAINER_WINSTON_1, TRAINER_WINSTON_2, TRAINER_WINSTON_3, TRAINER_WINSTON_4, TRAINER_WINSTON_5, ROUTE104),
+ [REMATCH_STEVE] = REMATCH(TRAINER_STEVE_1, TRAINER_STEVE_2, TRAINER_STEVE_3, TRAINER_STEVE_4, TRAINER_STEVE_5, ROUTE114),
+ [REMATCH_TONY] = REMATCH(TRAINER_TONY_1, TRAINER_TONY_2, TRAINER_TONY_3, TRAINER_TONY_4, TRAINER_TONY_5, ROUTE107),
+ [REMATCH_NOB] = REMATCH(TRAINER_NOB_1, TRAINER_NOB_2, TRAINER_NOB_3, TRAINER_NOB_4, TRAINER_NOB_5, ROUTE115),
+ [REMATCH_KOJI] = REMATCH(TRAINER_KOJI_1, TRAINER_KOJI_2, TRAINER_KOJI_3, TRAINER_KOJI_4, TRAINER_KOJI_5, ROUTE127),
+ [REMATCH_FERNANDO] = REMATCH(TRAINER_FERNANDO_1, TRAINER_FERNANDO_2, TRAINER_FERNANDO_3, TRAINER_FERNANDO_4, TRAINER_FERNANDO_5, ROUTE123),
+ [REMATCH_DALTON] = REMATCH(TRAINER_DALTON_1, TRAINER_DALTON_2, TRAINER_DALTON_3, TRAINER_DALTON_4, TRAINER_DALTON_5, ROUTE118),
+ [REMATCH_BERNIE] = REMATCH(TRAINER_BERNIE_1, TRAINER_BERNIE_2, TRAINER_BERNIE_3, TRAINER_BERNIE_4, TRAINER_BERNIE_5, ROUTE114),
+ [REMATCH_ETHAN] = REMATCH(TRAINER_ETHAN_1, TRAINER_ETHAN_2, TRAINER_ETHAN_3, TRAINER_ETHAN_4, TRAINER_ETHAN_5, JAGGED_PASS),
+ [REMATCH_JOHN_AND_JAY] = REMATCH(TRAINER_JOHN_AND_JAY_1, TRAINER_JOHN_AND_JAY_2, TRAINER_JOHN_AND_JAY_3, TRAINER_JOHN_AND_JAY_4, TRAINER_JOHN_AND_JAY_5, METEOR_FALLS_1F_2R),
+ [REMATCH_JEFFREY] = REMATCH(TRAINER_JEFFREY_1, TRAINER_JEFFREY_2, TRAINER_JEFFREY_3, TRAINER_JEFFREY_4, TRAINER_JEFFREY_5, ROUTE120),
+ [REMATCH_CAMERON] = REMATCH(TRAINER_CAMERON_1, TRAINER_CAMERON_2, TRAINER_CAMERON_3, TRAINER_CAMERON_4, TRAINER_CAMERON_5, ROUTE123),
+ [REMATCH_JACKI] = REMATCH(TRAINER_JACKI_1, TRAINER_JACKI_2, TRAINER_JACKI_3, TRAINER_JACKI_4, TRAINER_JACKI_5, ROUTE123),
+ [REMATCH_WALTER] = REMATCH(TRAINER_WALTER_1, TRAINER_WALTER_2, TRAINER_WALTER_3, TRAINER_WALTER_4, TRAINER_WALTER_5, ROUTE121),
+ [REMATCH_KAREN] = REMATCH(TRAINER_KAREN_1, TRAINER_KAREN_2, TRAINER_KAREN_3, TRAINER_KAREN_4, TRAINER_KAREN_5, ROUTE116),
+ [REMATCH_JERRY] = REMATCH(TRAINER_JERRY_1, TRAINER_JERRY_2, TRAINER_JERRY_3, TRAINER_JERRY_4, TRAINER_JERRY_5, ROUTE116),
+ [REMATCH_ANNA_AND_MEG] = REMATCH(TRAINER_ANNA_AND_MEG_1, TRAINER_ANNA_AND_MEG_2, TRAINER_ANNA_AND_MEG_3, TRAINER_ANNA_AND_MEG_4, TRAINER_ANNA_AND_MEG_5, ROUTE117),
+ [REMATCH_ISABEL] = REMATCH(TRAINER_ISABEL_1, TRAINER_ISABEL_2, TRAINER_ISABEL_3, TRAINER_ISABEL_4, TRAINER_ISABEL_5, ROUTE110),
+ [REMATCH_MIGUEL] = REMATCH(TRAINER_MIGUEL_1, TRAINER_MIGUEL_2, TRAINER_MIGUEL_3, TRAINER_MIGUEL_4, TRAINER_MIGUEL_5, ROUTE103),
+ [REMATCH_TIMOTHY] = REMATCH(TRAINER_TIMOTHY_1, TRAINER_TIMOTHY_2, TRAINER_TIMOTHY_3, TRAINER_TIMOTHY_4, TRAINER_TIMOTHY_5, ROUTE115),
+ [REMATCH_SHELBY] = REMATCH(TRAINER_SHELBY_1, TRAINER_SHELBY_2, TRAINER_SHELBY_3, TRAINER_SHELBY_4, TRAINER_SHELBY_5, MT_CHIMNEY),
+ [REMATCH_CALVIN] = REMATCH(TRAINER_CALVIN_1, TRAINER_CALVIN_2, TRAINER_CALVIN_3, TRAINER_CALVIN_4, TRAINER_CALVIN_5, ROUTE102),
+ [REMATCH_ELLIOT] = REMATCH(TRAINER_ELLIOT_1, TRAINER_ELLIOT_2, TRAINER_ELLIOT_3, TRAINER_ELLIOT_4, TRAINER_ELLIOT_5, ROUTE106),
+ [REMATCH_ISAIAH] = REMATCH(TRAINER_ISAIAH_1, TRAINER_ISAIAH_2, TRAINER_ISAIAH_3, TRAINER_ISAIAH_4, TRAINER_ISAIAH_5, ROUTE128),
+ [REMATCH_MARIA] = REMATCH(TRAINER_MARIA_1, TRAINER_MARIA_2, TRAINER_MARIA_3, TRAINER_MARIA_4, TRAINER_MARIA_5, ROUTE117),
+ [REMATCH_ABIGAIL] = REMATCH(TRAINER_ABIGAIL_1, TRAINER_ABIGAIL_2, TRAINER_ABIGAIL_3, TRAINER_ABIGAIL_4, TRAINER_ABIGAIL_5, ROUTE110),
+ [REMATCH_DYLAN] = REMATCH(TRAINER_DYLAN_1, TRAINER_DYLAN_2, TRAINER_DYLAN_3, TRAINER_DYLAN_4, TRAINER_DYLAN_5, ROUTE117),
+ [REMATCH_KATELYN] = REMATCH(TRAINER_KATELYN_1, TRAINER_KATELYN_2, TRAINER_KATELYN_3, TRAINER_KATELYN_4, TRAINER_KATELYN_5, ROUTE128),
+ [REMATCH_BENJAMIN] = REMATCH(TRAINER_BENJAMIN_1, TRAINER_BENJAMIN_2, TRAINER_BENJAMIN_3, TRAINER_BENJAMIN_4, TRAINER_BENJAMIN_5, ROUTE110),
+ [REMATCH_PABLO] = REMATCH(TRAINER_PABLO_1, TRAINER_PABLO_2, TRAINER_PABLO_3, TRAINER_PABLO_4, TRAINER_PABLO_5, ROUTE126),
+ [REMATCH_NICOLAS] = REMATCH(TRAINER_NICOLAS_1, TRAINER_NICOLAS_2, TRAINER_NICOLAS_3, TRAINER_NICOLAS_4, TRAINER_NICOLAS_5, METEOR_FALLS_1F_2R),
+ [REMATCH_ROBERT] = REMATCH(TRAINER_ROBERT_1, TRAINER_ROBERT_2, TRAINER_ROBERT_3, TRAINER_ROBERT_4, TRAINER_ROBERT_5, ROUTE120),
+ [REMATCH_LAO] = REMATCH(TRAINER_LAO_1, TRAINER_LAO_2, TRAINER_LAO_3, TRAINER_LAO_4, TRAINER_LAO_5, ROUTE113),
+ [REMATCH_CYNDY] = REMATCH(TRAINER_CYNDY_1, TRAINER_CYNDY_2, TRAINER_CYNDY_3, TRAINER_CYNDY_4, TRAINER_CYNDY_5, ROUTE115),
+ [REMATCH_MADELINE] = REMATCH(TRAINER_MADELINE_1, TRAINER_MADELINE_2, TRAINER_MADELINE_3, TRAINER_MADELINE_4, TRAINER_MADELINE_5, ROUTE113),
+ [REMATCH_JENNY] = REMATCH(TRAINER_JENNY_1, TRAINER_JENNY_2, TRAINER_JENNY_3, TRAINER_JENNY_4, TRAINER_JENNY_5, ROUTE124),
+ [REMATCH_DIANA] = REMATCH(TRAINER_DIANA_1, TRAINER_DIANA_2, TRAINER_DIANA_3, TRAINER_DIANA_4, TRAINER_DIANA_5, JAGGED_PASS),
+ [REMATCH_AMY_AND_LIV] = REMATCH(TRAINER_AMY_AND_LIV_1, TRAINER_AMY_AND_LIV_2, TRAINER_AMY_AND_LIV_4, TRAINER_AMY_AND_LIV_5, TRAINER_AMY_AND_LIV_6, ROUTE103),
+ [REMATCH_ERNEST] = REMATCH(TRAINER_ERNEST_1, TRAINER_ERNEST_2, TRAINER_ERNEST_3, TRAINER_ERNEST_4, TRAINER_ERNEST_5, ROUTE125),
+ [REMATCH_CORY] = REMATCH(TRAINER_CORY_1, TRAINER_CORY_2, TRAINER_CORY_3, TRAINER_CORY_4, TRAINER_CORY_5, ROUTE108),
+ [REMATCH_EDWIN] = REMATCH(TRAINER_EDWIN_1, TRAINER_EDWIN_2, TRAINER_EDWIN_3, TRAINER_EDWIN_4, TRAINER_EDWIN_5, ROUTE110),
+ [REMATCH_LYDIA] = REMATCH(TRAINER_LYDIA_1, TRAINER_LYDIA_2, TRAINER_LYDIA_3, TRAINER_LYDIA_4, TRAINER_LYDIA_5, ROUTE117),
+ [REMATCH_ISAAC] = REMATCH(TRAINER_ISAAC_1, TRAINER_ISAAC_2, TRAINER_ISAAC_3, TRAINER_ISAAC_4, TRAINER_ISAAC_5, ROUTE117),
+ [REMATCH_GABRIELLE] = REMATCH(TRAINER_GABRIELLE_1, TRAINER_GABRIELLE_2, TRAINER_GABRIELLE_3, TRAINER_GABRIELLE_4, TRAINER_GABRIELLE_5, MT_PYRE_3F),
+ [REMATCH_CATHERINE] = REMATCH(TRAINER_CATHERINE_1, TRAINER_CATHERINE_2, TRAINER_CATHERINE_3, TRAINER_CATHERINE_4, TRAINER_CATHERINE_5, ROUTE119),
+ [REMATCH_JACKSON] = REMATCH(TRAINER_JACKSON_1, TRAINER_JACKSON_2, TRAINER_JACKSON_3, TRAINER_JACKSON_4, TRAINER_JACKSON_5, ROUTE119),
+ [REMATCH_HALEY] = REMATCH(TRAINER_HALEY_1, TRAINER_HALEY_2, TRAINER_HALEY_3, TRAINER_HALEY_4, TRAINER_HALEY_5, ROUTE104),
+ [REMATCH_JAMES] = REMATCH(TRAINER_JAMES_1, TRAINER_JAMES_2, TRAINER_JAMES_3, TRAINER_JAMES_4, TRAINER_JAMES_5, PETALBURG_WOODS),
+ [REMATCH_TRENT] = REMATCH(TRAINER_TRENT_1, TRAINER_TRENT_2, TRAINER_TRENT_3, TRAINER_TRENT_4, TRAINER_TRENT_5, ROUTE112),
+ [REMATCH_SAWYER] = REMATCH(TRAINER_SAWYER_1, TRAINER_SAWYER_2, TRAINER_SAWYER_3, TRAINER_SAWYER_4, TRAINER_SAWYER_5, MT_CHIMNEY),
+ [REMATCH_KIRA_AND_DAN] = REMATCH(TRAINER_KIRA_AND_DAN_1, TRAINER_KIRA_AND_DAN_2, TRAINER_KIRA_AND_DAN_3, TRAINER_KIRA_AND_DAN_4, TRAINER_KIRA_AND_DAN_5, ABANDONED_SHIP_ROOMS2_1F),
+ [REMATCH_WALLY_3] = REMATCH(TRAINER_WALLY_3, TRAINER_WALLY_4, TRAINER_WALLY_5, TRAINER_WALLY_6, TRAINER_WALLY_6, VICTORY_ROAD_1F),
+ [REMATCH_ROXANNE] = REMATCH(TRAINER_ROXANNE_1, TRAINER_ROXANNE_2, TRAINER_ROXANNE_3, TRAINER_ROXANNE_4, TRAINER_ROXANNE_5, RUSTBORO_CITY),
+ [REMATCH_BRAWLY] = REMATCH(TRAINER_BRAWLY_1, TRAINER_BRAWLY_2, TRAINER_BRAWLY_3, TRAINER_BRAWLY_4, TRAINER_BRAWLY_5, DEWFORD_TOWN),
+ [REMATCH_WATTSON] = REMATCH(TRAINER_WATTSON_1, TRAINER_WATTSON_2, TRAINER_WATTSON_3, TRAINER_WATTSON_4, TRAINER_WATTSON_5, MAUVILLE_CITY),
+ [REMATCH_FLANNERY] = REMATCH(TRAINER_FLANNERY_1, TRAINER_FLANNERY_2, TRAINER_FLANNERY_3, TRAINER_FLANNERY_4, TRAINER_FLANNERY_5, LAVARIDGE_TOWN),
+ [REMATCH_NORMAN] = REMATCH(TRAINER_NORMAN_1, TRAINER_NORMAN_2, TRAINER_NORMAN_3, TRAINER_NORMAN_4, TRAINER_NORMAN_5, PETALBURG_CITY),
+ [REMATCH_WINONA] = REMATCH(TRAINER_WINONA_1, TRAINER_WINONA_2, TRAINER_WINONA_3, TRAINER_WINONA_4, TRAINER_WINONA_5, FORTREE_CITY),
+ [REMATCH_TATE_AND_LIZA] = REMATCH(TRAINER_TATE_AND_LIZA_1, TRAINER_TATE_AND_LIZA_2, TRAINER_TATE_AND_LIZA_3, TRAINER_TATE_AND_LIZA_4, TRAINER_TATE_AND_LIZA_5, MOSSDEEP_CITY),
+ [REMATCH_JUAN] = REMATCH(TRAINER_JUAN_1, TRAINER_JUAN_2, TRAINER_JUAN_3, TRAINER_JUAN_4, TRAINER_JUAN_5, SOOTOPOLIS_CITY),
+ [REMATCH_SIDNEY] = REMATCH(TRAINER_SIDNEY, TRAINER_SIDNEY, TRAINER_SIDNEY, TRAINER_SIDNEY, TRAINER_SIDNEY, EVER_GRANDE_CITY),
+ [REMATCH_PHOEBE] = REMATCH(TRAINER_PHOEBE, TRAINER_PHOEBE, TRAINER_PHOEBE, TRAINER_PHOEBE, TRAINER_PHOEBE, EVER_GRANDE_CITY),
+ [REMATCH_GLACIA] = REMATCH(TRAINER_GLACIA, TRAINER_GLACIA, TRAINER_GLACIA, TRAINER_GLACIA, TRAINER_GLACIA, EVER_GRANDE_CITY),
+ [REMATCH_DRAKE] = REMATCH(TRAINER_DRAKE, TRAINER_DRAKE, TRAINER_DRAKE, TRAINER_DRAKE, TRAINER_DRAKE, EVER_GRANDE_CITY),
+ [REMATCH_WALLACE] = REMATCH(TRAINER_WALLACE, TRAINER_WALLACE, TRAINER_WALLACE, TRAINER_WALLACE, TRAINER_WALLACE, EVER_GRANDE_CITY),
};
static const u16 sBadgeFlags[8] =
diff --git a/src/battle_tower.c b/src/battle_tower.c
index 6f8e3e25f..c55180965 100644
--- a/src/battle_tower.c
+++ b/src/battle_tower.c
@@ -1019,7 +1019,7 @@ struct
u8 level;
u8 nature;
u8 evs[6];
- u16 moves[4];
+ u16 moves[MAX_MON_MOVES];
} const sStevenMons[3] =
{
{
@@ -1561,7 +1561,7 @@ void PutNewBattleTowerRecord(struct EmeraldBattleTowerRecord *newRecordEm)
for (i = 0; i < 5; i++)
{
k = 0;
- for (j = 0; j < 4; j++)
+ for (j = 0; j < TRAINER_ID_LENGTH; j++)
{
if (gSaveBlock2Ptr->frontier.towerRecords[i].trainerId[j] != newRecord->trainerId[j])
break;
@@ -3190,7 +3190,7 @@ static void FillPartnerParty(u16 trainerId)
sStevenMons[i].level,
sStevenMons[i].fixedIV,
TRUE, i, // BUG: personality was stored in the 'j' variable. As a result, Steven's pokemon do not have the intended natures.
- TRUE, STEVEN_OTID);
+ OT_ID_PRESET, STEVEN_OTID);
for (j = 0; j < 6; j++)
SetMonData(&gPlayerParty[3 + i], MON_DATA_HP_EV + j, &sStevenMons[i].evs[j]);
for (j = 0; j < MAX_MON_MOVES; j++)
@@ -3308,7 +3308,7 @@ bool32 RubyBattleTowerRecordToEmerald(struct RSBattleTowerRecord *src, struct Em
for (i = 0; i < PLAYER_NAME_LENGTH + 1; i++)
dst->name[i] = src->name[i];
- for (i = 0; i < 4; i++)
+ for (i = 0; i < TRAINER_ID_LENGTH; i++)
dst->trainerId[i] = src->trainerId[i];
for (i = 0; i < 6; i++)
dst->greeting[i] = src->greeting[i];
@@ -3357,7 +3357,7 @@ bool32 EmeraldBattleTowerRecordToRuby(struct EmeraldBattleTowerRecord *src, stru
for (i = 0; i < PLAYER_NAME_LENGTH + 1; i++)
dst->name[i] = src->name[i];
- for (i = 0; i < 4; i++)
+ for (i = 0; i < TRAINER_ID_LENGTH; i++)
dst->trainerId[i] = src->trainerId[i];
for (i = 0; i < 6; i++)
dst->greeting[i] = src->greeting[i];
diff --git a/src/battle_transition.c b/src/battle_transition.c
index 3e86fcf51..fb7fd0c2f 100644
--- a/src/battle_transition.c
+++ b/src/battle_transition.c
@@ -1961,9 +1961,10 @@ static bool8 Phase2_Ripple_Func2(struct Task *task)
for (i = 0; i < 160; i++, r4 += r8)
{
- // todo: fix the asm
s16 var = r4 >> 8;
- asm("");
+
+ var++;
+ var--;
gScanlineEffectRegBuffers[0][i] = sTransitionStructPtr->field_16 + Sin(var, r3);
}
diff --git a/src/battle_util.c b/src/battle_util.c
index 6ef51bfd2..2d9693766 100644
--- a/src/battle_util.c
+++ b/src/battle_util.c
@@ -1,30 +1,30 @@
#include "global.h"
#include "battle.h"
#include "battle_anim.h"
-#include "constants/battle_script_commands.h"
-#include "constants/abilities.h"
-#include "constants/moves.h"
-#include "constants/hold_effects.h"
-#include "constants/battle_anim.h"
#include "pokemon.h"
-#include "constants/species.h"
#include "item.h"
-#include "constants/items.h"
#include "util.h"
-#include "constants/battle_move_effects.h"
#include "battle_scripts.h"
#include "random.h"
#include "text.h"
#include "string_util.h"
#include "battle_message.h"
-#include "constants/battle_string_ids.h"
-#include "constants/weather.h"
#include "battle_ai_script_commands.h"
#include "battle_controllers.h"
#include "event_data.h"
#include "link.h"
-#include "berry.h"
#include "field_weather.h"
+#include "constants/abilities.h"
+#include "constants/battle_anim.h"
+#include "constants/battle_move_effects.h"
+#include "constants/battle_script_commands.h"
+#include "constants/battle_string_ids.h"
+#include "constants/berry.h"
+#include "constants/hold_effects.h"
+#include "constants/items.h"
+#include "constants/moves.h"
+#include "constants/species.h"
+#include "constants/weather.h"
// rom const data
static const u16 sSoundMovesTable[] =
diff --git a/src/berry.c b/src/berry.c
index 49acb7d10..bbaa2b03b 100644
--- a/src/berry.c
+++ b/src/berry.c
@@ -11,6 +11,7 @@
#include "random.h"
#include "string_util.h"
#include "text.h"
+#include "constants/berry.h"
#include "constants/event_object_movement_constants.h"
#include "constants/items.h"
diff --git a/src/berry_blender.c b/src/berry_blender.c
index 03764b2f8..911c3e545 100644
--- a/src/berry_blender.c
+++ b/src/berry_blender.c
@@ -36,6 +36,7 @@
#include "new_game.h"
#include "save.h"
#include "link.h"
+#include "constants/berry.h"
#include "constants/rgb.h"
#define BLENDER_SCORE_BEST 0
diff --git a/src/berry_tag_screen.c b/src/berry_tag_screen.c
index c3eac783d..10a45dc65 100644
--- a/src/berry_tag_screen.c
+++ b/src/berry_tag_screen.c
@@ -4,7 +4,6 @@
#include "decompress.h"
#include "event_object_movement.h"
#include "item_menu.h"
-#include "constants/items.h"
#include "item.h"
#include "item_use.h"
#include "main.h"
@@ -15,7 +14,6 @@
#include "menu_helpers.h"
#include "palette.h"
#include "overworld.h"
-#include "constants/songs.h"
#include "sound.h"
#include "sprite.h"
#include "string_util.h"
@@ -28,7 +26,10 @@
#include "item_menu_icons.h"
#include "decompress.h"
#include "international_string_util.h"
+#include "constants/berry.h"
+#include "constants/items.h"
#include "constants/rgb.h"
+#include "constants/songs.h"
// There are 4 windows used in berry tag screen.
enum
diff --git a/src/bg.c b/src/bg.c
index 1678f4023..ab4e8b60d 100644
--- a/src/bg.c
+++ b/src/bg.c
@@ -1174,78 +1174,29 @@ u32 GetTileMapIndexFromCoords(s32 x, s32 y, s32 screenSize, u32 screenWidth, u32
return (y * 0x20) + x;
}
-#ifdef NONMATCHING // This one has some weird switch statement cases that refuse to cooperate
void CopyTileMapEntry(const u16 *src, u16 *dest, s32 palette1, s32 tileOffset, s32 palette2)
{
u16 var;
+
+ if (palette1 == 16)
+ goto CASE_16;
switch (palette1)
{
case 0 ... 16:
- if (palette1 != 16)
- var = ((*src + tileOffset) & 0xFFF) + ((palette1 + palette2) << 12);
- else
- var = ((*dest & 0xFC00) + (palette2 << 12)) | ((*src + tileOffset) & 0x3FF);
+ var = ((*src + tileOffset) & 0xFFF) + ((palette1 + palette2) << 12);
+ break;
+ CASE_16:
+ var = *dest;
+ var &= 0xFC00;
+ var += palette2 << 12;
+ var |= (*src + tileOffset) & 0x3FF;
break;
default:
var = *src + tileOffset + (palette2 << 12);
break;
}
-
*dest = var;
}
-#else
-NAKED
-void CopyTileMapEntry(const u16 *src, u16 *dest, s32 palette1, s32 tileOffset, s32 palette2)
-{
- asm("push {r4-r6,lr}\n\
- add r4, r0, #0\n\
- add r6, r1, #0\n\
- ldr r5, [sp, #0x10]\n\
- cmp r2, #0x10\n\
- beq _08002B14\n\
- cmp r2, #0x10\n\
- bgt _08002B34\n\
- cmp r2, #0\n\
- blt _08002B34\n\
- ldrh r0, [r4]\n\
- add r0, r3\n\
- ldr r3, =0x00000fff\n\
- add r1, r3, #0\n\
- and r0, r1\n\
- add r1, r2, r5\n\
- lsl r1, #12\n\
- b _08002B3A\n\
- .pool\n\
-_08002B14:\n\
- ldrh r1, [r6]\n\
- mov r0, #0xFC\n\
- lsl r0, #8\n\
- and r1, r0\n\
- lsl r2, r5, #12\n\
- add r2, r1, r2\n\
- ldrh r0, [r4]\n\
- add r0, r3\n\
- ldr r3, =0x000003ff\n\
- add r1, r3, #0\n\
- and r0, r1\n\
- orr r0, r2\n\
- b _08002B3C\n\
- .pool\n\
-_08002B34:\n\
- ldrh r0, [r4]\n\
- add r0, r3\n\
- lsl r1, r5, #12\n\
-_08002B3A:\n\
- add r0, r1\n\
-_08002B3C:\n\
- lsl r0, #16\n\
- lsr r1, r0, #16\n\
- strh r1, [r6]\n\
- pop {r4-r6}\n\
- pop {r0}\n\
- bx r0\n");
-}
-#endif // NONMATCHING
u32 GetBgType(u8 bg)
{
diff --git a/src/clock.c b/src/clock.c
index 1e7c5f83e..125d403bb 100644
--- a/src/clock.c
+++ b/src/clock.c
@@ -25,7 +25,7 @@ static void InitTimeBasedEvents(void)
void DoTimeBasedEvents(void)
{
- if (FlagGet(FLAG_SYS_CLOCK_SET) && !sub_813B9C0())
+ if (FlagGet(FLAG_SYS_CLOCK_SET) && !InPokemonCenter())
{
RtcCalcLocalTime();
UpdatePerDay(&gLocalTime);
diff --git a/src/contest.c b/src/contest.c
index 662a27060..79c1616c2 100644
--- a/src/contest.c
+++ b/src/contest.c
@@ -1217,10 +1217,10 @@ static bool8 SetupContestGraphics(u8 *stateVar)
CreateApplauseMeterSprite();
sub_80DC5E8();
sub_80DC7EC();
- gBattlerPositions[0] = 0;
- gBattlerPositions[1] = 1;
- gBattlerPositions[2] = 3;
- gBattlerPositions[3] = 2;
+ gBattlerPositions[0] = B_POSITION_PLAYER_LEFT;
+ gBattlerPositions[1] = B_POSITION_OPPONENT_LEFT;
+ gBattlerPositions[2] = B_POSITION_OPPONENT_RIGHT;
+ gBattlerPositions[3] = B_POSITION_PLAYER_RIGHT;
gBattleTypeFlags = 0;
gBattlerAttacker = 2;
gBattlerTarget = 3;
diff --git a/src/contest_painting.c b/src/contest_painting.c
index 66127cbbc..1b95e1ed9 100644
--- a/src/contest_painting.c
+++ b/src/contest_painting.c
@@ -292,7 +292,7 @@ static void PrintContestPaintingCaption(u8 contestType, u8 arg1)
category = gUnknown_030061C0->contestCategory;
if (contestType < 8)
{
- sub_818E868(gStringVar1, category);
+ BufferContestName(gStringVar1, category);
StringAppend(gStringVar1, gText_Space);
StringAppend(gStringVar1, gContestRankTextPointers[gUnknown_030061C0->contestRank]);
StringCopy(gStringVar2, gUnknown_030061C0->trainerName);
diff --git a/src/credits.c b/src/credits.c
index 1e96514b1..44fa2002c 100644
--- a/src/credits.c
+++ b/src/credits.c
@@ -143,7 +143,7 @@ struct Unk201C000
struct CreditsEntry
{
u8 var_0;
- u8 var_1;
+ bool8 isTitle;
const u8 *text;
};
@@ -165,7 +165,7 @@ static const u32 gCreditsCopyrightEnd_Gfx[] = INCBIN_U32("graphics/credits/the_e
static void sub_81772B8(struct Sprite *sprite);
-static const u8 gUnknown_085E5BAC[] =
+static const u8 sTheEnd_LetterTMap[] =
{
0, 1, 0,
0xFF, 1, 0xFF,
@@ -174,7 +174,7 @@ static const u8 gUnknown_085E5BAC[] =
0xFF, 1, 0xFF,
};
-static const u8 gUnknown_085E5BBB[] =
+static const u8 sTheEnd_LetterHMap[] =
{
1, 0xFF, 1,
1, 0xFF, 1,
@@ -183,7 +183,7 @@ static const u8 gUnknown_085E5BBB[] =
1, 0xFF, 1,
};
-static const u8 gUnknown_085E5BCA[] =
+static const u8 sTheEnd_LetterEMap[] =
{
1, 0, 0,
1, 0xFF, 0xFF,
@@ -192,7 +192,7 @@ static const u8 gUnknown_085E5BCA[] =
1, 0x80, 0x80,
};
-static const u8 gUnknown_085E5BD9[] =
+static const u8 sTheEnd_LetterNMap[] =
{
1, 3, 1,
1, 4, 1,
@@ -201,7 +201,7 @@ static const u8 gUnknown_085E5BD9[] =
1, 0xC3, 1,
};
-static const u8 gUnknown_085E5BE8[] =
+static const u8 sTheEnd_LetterDMap[] =
{
1, 6, 7,
1, 8, 9,
@@ -369,165 +369,165 @@ static const u8 gCreditsText_MotoyasuTojima[] = _("Motoyasu Tojima");
static const u8 gCreditsText_NicolaPrattBarlow[] = _("Nicola Pratt-Barlow");
static const u8 gCreditsText_ShellieDow[] = _("Shellie Dow");
static const u8 gCreditsText_ErikJohnson[] = _("Erik Johnson");
-static const struct CreditsEntry gCreditsEntry_EmptyString[] = {0, 0, gCreditsText_EmptyString};
-static const struct CreditsEntry gCreditsEntry_PkmnEmeraldVersion[] = {7, 1, gCreditsText_PkmnEmeraldVersion};
-static const struct CreditsEntry gCreditsEntry_Credits[] = {11, 1, gCreditsText_Credits};
-static const struct CreditsEntry gCreditsEntry_ExecutiveDirector[] = {8, 1, gCreditsText_ExecutiveDirector};
-static const struct CreditsEntry gCreditsEntry_Director[] = {12, 1, gCreditsText_Director};
-static const struct CreditsEntry gCreditsEntry_ArtDirector[] = {10, 1, gCreditsText_ArtDirector};
-static const struct CreditsEntry gCreditsEntry_BattleDirector[] = {10, 1, gCreditsText_BattleDirector};
-static const struct CreditsEntry gCreditsEntry_MainProgrammer[] = {10, 1, gCreditsText_MainProgrammer};
-static const struct CreditsEntry gCreditsEntry_BattleSystemPgrms[] = {8, 1, gCreditsText_BattleSystemPgrms};
-static const struct CreditsEntry gCreditsEntry_FieldSystemPgrms[] = {7, 1, gCreditsText_FieldSystemPgrms};
-static const struct CreditsEntry gCreditsEntry_Programmers[] = {12, 1, gCreditsText_Programmers};
-static const struct CreditsEntry gCreditsEntry_MainGraphicDesigner[] = {7, 1, gCreditsText_MainGraphicDesigner};
-static const struct CreditsEntry gCreditsEntry_GraphicDesigners[] = {9, 1, gCreditsText_GraphicDesigners};
-static const struct CreditsEntry gCreditsEntry_PkmnDesigners[] = {10, 1, gCreditsText_PkmnDesigners};
-static const struct CreditsEntry gCreditsEntry_MusicComposition[] = {13, 1, gCreditsText_MusicComposition};
-static const struct CreditsEntry gCreditsEntry_SoundEffectsAndPkmnVoices[] = {4, 1, gCreditsText_SoundEffectsAndPkmnVoices};
-static const struct CreditsEntry gCreditsEntry_GameDesigners[] = {11, 1, gCreditsText_GameDesigners};
-static const struct CreditsEntry gCreditsEntry_ScenarioPlot[] = {11, 1, gCreditsText_ScenarioPlot};
-static const struct CreditsEntry gCreditsEntry_Scenario[] = {13, 1, gCreditsText_Scenario};
-static const struct CreditsEntry gCreditsEntry_ScriptDesigners[] = {10, 1, gCreditsText_ScriptDesigners};
-static const struct CreditsEntry gCreditsEntry_MapDesigners[] = {11, 1, gCreditsText_MapDesigners};
-static const struct CreditsEntry gCreditsEntry_MapDataDesigners[] = {9, 1, gCreditsText_MapDataDesigners};
-static const struct CreditsEntry gCreditsEntry_ParametricDesigners[] = {9, 1, gCreditsText_ParametricDesigners};
-static const struct CreditsEntry gCreditsEntry_PokedexText[] = {11, 1, gCreditsText_PokedexText};
-static const struct CreditsEntry gCreditsEntry_EnvAndToolPgrms[] = {6, 1, gCreditsText_EnvAndToolPgrms};
-static const struct CreditsEntry gCreditsEntry_NCLProductTesting[] = {11, 1, gCreditsText_NCLProductTesting};
-static const struct CreditsEntry gCreditsEntry_SpecialThanks[] = {10, 1, gCreditsText_SpecialThanks};
-static const struct CreditsEntry gCreditsEntry_Coordinators[] = {11, 1, gCreditsText_Coordinators};
-static const struct CreditsEntry gCreditsEntry_Producers[] = {11, 1, gCreditsText_Producers};
-static const struct CreditsEntry gCreditsEntry_ExecProducers[] = {7, 1, gCreditsText_ExecProducers};
-static const struct CreditsEntry gCreditsEntry_InfoSupervisors[] = {10, 1, gCreditsText_InfoSupervisors};
-static const struct CreditsEntry gCreditsEntry_TaskManagers[] = {8, 1, gCreditsText_TaskManagers};
-static const struct CreditsEntry gCreditsEntry_BrailleCodeCheck[] = {10, 1, gCreditsText_BrailleCodeCheck};
-static const struct CreditsEntry gCreditsEntry_WorldDirector[] = {10, 1, gCreditsText_WorldDirector};
-static const struct CreditsEntry gCreditsEntry_BattleFrontierData[] = {8, 1, gCreditsText_BattleFrontierData};
-static const struct CreditsEntry gCreditsEntry_SupportProgrammers[] = {10, 1, gCreditsText_SupportProgrammers};
-static const struct CreditsEntry gCreditsEntry_Artwork[] = {12, 1, gCreditsText_Artwork};
-static const struct CreditsEntry gCreditsEntry_LeadProgrammer[] = {10, 1, gCreditsText_LeadProgrammer};
-static const struct CreditsEntry gCreditsEntry_LeadGraphicArtist[] = {9, 1, gCreditsText_LeadGraphicArtist};
-static const struct CreditsEntry gCreditsEntry_SatoshiTajiri[] = {11, 0, gCreditsText_SatoshiTajiri};
-static const struct CreditsEntry gCreditsEntry_JunichiMasuda[] = {11, 0, gCreditsText_JunichiMasuda};
-static const struct CreditsEntry gCreditsEntry_KenSugimori[] = {11, 0, gCreditsText_KenSugimori};
-static const struct CreditsEntry gCreditsEntry_ShigekiMorimoto[] = {11, 0, gCreditsText_ShigekiMorimoto};
-static const struct CreditsEntry gCreditsEntry_TetsuyaWatanabe[] = {11, 0, gCreditsText_TetsuyaWatanabe};
-static const struct CreditsEntry gCreditsEntry_HisashiSogabe[] = {11, 0, gCreditsText_HisashiSogabe};
-static const struct CreditsEntry gCreditsEntry_SosukeTamada[] = {11, 0, gCreditsText_SosukeTamada};
-static const struct CreditsEntry gCreditsEntry_AkitoMori[] = {11, 0, gCreditsText_AkitoMori};
-static const struct CreditsEntry gCreditsEntry_KeitaKagaya[] = {11, 0, gCreditsText_KeitaKagaya};
-static const struct CreditsEntry gCreditsEntry_YoshinoriMatsuda[] = {11, 0, gCreditsText_YoshinoriMatsuda};
-static const struct CreditsEntry gCreditsEntry_HiroyukiNakamura[] = {11, 0, gCreditsText_HiroyukiNakamura};
-static const struct CreditsEntry gCreditsEntry_MasaoTaya[] = {11, 0, gCreditsText_MasaoTaya};
-static const struct CreditsEntry gCreditsEntry_SatoshiNohara[] = {11, 0, gCreditsText_SatoshiNohara};
-static const struct CreditsEntry gCreditsEntry_TomomichiOhta[] = {11, 0, gCreditsText_TomomichiOhta};
-static const struct CreditsEntry gCreditsEntry_MiyukiIwasawa[] = {11, 0, gCreditsText_MiyukiIwasawa};
-static const struct CreditsEntry gCreditsEntry_TakenoriOhta[] = {11, 0, gCreditsText_TakenoriOhta};
-static const struct CreditsEntry gCreditsEntry_HironobuYoshida[] = {11, 0, gCreditsText_HironobuYoshida};
-static const struct CreditsEntry gCreditsEntry_MotofumiFujiwara[] = {11, 0, gCreditsText_MotofumiFujiwara};
-static const struct CreditsEntry gCreditsEntry_SatoshiOhta[] = {11, 0, gCreditsText_SatoshiOhta};
-static const struct CreditsEntry gCreditsEntry_AsukaIwashita[] = {11, 0, gCreditsText_AsukaIwashita};
-static const struct CreditsEntry gCreditsEntry_AimiTomita[] = {11, 0, gCreditsText_AimiTomita};
-static const struct CreditsEntry gCreditsEntry_TakaoUnno[] = {11, 0, gCreditsText_TakaoUnno};
-static const struct CreditsEntry gCreditsEntry_KanakoEo[] = {11, 0, gCreditsText_KanakoEo};
-static const struct CreditsEntry gCreditsEntry_JunOkutani[] = {11, 0, gCreditsText_JunOkutani};
-static const struct CreditsEntry gCreditsEntry_AtsukoNishida[] = {11, 0, gCreditsText_AtsukoNishida};
-static const struct CreditsEntry gCreditsEntry_MuneoSaito[] = {11, 0, gCreditsText_MuneoSaito};
-static const struct CreditsEntry gCreditsEntry_RenaYoshikawa[] = {11, 0, gCreditsText_RenaYoshikawa};
-static const struct CreditsEntry gCreditsEntry_GoIchinose[] = {11, 0, gCreditsText_GoIchinose};
-static const struct CreditsEntry gCreditsEntry_MorikazuAoki[] = {11, 0, gCreditsText_MorikazuAoki};
-static const struct CreditsEntry gCreditsEntry_KojiNishino[] = {11, 0, gCreditsText_KojiNishino};
-static const struct CreditsEntry gCreditsEntry_KenjiMatsushima[] = {11, 0, gCreditsText_KenjiMatsushima};
-static const struct CreditsEntry gCreditsEntry_TetsujiOhta[] = {11, 0, gCreditsText_TetsujiOhta};
-static const struct CreditsEntry gCreditsEntry_HitomiSato[] = {11, 0, gCreditsText_HitomiSato};
-static const struct CreditsEntry gCreditsEntry_TakeshiKawachimaru[] = {11, 0, gCreditsText_TakeshiKawachimaru};
-static const struct CreditsEntry gCreditsEntry_TeruyukiShimoyamada[] = {11, 0, gCreditsText_TeruyukiShimoyamada};
-static const struct CreditsEntry gCreditsEntry_ShigeruOhmori[] = {11, 0, gCreditsText_ShigeruOhmori};
-static const struct CreditsEntry gCreditsEntry_TadashiTakahashi[] = {11, 0, gCreditsText_TadashiTakahashi};
-static const struct CreditsEntry gCreditsEntry_ToshinobuMatsumiya[] = {11, 0, gCreditsText_ToshinobuMatsumiya};
-static const struct CreditsEntry gCreditsEntry_AkihitoTomisawa[] = {11, 0, gCreditsText_AkihitoTomisawa};
-static const struct CreditsEntry gCreditsEntry_HirokiEnomoto[] = {11, 0, gCreditsText_HirokiEnomoto};
-static const struct CreditsEntry gCreditsEntry_KazuyukiTerada[] = {11, 0, gCreditsText_KazuyukiTerada};
-static const struct CreditsEntry gCreditsEntry_YuriSakurai[] = {11, 0, gCreditsText_YuriSakurai};
-static const struct CreditsEntry gCreditsEntry_HiromiSagawa[] = {11, 0, gCreditsText_HiromiSagawa};
-static const struct CreditsEntry gCreditsEntry_KenjiTominaga[] = {11, 0, gCreditsText_KenjiTominaga};
-static const struct CreditsEntry gCreditsEntry_YoshioTajiri[] = {11, 0, gCreditsText_YoshioTajiri};
-static const struct CreditsEntry gCreditsEntry_TeikoSasaki[] = {11, 0, gCreditsText_TeikoSasaki};
-static const struct CreditsEntry gCreditsEntry_SachikoHamano[] = {11, 0, gCreditsText_SachikoHamano};
-static const struct CreditsEntry gCreditsEntry_ChieMatsumiya[] = {11, 0, gCreditsText_ChieMatsumiya};
-static const struct CreditsEntry gCreditsEntry_AkikoShinozaki[] = {11, 0, gCreditsText_AkikoShinozaki};
-static const struct CreditsEntry gCreditsEntry_AstukoFujii[] = {11, 0, gCreditsText_AstukoFujii};
-static const struct CreditsEntry gCreditsEntry_NozomuSaito[] = {11, 0, gCreditsText_NozomuSaito};
-static const struct CreditsEntry gCreditsEntry_KenkichiToyama[] = {11, 0, gCreditsText_KenkichiToyama};
-static const struct CreditsEntry gCreditsEntry_SuguruNakatsui[] = {11, 0, gCreditsText_SuguruNakatsui};
-static const struct CreditsEntry gCreditsEntry_YumiFunasaka[] = {11, 0, gCreditsText_YumiFunasaka};
-static const struct CreditsEntry gCreditsEntry_NaokoYanase[] = {11, 0, gCreditsText_NaokoYanase};
-static const struct CreditsEntry gCreditsEntry_NCLSuperMarioClub[] = {11, 0, gCreditsText_NCLSuperMarioClub};
-static const struct CreditsEntry gCreditsEntry_AtsushiTada[] = {11, 0, gCreditsText_AtsushiTada};
-static const struct CreditsEntry gCreditsEntry_TakahiroOhnishi[] = {11, 0, gCreditsText_TakahiroOhnishi};
-static const struct CreditsEntry gCreditsEntry_NorihideOkamura[] = {11, 0, gCreditsText_NorihideOkamura};
-static const struct CreditsEntry gCreditsEntry_HiroNakamura[] = {11, 0, gCreditsText_HiroNakamura};
-static const struct CreditsEntry gCreditsEntry_HiroyukiUesugi[] = {11, 0, gCreditsText_HiroyukiUesugi};
-static const struct CreditsEntry gCreditsEntry_TerukiMurakawa[] = {11, 0, gCreditsText_TerukiMurakawa};
-static const struct CreditsEntry gCreditsEntry_AkiraKinashi[] = {11, 0, gCreditsText_AkiraKinashi};
-static const struct CreditsEntry gCreditsEntry_MichikoTakizawa[] = {11, 0, gCreditsText_MichikoTakizawa};
-static const struct CreditsEntry gCreditsEntry_MakikoTakada[] = {11, 0, gCreditsText_MakikoTakada};
-static const struct CreditsEntry gCreditsEntry_TakanaoKondo[] = {11, 0, gCreditsText_TakanaoKondo};
-static const struct CreditsEntry gCreditsEntry_AiMashima[] = {11, 0, gCreditsText_AiMashima};
-static const struct CreditsEntry gCreditsEntry_GakujiNomoto[] = {11, 0, gCreditsText_GakujiNomoto};
-static const struct CreditsEntry gCreditsEntry_TakehiroIzushi[] = {11, 0, gCreditsText_TakehiroIzushi};
-static const struct CreditsEntry gCreditsEntry_HitoshiYamagami[] = {11, 0, gCreditsText_HitoshiYamagami};
-static const struct CreditsEntry gCreditsEntry_KyokoWatanabe[] = {11, 0, gCreditsText_KyokoWatanabe};
-static const struct CreditsEntry gCreditsEntry_TakaoNakano[] = {11, 0, gCreditsText_TakaoNakano};
-static const struct CreditsEntry gCreditsEntry_HiroyukiJinnai[] = {11, 0, gCreditsText_HiroyukiJinnai};
-static const struct CreditsEntry gCreditsEntry_HiroakiTsuru[] = {11, 0, gCreditsText_HiroakiTsuru};
-static const struct CreditsEntry gCreditsEntry_TsunekazIshihara[] = {11, 0, gCreditsText_TsunekazIshihara};
-static const struct CreditsEntry gCreditsEntry_SatoruIwata[] = {11, 0, gCreditsText_SatoruIwata};
-static const struct CreditsEntry gCreditsEntry_KazuyaSuyama[] = {11, 0, gCreditsText_KazuyaSuyama};
-static const struct CreditsEntry gCreditsEntry_SatoshiMitsuhara[] = {11, 0, gCreditsText_SatoshiMitsuhara};
-static const struct CreditsEntry gCreditsEntry_JapanBrailleLibrary[] = {9, 0, gCreditsText_JapanBrailleLibrary};
-static const struct CreditsEntry gCreditsEntry_TomotakaKomura[] = {11, 0, gCreditsText_TomotakaKomura};
-static const struct CreditsEntry gCreditsEntry_MikikoOhhashi[] = {11, 0, gCreditsText_MikikoOhhashi};
-static const struct CreditsEntry gCreditsEntry_DaisukeHoshino[] = {11, 0, gCreditsText_DaisukeHoshino};
-static const struct CreditsEntry gCreditsEntry_KenjiroIto[] = {11, 0, gCreditsText_KenjiroIto};
-static const struct CreditsEntry gCreditsEntry_RuiKawaguchi[] = {11, 0, gCreditsText_RuiKawaguchi};
-static const struct CreditsEntry gCreditsEntry_ShunsukeKohori[] = {11, 0, gCreditsText_ShunsukeKohori};
-static const struct CreditsEntry gCreditsEntry_SachikoNakamichi[] = {11, 0, gCreditsText_SachikoNakamichi};
-static const struct CreditsEntry gCreditsEntry_FujikoNomura[] = {11, 0, gCreditsText_FujikoNomura};
-static const struct CreditsEntry gCreditsEntry_KazukiYoshihara[] = {11, 0, gCreditsText_KazukiYoshihara};
-static const struct CreditsEntry gCreditsEntry_RetsujiNomoto[] = {11, 0, gCreditsText_RetsujiNomoto};
-static const struct CreditsEntry gCreditsEntry_AzusaTajima[] = {11, 0, gCreditsText_AzusaTajima};
-static const struct CreditsEntry gCreditsEntry_ShusakuEgami[] = {11, 0, gCreditsText_ShusakuEgami};
-static const struct CreditsEntry gCreditsEntry_PackageAndManual[] = {0, 1, gCreditsText_PackageAndManual};
-static const struct CreditsEntry gCreditsEntry_EnglishVersion[] = {0, 1, gCreditsText_EnglishVersion};
-static const struct CreditsEntry gCreditsEntry_Translator[] = {0, 1, gCreditsText_Translator};
-static const struct CreditsEntry gCreditsEntry_TextEditor[] = {0, 1, gCreditsText_TextEditor};
-static const struct CreditsEntry gCreditsEntry_NCLCoordinator[] = {0, 1, gCreditsText_NCLCoordinator};
-static const struct CreditsEntry gCreditsEntry_GraphicDesigner[] = {0, 1, gCreditsText_GraphicDesigner};
-static const struct CreditsEntry gCreditsEntry_NOAProductTesting[] = {0, 1, gCreditsText_NOAProductTesting};
-static const struct CreditsEntry gCreditsEntry_HideyukiNakajima[] = {0, 0, gCreditsText_HideyukiNakajima};
-static const struct CreditsEntry gCreditsEntry_HidenoriSaeki[] = {0, 0, gCreditsText_HidenoriSaeki};
-static const struct CreditsEntry gCreditsEntry_YokoWatanabe[] = {0, 0, gCreditsText_YokoWatanabe};
-static const struct CreditsEntry gCreditsEntry_SakaeKimura[] = {0, 0, gCreditsText_SakaeKimura};
-static const struct CreditsEntry gCreditsEntry_ChiakiShinkai[] = {0, 0, gCreditsText_ChiakiShinkai};
-static const struct CreditsEntry gCreditsEntry_SethMcMahill[] = {0, 0, gCreditsText_SethMcMahill};
-static const struct CreditsEntry gCreditsEntry_NobOgasawara[] = {0, 0, gCreditsText_NobOgasawara};
-static const struct CreditsEntry gCreditsEntry_TeresaLillygren[] = {0, 0, gCreditsText_TeresaLillygren};
-static const struct CreditsEntry gCreditsEntry_KimikoNakamichi[] = {0, 0, gCreditsText_KimikoNakamichi};
-static const struct CreditsEntry gCreditsEntry_SouichiYamamoto[] = {0, 0, gCreditsText_SouichiYamamoto};
-static const struct CreditsEntry gCreditsEntry_YuichiroIto[] = {0, 0, gCreditsText_YuichiroIto};
-static const struct CreditsEntry gCreditsEntry_ThomasHertzog[] = {0, 0, gCreditsText_ThomasHertzog};
-static const struct CreditsEntry gCreditsEntry_MikaKurosawa[] = {0, 0, gCreditsText_MikaKurosawa};
-static const struct CreditsEntry gCreditsEntry_NationalFederationBlind[] = {0, 0, gCreditsText_NationalFederationBlind};
-static const struct CreditsEntry gCreditsEntry_PatriciaAMaurer[] = {0, 0, gCreditsText_PatriciaAMaurer};
-static const struct CreditsEntry gCreditsEntry_EuropeanBlindUnion[] = {0, 0, gCreditsText_EuropeanBlindUnion};
-static const struct CreditsEntry gCreditsEntry_AustralianBrailleAuthority[] = {0, 0, gCreditsText_AustralianBrailleAuthority};
-static const struct CreditsEntry gCreditsEntry_RoyalNewZealandFederationBlind[] = {0, 0, gCreditsText_RoyalNewZealandFederationBlind};
-static const struct CreditsEntry gCreditsEntry_MotoyasuTojima[] = {0, 0, gCreditsText_MotoyasuTojima};
-static const struct CreditsEntry gCreditsEntry_NicolaPrattBarlow[] = {0, 0, gCreditsText_NicolaPrattBarlow};
-static const struct CreditsEntry gCreditsEntry_ShellieDow[] = {0, 0, gCreditsText_ShellieDow};
-static const struct CreditsEntry gCreditsEntry_ErikJohnson[] = {0, 0, gCreditsText_ErikJohnson};
+static const struct CreditsEntry gCreditsEntry_EmptyString[] = {0, FALSE, gCreditsText_EmptyString};
+static const struct CreditsEntry gCreditsEntry_PkmnEmeraldVersion[] = {7, TRUE, gCreditsText_PkmnEmeraldVersion};
+static const struct CreditsEntry gCreditsEntry_Credits[] = {11, TRUE, gCreditsText_Credits};
+static const struct CreditsEntry gCreditsEntry_ExecutiveDirector[] = {8, TRUE, gCreditsText_ExecutiveDirector};
+static const struct CreditsEntry gCreditsEntry_Director[] = {12, TRUE, gCreditsText_Director};
+static const struct CreditsEntry gCreditsEntry_ArtDirector[] = {10, TRUE, gCreditsText_ArtDirector};
+static const struct CreditsEntry gCreditsEntry_BattleDirector[] = {10, TRUE, gCreditsText_BattleDirector};
+static const struct CreditsEntry gCreditsEntry_MainProgrammer[] = {10, TRUE, gCreditsText_MainProgrammer};
+static const struct CreditsEntry gCreditsEntry_BattleSystemPgrms[] = {8, TRUE, gCreditsText_BattleSystemPgrms};
+static const struct CreditsEntry gCreditsEntry_FieldSystemPgrms[] = {7, TRUE, gCreditsText_FieldSystemPgrms};
+static const struct CreditsEntry gCreditsEntry_Programmers[] = {12, TRUE, gCreditsText_Programmers};
+static const struct CreditsEntry gCreditsEntry_MainGraphicDesigner[] = {7, TRUE, gCreditsText_MainGraphicDesigner};
+static const struct CreditsEntry gCreditsEntry_GraphicDesigners[] = {9, TRUE, gCreditsText_GraphicDesigners};
+static const struct CreditsEntry gCreditsEntry_PkmnDesigners[] = {10, TRUE, gCreditsText_PkmnDesigners};
+static const struct CreditsEntry gCreditsEntry_MusicComposition[] = {13, TRUE, gCreditsText_MusicComposition};
+static const struct CreditsEntry gCreditsEntry_SoundEffectsAndPkmnVoices[] = {4, TRUE, gCreditsText_SoundEffectsAndPkmnVoices};
+static const struct CreditsEntry gCreditsEntry_GameDesigners[] = {11, TRUE, gCreditsText_GameDesigners};
+static const struct CreditsEntry gCreditsEntry_ScenarioPlot[] = {11, TRUE, gCreditsText_ScenarioPlot};
+static const struct CreditsEntry gCreditsEntry_Scenario[] = {13, TRUE, gCreditsText_Scenario};
+static const struct CreditsEntry gCreditsEntry_ScriptDesigners[] = {10, TRUE, gCreditsText_ScriptDesigners};
+static const struct CreditsEntry gCreditsEntry_MapDesigners[] = {11, TRUE, gCreditsText_MapDesigners};
+static const struct CreditsEntry gCreditsEntry_MapDataDesigners[] = {9, TRUE, gCreditsText_MapDataDesigners};
+static const struct CreditsEntry gCreditsEntry_ParametricDesigners[] = {9, TRUE, gCreditsText_ParametricDesigners};
+static const struct CreditsEntry gCreditsEntry_PokedexText[] = {11, TRUE, gCreditsText_PokedexText};
+static const struct CreditsEntry gCreditsEntry_EnvAndToolPgrms[] = {6, TRUE, gCreditsText_EnvAndToolPgrms};
+static const struct CreditsEntry gCreditsEntry_NCLProductTesting[] = {11, TRUE, gCreditsText_NCLProductTesting};
+static const struct CreditsEntry gCreditsEntry_SpecialThanks[] = {10, TRUE, gCreditsText_SpecialThanks};
+static const struct CreditsEntry gCreditsEntry_Coordinators[] = {11, TRUE, gCreditsText_Coordinators};
+static const struct CreditsEntry gCreditsEntry_Producers[] = {11, TRUE, gCreditsText_Producers};
+static const struct CreditsEntry gCreditsEntry_ExecProducers[] = {7, TRUE, gCreditsText_ExecProducers};
+static const struct CreditsEntry gCreditsEntry_InfoSupervisors[] = {10, TRUE, gCreditsText_InfoSupervisors};
+static const struct CreditsEntry gCreditsEntry_TaskManagers[] = {8, TRUE, gCreditsText_TaskManagers};
+static const struct CreditsEntry gCreditsEntry_BrailleCodeCheck[] = {10, TRUE, gCreditsText_BrailleCodeCheck};
+static const struct CreditsEntry gCreditsEntry_WorldDirector[] = {10, TRUE, gCreditsText_WorldDirector};
+static const struct CreditsEntry gCreditsEntry_BattleFrontierData[] = {8, TRUE, gCreditsText_BattleFrontierData};
+static const struct CreditsEntry gCreditsEntry_SupportProgrammers[] = {10, TRUE, gCreditsText_SupportProgrammers};
+static const struct CreditsEntry gCreditsEntry_Artwork[] = {12, TRUE, gCreditsText_Artwork};
+static const struct CreditsEntry gCreditsEntry_LeadProgrammer[] = {10, TRUE, gCreditsText_LeadProgrammer};
+static const struct CreditsEntry gCreditsEntry_LeadGraphicArtist[] = {9, TRUE, gCreditsText_LeadGraphicArtist};
+static const struct CreditsEntry gCreditsEntry_SatoshiTajiri[] = {11, FALSE, gCreditsText_SatoshiTajiri};
+static const struct CreditsEntry gCreditsEntry_JunichiMasuda[] = {11, FALSE, gCreditsText_JunichiMasuda};
+static const struct CreditsEntry gCreditsEntry_KenSugimori[] = {11, FALSE, gCreditsText_KenSugimori};
+static const struct CreditsEntry gCreditsEntry_ShigekiMorimoto[] = {11, FALSE, gCreditsText_ShigekiMorimoto};
+static const struct CreditsEntry gCreditsEntry_TetsuyaWatanabe[] = {11, FALSE, gCreditsText_TetsuyaWatanabe};
+static const struct CreditsEntry gCreditsEntry_HisashiSogabe[] = {11, FALSE, gCreditsText_HisashiSogabe};
+static const struct CreditsEntry gCreditsEntry_SosukeTamada[] = {11, FALSE, gCreditsText_SosukeTamada};
+static const struct CreditsEntry gCreditsEntry_AkitoMori[] = {11, FALSE, gCreditsText_AkitoMori};
+static const struct CreditsEntry gCreditsEntry_KeitaKagaya[] = {11, FALSE, gCreditsText_KeitaKagaya};
+static const struct CreditsEntry gCreditsEntry_YoshinoriMatsuda[] = {11, FALSE, gCreditsText_YoshinoriMatsuda};
+static const struct CreditsEntry gCreditsEntry_HiroyukiNakamura[] = {11, FALSE, gCreditsText_HiroyukiNakamura};
+static const struct CreditsEntry gCreditsEntry_MasaoTaya[] = {11, FALSE, gCreditsText_MasaoTaya};
+static const struct CreditsEntry gCreditsEntry_SatoshiNohara[] = {11, FALSE, gCreditsText_SatoshiNohara};
+static const struct CreditsEntry gCreditsEntry_TomomichiOhta[] = {11, FALSE, gCreditsText_TomomichiOhta};
+static const struct CreditsEntry gCreditsEntry_MiyukiIwasawa[] = {11, FALSE, gCreditsText_MiyukiIwasawa};
+static const struct CreditsEntry gCreditsEntry_TakenoriOhta[] = {11, FALSE, gCreditsText_TakenoriOhta};
+static const struct CreditsEntry gCreditsEntry_HironobuYoshida[] = {11, FALSE, gCreditsText_HironobuYoshida};
+static const struct CreditsEntry gCreditsEntry_MotofumiFujiwara[] = {11, FALSE, gCreditsText_MotofumiFujiwara};
+static const struct CreditsEntry gCreditsEntry_SatoshiOhta[] = {11, FALSE, gCreditsText_SatoshiOhta};
+static const struct CreditsEntry gCreditsEntry_AsukaIwashita[] = {11, FALSE, gCreditsText_AsukaIwashita};
+static const struct CreditsEntry gCreditsEntry_AimiTomita[] = {11, FALSE, gCreditsText_AimiTomita};
+static const struct CreditsEntry gCreditsEntry_TakaoUnno[] = {11, FALSE, gCreditsText_TakaoUnno};
+static const struct CreditsEntry gCreditsEntry_KanakoEo[] = {11, FALSE, gCreditsText_KanakoEo};
+static const struct CreditsEntry gCreditsEntry_JunOkutani[] = {11, FALSE, gCreditsText_JunOkutani};
+static const struct CreditsEntry gCreditsEntry_AtsukoNishida[] = {11, FALSE, gCreditsText_AtsukoNishida};
+static const struct CreditsEntry gCreditsEntry_MuneoSaito[] = {11, FALSE, gCreditsText_MuneoSaito};
+static const struct CreditsEntry gCreditsEntry_RenaYoshikawa[] = {11, FALSE, gCreditsText_RenaYoshikawa};
+static const struct CreditsEntry gCreditsEntry_GoIchinose[] = {11, FALSE, gCreditsText_GoIchinose};
+static const struct CreditsEntry gCreditsEntry_MorikazuAoki[] = {11, FALSE, gCreditsText_MorikazuAoki};
+static const struct CreditsEntry gCreditsEntry_KojiNishino[] = {11, FALSE, gCreditsText_KojiNishino};
+static const struct CreditsEntry gCreditsEntry_KenjiMatsushima[] = {11, FALSE, gCreditsText_KenjiMatsushima};
+static const struct CreditsEntry gCreditsEntry_TetsujiOhta[] = {11, FALSE, gCreditsText_TetsujiOhta};
+static const struct CreditsEntry gCreditsEntry_HitomiSato[] = {11, FALSE, gCreditsText_HitomiSato};
+static const struct CreditsEntry gCreditsEntry_TakeshiKawachimaru[] = {11, FALSE, gCreditsText_TakeshiKawachimaru};
+static const struct CreditsEntry gCreditsEntry_TeruyukiShimoyamada[] = {11, FALSE, gCreditsText_TeruyukiShimoyamada};
+static const struct CreditsEntry gCreditsEntry_ShigeruOhmori[] = {11, FALSE, gCreditsText_ShigeruOhmori};
+static const struct CreditsEntry gCreditsEntry_TadashiTakahashi[] = {11, FALSE, gCreditsText_TadashiTakahashi};
+static const struct CreditsEntry gCreditsEntry_ToshinobuMatsumiya[] = {11, FALSE, gCreditsText_ToshinobuMatsumiya};
+static const struct CreditsEntry gCreditsEntry_AkihitoTomisawa[] = {11, FALSE, gCreditsText_AkihitoTomisawa};
+static const struct CreditsEntry gCreditsEntry_HirokiEnomoto[] = {11, FALSE, gCreditsText_HirokiEnomoto};
+static const struct CreditsEntry gCreditsEntry_KazuyukiTerada[] = {11, FALSE, gCreditsText_KazuyukiTerada};
+static const struct CreditsEntry gCreditsEntry_YuriSakurai[] = {11, FALSE, gCreditsText_YuriSakurai};
+static const struct CreditsEntry gCreditsEntry_HiromiSagawa[] = {11, FALSE, gCreditsText_HiromiSagawa};
+static const struct CreditsEntry gCreditsEntry_KenjiTominaga[] = {11, FALSE, gCreditsText_KenjiTominaga};
+static const struct CreditsEntry gCreditsEntry_YoshioTajiri[] = {11, FALSE, gCreditsText_YoshioTajiri};
+static const struct CreditsEntry gCreditsEntry_TeikoSasaki[] = {11, FALSE, gCreditsText_TeikoSasaki};
+static const struct CreditsEntry gCreditsEntry_SachikoHamano[] = {11, FALSE, gCreditsText_SachikoHamano};
+static const struct CreditsEntry gCreditsEntry_ChieMatsumiya[] = {11, FALSE, gCreditsText_ChieMatsumiya};
+static const struct CreditsEntry gCreditsEntry_AkikoShinozaki[] = {11, FALSE, gCreditsText_AkikoShinozaki};
+static const struct CreditsEntry gCreditsEntry_AstukoFujii[] = {11, FALSE, gCreditsText_AstukoFujii};
+static const struct CreditsEntry gCreditsEntry_NozomuSaito[] = {11, FALSE, gCreditsText_NozomuSaito};
+static const struct CreditsEntry gCreditsEntry_KenkichiToyama[] = {11, FALSE, gCreditsText_KenkichiToyama};
+static const struct CreditsEntry gCreditsEntry_SuguruNakatsui[] = {11, FALSE, gCreditsText_SuguruNakatsui};
+static const struct CreditsEntry gCreditsEntry_YumiFunasaka[] = {11, FALSE, gCreditsText_YumiFunasaka};
+static const struct CreditsEntry gCreditsEntry_NaokoYanase[] = {11, FALSE, gCreditsText_NaokoYanase};
+static const struct CreditsEntry gCreditsEntry_NCLSuperMarioClub[] = {11, FALSE, gCreditsText_NCLSuperMarioClub};
+static const struct CreditsEntry gCreditsEntry_AtsushiTada[] = {11, FALSE, gCreditsText_AtsushiTada};
+static const struct CreditsEntry gCreditsEntry_TakahiroOhnishi[] = {11, FALSE, gCreditsText_TakahiroOhnishi};
+static const struct CreditsEntry gCreditsEntry_NorihideOkamura[] = {11, FALSE, gCreditsText_NorihideOkamura};
+static const struct CreditsEntry gCreditsEntry_HiroNakamura[] = {11, FALSE, gCreditsText_HiroNakamura};
+static const struct CreditsEntry gCreditsEntry_HiroyukiUesugi[] = {11, FALSE, gCreditsText_HiroyukiUesugi};
+static const struct CreditsEntry gCreditsEntry_TerukiMurakawa[] = {11, FALSE, gCreditsText_TerukiMurakawa};
+static const struct CreditsEntry gCreditsEntry_AkiraKinashi[] = {11, FALSE, gCreditsText_AkiraKinashi};
+static const struct CreditsEntry gCreditsEntry_MichikoTakizawa[] = {11, FALSE, gCreditsText_MichikoTakizawa};
+static const struct CreditsEntry gCreditsEntry_MakikoTakada[] = {11, FALSE, gCreditsText_MakikoTakada};
+static const struct CreditsEntry gCreditsEntry_TakanaoKondo[] = {11, FALSE, gCreditsText_TakanaoKondo};
+static const struct CreditsEntry gCreditsEntry_AiMashima[] = {11, FALSE, gCreditsText_AiMashima};
+static const struct CreditsEntry gCreditsEntry_GakujiNomoto[] = {11, FALSE, gCreditsText_GakujiNomoto};
+static const struct CreditsEntry gCreditsEntry_TakehiroIzushi[] = {11, FALSE, gCreditsText_TakehiroIzushi};
+static const struct CreditsEntry gCreditsEntry_HitoshiYamagami[] = {11, FALSE, gCreditsText_HitoshiYamagami};
+static const struct CreditsEntry gCreditsEntry_KyokoWatanabe[] = {11, FALSE, gCreditsText_KyokoWatanabe};
+static const struct CreditsEntry gCreditsEntry_TakaoNakano[] = {11, FALSE, gCreditsText_TakaoNakano};
+static const struct CreditsEntry gCreditsEntry_HiroyukiJinnai[] = {11, FALSE, gCreditsText_HiroyukiJinnai};
+static const struct CreditsEntry gCreditsEntry_HiroakiTsuru[] = {11, FALSE, gCreditsText_HiroakiTsuru};
+static const struct CreditsEntry gCreditsEntry_TsunekazIshihara[] = {11, FALSE, gCreditsText_TsunekazIshihara};
+static const struct CreditsEntry gCreditsEntry_SatoruIwata[] = {11, FALSE, gCreditsText_SatoruIwata};
+static const struct CreditsEntry gCreditsEntry_KazuyaSuyama[] = {11, FALSE, gCreditsText_KazuyaSuyama};
+static const struct CreditsEntry gCreditsEntry_SatoshiMitsuhara[] = {11, FALSE, gCreditsText_SatoshiMitsuhara};
+static const struct CreditsEntry gCreditsEntry_JapanBrailleLibrary[] = {9, FALSE, gCreditsText_JapanBrailleLibrary};
+static const struct CreditsEntry gCreditsEntry_TomotakaKomura[] = {11, FALSE, gCreditsText_TomotakaKomura};
+static const struct CreditsEntry gCreditsEntry_MikikoOhhashi[] = {11, FALSE, gCreditsText_MikikoOhhashi};
+static const struct CreditsEntry gCreditsEntry_DaisukeHoshino[] = {11, FALSE, gCreditsText_DaisukeHoshino};
+static const struct CreditsEntry gCreditsEntry_KenjiroIto[] = {11, FALSE, gCreditsText_KenjiroIto};
+static const struct CreditsEntry gCreditsEntry_RuiKawaguchi[] = {11, FALSE, gCreditsText_RuiKawaguchi};
+static const struct CreditsEntry gCreditsEntry_ShunsukeKohori[] = {11, FALSE, gCreditsText_ShunsukeKohori};
+static const struct CreditsEntry gCreditsEntry_SachikoNakamichi[] = {11, FALSE, gCreditsText_SachikoNakamichi};
+static const struct CreditsEntry gCreditsEntry_FujikoNomura[] = {11, FALSE, gCreditsText_FujikoNomura};
+static const struct CreditsEntry gCreditsEntry_KazukiYoshihara[] = {11, FALSE, gCreditsText_KazukiYoshihara};
+static const struct CreditsEntry gCreditsEntry_RetsujiNomoto[] = {11, FALSE, gCreditsText_RetsujiNomoto};
+static const struct CreditsEntry gCreditsEntry_AzusaTajima[] = {11, FALSE, gCreditsText_AzusaTajima};
+static const struct CreditsEntry gCreditsEntry_ShusakuEgami[] = {11, FALSE, gCreditsText_ShusakuEgami};
+static const struct CreditsEntry gCreditsEntry_PackageAndManual[] = {0, TRUE, gCreditsText_PackageAndManual};
+static const struct CreditsEntry gCreditsEntry_EnglishVersion[] = {0, TRUE, gCreditsText_EnglishVersion};
+static const struct CreditsEntry gCreditsEntry_Translator[] = {0, TRUE, gCreditsText_Translator};
+static const struct CreditsEntry gCreditsEntry_TextEditor[] = {0, TRUE, gCreditsText_TextEditor};
+static const struct CreditsEntry gCreditsEntry_NCLCoordinator[] = {0, TRUE, gCreditsText_NCLCoordinator};
+static const struct CreditsEntry gCreditsEntry_GraphicDesigner[] = {0, TRUE, gCreditsText_GraphicDesigner};
+static const struct CreditsEntry gCreditsEntry_NOAProductTesting[] = {0, TRUE, gCreditsText_NOAProductTesting};
+static const struct CreditsEntry gCreditsEntry_HideyukiNakajima[] = {0, FALSE, gCreditsText_HideyukiNakajima};
+static const struct CreditsEntry gCreditsEntry_HidenoriSaeki[] = {0, FALSE, gCreditsText_HidenoriSaeki};
+static const struct CreditsEntry gCreditsEntry_YokoWatanabe[] = {0, FALSE, gCreditsText_YokoWatanabe};
+static const struct CreditsEntry gCreditsEntry_SakaeKimura[] = {0, FALSE, gCreditsText_SakaeKimura};
+static const struct CreditsEntry gCreditsEntry_ChiakiShinkai[] = {0, FALSE, gCreditsText_ChiakiShinkai};
+static const struct CreditsEntry gCreditsEntry_SethMcMahill[] = {0, FALSE, gCreditsText_SethMcMahill};
+static const struct CreditsEntry gCreditsEntry_NobOgasawara[] = {0, FALSE, gCreditsText_NobOgasawara};
+static const struct CreditsEntry gCreditsEntry_TeresaLillygren[] = {0, FALSE, gCreditsText_TeresaLillygren};
+static const struct CreditsEntry gCreditsEntry_KimikoNakamichi[] = {0, FALSE, gCreditsText_KimikoNakamichi};
+static const struct CreditsEntry gCreditsEntry_SouichiYamamoto[] = {0, FALSE, gCreditsText_SouichiYamamoto};
+static const struct CreditsEntry gCreditsEntry_YuichiroIto[] = {0, FALSE, gCreditsText_YuichiroIto};
+static const struct CreditsEntry gCreditsEntry_ThomasHertzog[] = {0, FALSE, gCreditsText_ThomasHertzog};
+static const struct CreditsEntry gCreditsEntry_MikaKurosawa[] = {0, FALSE, gCreditsText_MikaKurosawa};
+static const struct CreditsEntry gCreditsEntry_NationalFederationBlind[] = {0, FALSE, gCreditsText_NationalFederationBlind};
+static const struct CreditsEntry gCreditsEntry_PatriciaAMaurer[] = {0, FALSE, gCreditsText_PatriciaAMaurer};
+static const struct CreditsEntry gCreditsEntry_EuropeanBlindUnion[] = {0, FALSE, gCreditsText_EuropeanBlindUnion};
+static const struct CreditsEntry gCreditsEntry_AustralianBrailleAuthority[] = {0, FALSE, gCreditsText_AustralianBrailleAuthority};
+static const struct CreditsEntry gCreditsEntry_RoyalNewZealandFederationBlind[] = {0, FALSE, gCreditsText_RoyalNewZealandFederationBlind};
+static const struct CreditsEntry gCreditsEntry_MotoyasuTojima[] = {0, FALSE, gCreditsText_MotoyasuTojima};
+static const struct CreditsEntry gCreditsEntry_NicolaPrattBarlow[] = {0, FALSE, gCreditsText_NicolaPrattBarlow};
+static const struct CreditsEntry gCreditsEntry_ShellieDow[] = {0, FALSE, gCreditsText_ShellieDow};
+static const struct CreditsEntry gCreditsEntry_ErikJohnson[] = {0, FALSE, gCreditsText_ErikJohnson};
#define _ gCreditsEntry_EmptyString
static const struct CreditsEntry *const gCreditsEntryPointerTable[][5] =
@@ -934,7 +934,7 @@ static const struct CreditsEntry *const gCreditsEntryPointerTable[][5] =
};
#undef _
-static const struct BgTemplate gUnknown_085E6F68[] =
+static const struct BgTemplate sBackgroundTemplates[] =
{
{
.bg = 0,
@@ -946,7 +946,7 @@ static const struct BgTemplate gUnknown_085E6F68[] =
.baseTile = 0
},
};
-static const struct WindowTemplate gUnknown_085E6F6C[] =
+static const struct WindowTemplate sWindowTemplates[] =
{
{
.bg = 0,
@@ -1102,51 +1102,51 @@ static const struct SpriteTemplate gUnknown_085E7068 =
.callback = sub_81772B8,
};
-static void sub_8175744(u8 taskIdA);
-static void sub_8175774(u8 taskIdA);
+static void Task_WaitPaletteFade(u8 taskIdA);
+static void Task_ProgressCreditTasks(u8 taskIdA);
static void sub_8175808(u8 taskIdA);
static void c2_080C9BFC(u8 taskIdA);
-static void sub_81758E4(u8 taskIdA);
+static void Task_CreditsLoadGrassScene(u8 taskIdA);
static void sub_81758A4(u8 taskIdA);
-static void sub_8175A9C(u8 taskIdA);
-static void sub_8175AE4(u8 taskIdA);
-static void sub_8175B1C(u8 taskIdA);
-static void sub_8175B90(u8 taskIdA);
-static void sub_8175BD8(u8 taskIdA);
-static void sub_8175C34(u8 taskIdA);
-static void sub_8175CC8(u8 taskIdA);
-static void sub_8175CE4(void);
+static void Task_CreditsTheEnd1(u8 taskIdA);
+static void Task_CreditsTheEnd2(u8 taskIdA);
+static void Task_CreditsTheEnd3(u8 taskIdA);
+static void Task_CreditsTheEnd4(u8 taskIdA);
+static void Task_CreditsTheEnd5(u8 taskIdA);
+static void Task_CreditsTheEnd6(u8 taskIdA);
+static void Task_CreditsSoftReset(u8 taskIdA);
+static void ResetGpuAndVram(void);
static void sub_8175DA0(u8 taskIdB);
-static u8 sub_817603C(u8 page, u8 taskIdA);
+static u8 CheckChangeScene(u8 page, u8 taskIdA);
static void sub_81760FC(u8 taskIdA);
static void sub_817651C(u8 taskIdA);
static void sub_817624C(u8 taskIdA);
static bool8 sub_8176AB0(u8 data, u8 taskIdA);
-static void sub_8176CA0(u8 taskIdA);
-static void sub_8176D1C(u16, u16, u16);
+static void ResetCreditsTasks(u8 taskIdA);
+static void LoadTheEndScreen(u16, u16, u16);
static void sub_8176E40(u16 arg0, u16 palette);
static void sub_8176EE8(struct Sprite *sprite);
static void sub_8176F90(struct Sprite *sprite);
static u8 sub_8177224(u16 species, s16 x, s16 y, u16 position);
static void sub_8177388(void);
-static void sub_81754C8(void)
+static void CreditsVBlankCallback(void)
{
LoadOam();
ProcessSpriteCopyRequests();
TransferPlttBuffer();
}
-static void sub_81754DC(void)
+static void CB2_RunCreditsSequence(void)
{
RunTasks();
AnimateSprites();
if ((gMain.heldKeys & B_BUTTON)
&& gHasHallOfFameRecords != 0
- && gTasks[gUnknown_0203BCE2].func == sub_8175774)
+ && gTasks[gUnknown_0203BCE2].func == Task_ProgressCreditTasks)
{
- sub_81754C8();
+ CreditsVBlankCallback();
RunTasks();
AnimateSprites();
gUnknown_0203BCE5 = 1;
@@ -1158,10 +1158,10 @@ static void sub_81754DC(void)
static void sub_8175548(void)
{
ResetBgsAndClearDma3BusyFlags(0);
- InitBgsFromTemplates(0, gUnknown_085E6F68, 1);
+ InitBgsFromTemplates(0, sBackgroundTemplates, 1);
SetBgTilemapBuffer(0, AllocZeroed(0x800));
LoadPalette(gUnknown_085E56F0, 0x80, 0x40);
- InitWindows(gUnknown_085E6F6C);
+ InitWindows(sWindowTemplates);
DeactivateAllTextPrinters();
PutWindowTilemap(0);
CopyWindowToVram(0, 3);
@@ -1177,14 +1177,14 @@ static void sub_81755A4(void)
Free(ptr);
}
-static void sub_81755BC(const u8 *string, u8 y, u8 a2)
+static void PrintCreditsText(const u8 *string, u8 y, bool8 isTitle)
{
u8 x;
u8 color[3];
color[0] = 0;
- if (a2 == 1)
+ if (isTitle == TRUE)
{
color[1] = 3;
color[2] = 4;
@@ -1199,20 +1199,20 @@ static void sub_81755BC(const u8 *string, u8 y, u8 a2)
AddTextPrinterParameterized4(0, 1, x, y, 1, 0, color, -1, string);
}
-void sub_8175620(void)
+void CB2_StartCreditsSequence(void)
{
u8 taskIdA;
s16 taskIdC;
u8 taskIdB;
- sub_8175CE4();
+ ResetGpuAndVram();
SetVBlankCallback(NULL);
InitHeap(gHeap, HEAP_SIZE);
ResetPaletteFade();
ResetTasks();
sub_8175548();
- taskIdA = CreateTask(sub_8175744, 0);
+ taskIdA = CreateTask(Task_WaitPaletteFade, 0);
gTasks[taskIdA].data[TDA_4] = 0;
gTasks[taskIdA].data[TDA_7] = 0;
@@ -1237,9 +1237,9 @@ void sub_8175620(void)
BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, RGB_BLACK);
EnableInterrupts(INTR_FLAG_VBLANK);
- SetVBlankCallback(sub_81754C8);
+ SetVBlankCallback(CreditsVBlankCallback);
m4aSongNumStart(MUS_THANKFOR);
- SetMainCallback2(sub_81754DC);
+ SetMainCallback2(CB2_RunCreditsSequence);
gUnknown_0203BCE5 = 0;
gUnknown_0203BCE8 = AllocZeroed(sizeof(struct Unk201C000));
@@ -1252,13 +1252,13 @@ void sub_8175620(void)
gUnknown_0203BCE2 = taskIdA;
}
-static void sub_8175744(u8 taskIdA)
+static void Task_WaitPaletteFade(u8 taskIdA)
{
if (!gPaletteFade.active)
- gTasks[taskIdA].func = sub_8175774;
+ gTasks[taskIdA].func = Task_ProgressCreditTasks;
}
-static void sub_8175774(u8 taskIdA)
+static void Task_ProgressCreditTasks(u8 taskIdA)
{
u16 data1;
@@ -1270,7 +1270,7 @@ static void sub_8175774(u8 taskIdA)
gTasks[taskIdC].data[TDC_0] = 30;
gTasks[taskIdA].data[TDA_12] = 0x100;
- gTasks[taskIdA].func = sub_8175A9C;
+ gTasks[taskIdA].func = Task_CreditsTheEnd1;
return;
}
@@ -1298,7 +1298,7 @@ static void sub_8175808(u8 taskIdA)
if (!gPaletteFade.active)
{
SetGpuReg(REG_OFFSET_DISPCNT, 0);
- sub_8176CA0(taskIdA);
+ ResetCreditsTasks(taskIdA);
gTasks[taskIdA].func = c2_080C9BFC;
}
}
@@ -1313,8 +1313,8 @@ static void c2_080C9BFC(u8 taskIdA)
{
BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, RGB_BLACK);
EnableInterrupts(INTR_FLAG_VBLANK);
- SetVBlankCallback(sub_81754C8);
- gTasks[taskIdA].func = sub_8175744;
+ SetVBlankCallback(CreditsVBlankCallback);
+ gTasks[taskIdA].func = Task_WaitPaletteFade;
}
}
@@ -1323,12 +1323,12 @@ static void sub_81758A4(u8 taskIdA)
if (!gPaletteFade.active)
{
SetGpuReg(REG_OFFSET_DISPCNT, 0);
- sub_8176CA0(taskIdA);
- gTasks[taskIdA].func = sub_81758E4;
+ ResetCreditsTasks(taskIdA);
+ gTasks[taskIdA].func = Task_CreditsLoadGrassScene;
}
}
-static void sub_81758E4(u8 taskIdA)
+static void Task_CreditsLoadGrassScene(u8 taskIdA)
{
switch (gMain.state)
{
@@ -1387,12 +1387,12 @@ static void sub_81758E4(u8 taskIdA)
gMain.state = 0;
gUnknown_0203BD28 = 0;
- gTasks[taskIdA].func = sub_8175744;
+ gTasks[taskIdA].func = Task_WaitPaletteFade;
break;
}
}
-static void sub_8175A9C(u8 taskIdA)
+static void Task_CreditsTheEnd1(u8 taskIdA)
{
if (gTasks[taskIdA].data[TDA_12])
{
@@ -1401,23 +1401,23 @@ static void sub_8175A9C(u8 taskIdA)
}
BeginNormalPaletteFade(0xFFFFFFFF, 12, 0, 16, RGB_BLACK);
- gTasks[taskIdA].func = sub_8175AE4;
+ gTasks[taskIdA].func = Task_CreditsTheEnd2;
}
-static void sub_8175AE4(u8 taskIdA)
+static void Task_CreditsTheEnd2(u8 taskIdA)
{
if (!gPaletteFade.active)
{
- sub_8176CA0(taskIdA);
- gTasks[taskIdA].func = sub_8175B1C;
+ ResetCreditsTasks(taskIdA);
+ gTasks[taskIdA].func = Task_CreditsTheEnd3;
}
}
-static void sub_8175B1C(u8 taskIdA)
+static void Task_CreditsTheEnd3(u8 taskIdA)
{
- sub_8175CE4();
+ ResetGpuAndVram();
ResetPaletteFade();
- sub_8176D1C(0, 0x3800, 0);
+ LoadTheEndScreen(0, 0x3800, 0);
ResetSpriteData();
FreeAllSpritePalettes();
BeginNormalPaletteFade(0xFFFFFFFF, 8, 16, 0, RGB_BLACK);
@@ -1432,11 +1432,11 @@ static void sub_8175B1C(u8 taskIdA)
| DISPCNT_OBJ_1D_MAP
| DISPCNT_BG0_ON);
- gTasks[taskIdA].data[TDA_0] = 0xEB;
- gTasks[taskIdA].func = sub_8175B90;
+ gTasks[taskIdA].data[TDA_0] = 235; //set this to 215 to actually show "THE END" in time to the last song beat
+ gTasks[taskIdA].func = Task_CreditsTheEnd4;
}
-static void sub_8175B90(u8 taskIdA)
+static void Task_CreditsTheEnd4(u8 taskIdA)
{
if (gTasks[taskIdA].data[TDA_0])
{
@@ -1445,10 +1445,10 @@ static void sub_8175B90(u8 taskIdA)
}
BeginNormalPaletteFade(0xFFFFFFFF, 6, 0, 16, RGB_BLACK);
- gTasks[taskIdA].func = sub_8175BD8;
+ gTasks[taskIdA].func = Task_CreditsTheEnd5;
}
-static void sub_8175BD8(u8 taskIdA)
+static void Task_CreditsTheEnd5(u8 taskIdA)
{
if (!gPaletteFade.active)
{
@@ -1456,11 +1456,11 @@ static void sub_8175BD8(u8 taskIdA)
BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 0, RGB_BLACK);
gTasks[taskIdA].data[TDA_0] = 7200;
- gTasks[taskIdA].func = sub_8175C34;
+ gTasks[taskIdA].func = Task_CreditsTheEnd6;
}
}
-static void sub_8175C34(u8 taskIdA)
+static void Task_CreditsTheEnd6(u8 taskIdA)
{
if (!gPaletteFade.active)
{
@@ -1468,7 +1468,7 @@ static void sub_8175C34(u8 taskIdA)
{
FadeOutBGM(4);
BeginNormalPaletteFade(0xFFFFFFFF, 8, 0, 16, RGB_WHITEALPHA);
- gTasks[taskIdA].func = sub_8175CC8;
+ gTasks[taskIdA].func = Task_CreditsSoftReset;
return;
}
@@ -1482,13 +1482,13 @@ static void sub_8175C34(u8 taskIdA)
}
}
-static void sub_8175CC8(u8 taskIdA)
+static void Task_CreditsSoftReset(u8 taskIdA)
{
if (!gPaletteFade.active)
SoftReset(0xFF);
}
-static void sub_8175CE4(void)
+static void ResetGpuAndVram(void)
{
SetGpuReg(REG_OFFSET_DISPCNT, 0);
@@ -1539,12 +1539,15 @@ static void sub_8175DA0(u8 taskIdB)
gTasks[taskIdB].data[TDB_0] += 1;
return;
case 2:
- if (gTasks[gTasks[taskIdB].data[TDB_TASK_A_ID]].func == sub_8175774)
+ if (gTasks[gTasks[taskIdB].data[TDB_TASK_A_ID]].func == Task_ProgressCreditTasks)
{
if (gTasks[taskIdB].data[TDB_CURRENT_PAGE] < PAGE_COUNT)
{
for (i = 0; i < 5; i++)
- sub_81755BC(gCreditsEntryPointerTable[gTasks[taskIdB].data[TDB_CURRENT_PAGE]][i]->text, 5 + i * 16, gCreditsEntryPointerTable[gTasks[taskIdB].data[TDB_CURRENT_PAGE]][i]->var_1);
+ PrintCreditsText(
+ gCreditsEntryPointerTable[gTasks[taskIdB].data[TDB_CURRENT_PAGE]][i]->text,
+ 5 + i * 16,
+ gCreditsEntryPointerTable[gTasks[taskIdB].data[TDB_CURRENT_PAGE]][i]->isTitle);
CopyWindowToVram(0, 2);
@@ -1578,7 +1581,7 @@ static void sub_8175DA0(u8 taskIdB)
return;
}
- if (sub_817603C((u8)gTasks[taskIdB].data[TDB_CURRENT_PAGE], (u8)gTasks[taskIdB].data[TDB_TASK_A_ID]))
+ if (CheckChangeScene((u8)gTasks[taskIdB].data[TDB_CURRENT_PAGE], (u8)gTasks[taskIdB].data[TDB_TASK_A_ID]))
{
gTasks[taskIdB].data[TDB_0] += 1;
return;
@@ -1606,7 +1609,7 @@ static void sub_8175DA0(u8 taskIdB)
}
}
-static u8 sub_817603C(u8 page, u8 taskIdA)
+static u8 CheckChangeScene(u8 page, u8 taskIdA)
{
// Starts with bike + ocean + morning
@@ -1685,7 +1688,7 @@ static void sub_81760FC(u8 taskIdD)
gTasks[taskIdD].data[TDD_STATE]++;
break;
case 2:
- if (gUnknown_0203BCE8->unk8E == 71 || gTasks[gTasks[taskIdD].data[TDD_TASK_A_ID]].func != sub_8175774)
+ if (gUnknown_0203BCE8->unk8E == 71 || gTasks[gTasks[taskIdD].data[TDD_TASK_A_ID]].func != Task_ProgressCreditTasks)
break;
r2 = sub_8177224(gUnknown_0203BCE8->unk0[gUnknown_0203BCE8->unk92], gUnknown_085E6F7C[gUnknown_0203BCE8->unk90][0], gUnknown_085E6F7C[gUnknown_0203BCE8->unk90][1], gUnknown_0203BCE8->unk90);
if (gUnknown_0203BCE8->unk92 < gUnknown_0203BCE8->unk94 - 1)
@@ -2006,7 +2009,7 @@ static bool8 sub_8176AB0(u8 data, u8 taskIdA)
return FALSE;
}
-static void sub_8176CA0(u8 taskIdA)
+static void ResetCreditsTasks(u8 taskIdA)
{
if (gTasks[taskIdA].data[TDA_0] != 0)
{
@@ -2035,7 +2038,7 @@ static void sub_8176CA0(u8 taskIdA)
gUnknown_0203BD28 = 1;
}
-static void sub_8176D1C(u16 arg0, u16 arg1, u16 arg2)
+static void LoadTheEndScreen(u16 arg0, u16 arg1, u16 arg2)
{
u16 baseTile;
u16 i;
@@ -2084,12 +2087,12 @@ static void sub_8176E40(u16 arg0, u16 palette)
for (pos = 0; pos < 32 * 32; pos++)
((u16 *) (VRAM + arg0))[pos] = baseTile + 1;
- sub_8176DBC(gUnknown_085E5BAC, 3, 7, arg0, palette);
- sub_8176DBC(gUnknown_085E5BBB, 7, 7, arg0, palette);
- sub_8176DBC(gUnknown_085E5BCA, 11, 7, arg0, palette);
- sub_8176DBC(gUnknown_085E5BCA, 16, 7, arg0, palette);
- sub_8176DBC(gUnknown_085E5BD9, 20, 7, arg0, palette);
- sub_8176DBC(gUnknown_085E5BE8, 24, 7, arg0, palette);
+ sub_8176DBC(sTheEnd_LetterTMap, 3, 7, arg0, palette);
+ sub_8176DBC(sTheEnd_LetterHMap, 7, 7, arg0, palette);
+ sub_8176DBC(sTheEnd_LetterEMap, 11, 7, arg0, palette);
+ sub_8176DBC(sTheEnd_LetterEMap, 16, 7, arg0, palette);
+ sub_8176DBC(sTheEnd_LetterNMap, 20, 7, arg0, palette);
+ sub_8176DBC(sTheEnd_LetterDMap, 24, 7, arg0, palette);
}
static void sub_8176EE8(struct Sprite *sprite)
diff --git a/asm/crt0.s b/src/crt0.s
index 9ed678968..9ed678968 100644
--- a/asm/crt0.s
+++ b/src/crt0.s
diff --git a/src/data/battle_frontier/battle_frontier_exchange_corner.h b/src/data/battle_frontier/battle_frontier_exchange_corner.h
new file mode 100644
index 000000000..bcb3cdd62
--- /dev/null
+++ b/src/data/battle_frontier/battle_frontier_exchange_corner.h
@@ -0,0 +1,99 @@
+static const u16 sFrontierExchangeCorner_Decor1[] =
+{
+ DECOR_KISS_POSTER,
+ DECOR_KISS_CUSHION,
+ DECOR_SMOOCHUM_DOLL,
+ DECOR_TOGEPI_DOLL,
+ DECOR_MEOWTH_DOLL,
+ DECOR_CLEFAIRY_DOLL,
+ DECOR_DITTO_DOLL,
+ DECOR_CYNDAQUIL_DOLL,
+ DECOR_CHIKORITA_DOLL,
+ DECOR_TOTODILE_DOLL,
+ 0xFFFF
+};
+
+static const u16 sFrontierExchangeCorner_Decor2[] =
+{
+ DECOR_LAPRAS_DOLL,
+ DECOR_SNORLAX_DOLL,
+ DECOR_VENUSAUR_DOLL,
+ DECOR_CHARIZARD_DOLL,
+ DECOR_BLASTOISE_DOLL,
+ 0xFFFF
+};
+
+static const u16 sFrontierExchangeCorner_Vitamins[] =
+{
+ ITEM_PROTEIN,
+ ITEM_CALCIUM,
+ ITEM_IRON,
+ ITEM_ZINC,
+ ITEM_CARBOS,
+ ITEM_HP_UP,
+ 0xFFFF
+};
+
+static const u16 sFrontierExchangeCorner_HoldItems[] =
+{
+ ITEM_LEFTOVERS,
+ ITEM_WHITE_HERB,
+ ITEM_QUICK_CLAW,
+ ITEM_MENTAL_HERB,
+ ITEM_BRIGHT_POWDER,
+ ITEM_CHOICE_BAND,
+ ITEM_KINGS_ROCK,
+ ITEM_FOCUS_BAND,
+ ITEM_SCOPE_LENS,
+ 0xFFFF
+};
+
+static const u8 *const sFrontierExchangeCorner_Decor1Descriptions[] =
+{
+ BattleFrontier_BattlePointExchangeServiceCorner_Text_2601AA,
+ BattleFrontier_BattlePointExchangeServiceCorner_Text_2601D0,
+ BattleFrontier_BattlePointExchangeServiceCorner_Text_260201,
+ BattleFrontier_BattlePointExchangeServiceCorner_Text_26022F,
+ BattleFrontier_BattlePointExchangeServiceCorner_Text_26025B,
+ BattleFrontier_BattlePointExchangeServiceCorner_Text_260287,
+ BattleFrontier_BattlePointExchangeServiceCorner_Text_2602B5,
+ BattleFrontier_BattlePointExchangeServiceCorner_Text_2602E0,
+ BattleFrontier_BattlePointExchangeServiceCorner_Text_26030F,
+ BattleFrontier_BattlePointExchangeServiceCorner_Text_26033E,
+ gText_Exit,
+};
+
+static const u8 *const sFrontierExchangeCorner_Decor2Descriptions[] =
+{
+ BattleFrontier_BattlePointExchangeServiceCorner_Text_26036C,
+ BattleFrontier_BattlePointExchangeServiceCorner_Text_26036C,
+ BattleFrontier_BattlePointExchangeServiceCorner_Text_26036C,
+ BattleFrontier_BattlePointExchangeServiceCorner_Text_26036C,
+ BattleFrontier_BattlePointExchangeServiceCorner_Text_26036C,
+ gText_Exit
+};
+
+static const u8 *const sFrontierExchangeCorner_VitaminsDescriptions[] =
+{
+ BattleFrontier_BattlePointExchangeServiceCorner_Text_260397,
+ BattleFrontier_BattlePointExchangeServiceCorner_Text_2603BE,
+ BattleFrontier_BattlePointExchangeServiceCorner_Text_2603E6,
+ BattleFrontier_BattlePointExchangeServiceCorner_Text_26040E,
+ BattleFrontier_BattlePointExchangeServiceCorner_Text_260436,
+ BattleFrontier_BattlePointExchangeServiceCorner_Text_26045C,
+ gText_Exit
+};
+
+static const u8 *const sFrontierExchangeCorner_HoldItemsDescriptions[] =
+{
+ BattleFrontier_BattlePointExchangeServiceCorner_Text_26047A,
+ BattleFrontier_BattlePointExchangeServiceCorner_Text_2604AC,
+ BattleFrontier_BattlePointExchangeServiceCorner_Text_2604D8,
+ BattleFrontier_BattlePointExchangeServiceCorner_Text_26050F,
+ BattleFrontier_BattlePointExchangeServiceCorner_Text_260542,
+ BattleFrontier_BattlePointExchangeServiceCorner_Text_260575,
+ BattleFrontier_BattlePointExchangeServiceCorner_Text_2605A8,
+ BattleFrontier_BattlePointExchangeServiceCorner_Text_2605E2,
+ BattleFrontier_BattlePointExchangeServiceCorner_Text_260613,
+ gText_Exit
+};
diff --git a/src/data/battle_frontier/trainer_hill.h b/src/data/battle_frontier/trainer_hill.h
index 64d216e4b..54d49422a 100644
--- a/src/data/battle_frontier/trainer_hill.h
+++ b/src/data/battle_frontier/trainer_hill.h
@@ -1,4857 +1,5261 @@
#define TRAINER_HILL_OTID 0x10000000
+static const struct TrHillTag gUnknown_0862609C = {
+ .unkField_0 = 4,
+ .unused1 = 1,
+ .numFloors = 2,
+ .checksum = 0x0
+};
+
+static const struct TrHillFloor gUnknown_0862609C_floors[] = {
+ [0] = {
+ .unk0 = 0,
+ .unk1 = 0,
+ .trainers = {
+ [0] = {
+ .name = __("シゲノブ$$$$ "),
+ .facilityClass = FACILITY_CLASS_YOUNGSTER,
+ .unused = 0x1,
+ .speechBefore = { EC_WORD_TRAINER, EC_WORD_MRS, EC_WORD_EXCL, EC_WORD_THEY_WERE, EC_WORD_OPPONENT, EC_WORD_CAN },
+ .speechWin = { EC_WORD_TRAINER, EC_WORD_MRS, EC_WORD_WEAK, EC_WORD_OF, EC_WORD_WERE, EC_WORD_ELLIPSIS_ELLIPSIS_ELLIPSIS },
+ .speechLose = { EC_WORD_TRAINER, EC_WORD_MRS, EC_WORD_STRONG, EC_WORD_HEY_QUES, EC_WORD_EXCL, EC_WORD_EXCL },
+ .speechAfter = { EC_WORD_FABULOUS, EC_WORD_CAN_T, EC_WORD_TRAINER, EC_WORD_MRS, EC_WORD_ELLIPSIS_ELLIPSIS_ELLIPSIS, EC_WORD_EXCITING },
+ .mons = {
+ [0] = {
+ .species = SPECIES_ZIGZAGOON,
+ .heldItem = ITEM_SITRUS_BERRY,
+ .moves = { MOVE_HEADBUTT, MOVE_PIN_MISSILE, MOVE_GROWL, MOVE_TAIL_WHIP },
+ .level = 0,
+ .ppBonuses = 0x0,
+ .hpEV = 110,
+ .attackEV = 100,
+ .defenseEV = 100,
+ .speedEV = 100,
+ .spAttackEV = 0,
+ .spDefenseEV = 100,
+ .otId = 0x10000000,
+ .hpIV = 5,
+ .attackIV = 5,
+ .defenseIV = 5,
+ .speedIV = 5,
+ .spAttackIV = 5,
+ .spDefenseIV = 5,
+ .abilityNum = 0,
+ .personality = 0x80,
+ .nickname = __("ジグザグマ$$$$$$"),
+ .friendship = 255
+ },
+ [1] = {
+ .species = SPECIES_SHROOMISH,
+ .heldItem = ITEM_PECHA_BERRY,
+ .moves = { MOVE_MEGA_DRAIN, MOVE_LEECH_SEED, MOVE_POISON_POWDER, MOVE_GROWTH },
+ .level = 0,
+ .ppBonuses = 0x0,
+ .hpEV = 120,
+ .attackEV = 0,
+ .defenseEV = 120,
+ .speedEV = 0,
+ .spAttackEV = 150,
+ .spDefenseEV = 120,
+ .otId = 0x10000000,
+ .hpIV = 5,
+ .attackIV = 5,
+ .defenseIV = 5,
+ .speedIV = 5,
+ .spAttackIV = 5,
+ .spDefenseIV = 5,
+ .abilityNum = 0,
+ .personality = 0x0,
+ .nickname = __("キノココ$$$$$$$"),
+ .friendship = 255
+ },
+ [2] = {
+ .species = SPECIES_SANDSHREW,
+ .heldItem = ITEM_QUICK_CLAW,
+ .moves = { MOVE_SCRATCH, MOVE_POISON_STING, MOVE_SAND_ATTACK, MOVE_SWIFT },
+ .level = 0,
+ .ppBonuses = 0x0,
+ .hpEV = 110,
+ .attackEV = 100,
+ .defenseEV = 100,
+ .speedEV = 0,
+ .spAttackEV = 0,
+ .spDefenseEV = 200,
+ .otId = 0x10000000,
+ .hpIV = 5,
+ .attackIV = 5,
+ .defenseIV = 5,
+ .speedIV = 5,
+ .spAttackIV = 5,
+ .spDefenseIV = 5,
+ .abilityNum = 0,
+ .personality = 0x80,
+ .nickname = __("サンド$$$$$$$$"),
+ .friendship = 255
+ },
+ [3] = NULL_BATTLE_TOWER_POKEMON,
+ [4] = NULL_BATTLE_TOWER_POKEMON,
+ [5] = NULL_BATTLE_TOWER_POKEMON
+ }
+ },
+ [1] = {
+ .name = __("アカリ$$$$$ "),
+ .facilityClass = FACILITY_CLASS_PARASOL_LADY,
+ .unused = 0x1,
+ .speechBefore = { EC_WORD_SHE, EC_WORD_EVERY, EC_WORD_TYPE, EC_WORD_ADORE, EC_WORD_FOR, EC_WORD_EXCL },
+ .speechWin = { EC_WORD_SURPRISE, EC_WORD_THESE, EC_WORD_WONDER, EC_WORD_GIGGLE, EC_WORD_ELLIPSIS, EC_WORD_EXCL },
+ .speechLose = { EC_WORD_OH_QUES, EC_MOVE(EARTHQUAKE), EC_WORD_EXISTS, EC_WORD_OF, EC_WORD_WITHOUT, EC_WORD_EXCL },
+ .speechAfter = { EC_WORD_YOU_RE, EC_WORD_PROBABLY, EC_WORD_END, EC_WORD_UNTIL, EC_WORD_GOING, EC_WORD_ANYWHERE },
+ .mons = {
+ [0] = NULL_BATTLE_TOWER_POKEMON,
+ [1] = NULL_BATTLE_TOWER_POKEMON,
+ [2] = NULL_BATTLE_TOWER_POKEMON,
+ [3] = {
+ .species = SPECIES_WINGULL,
+ .heldItem = ITEM_CHERI_BERRY,
+ .moves = { MOVE_WATER_GUN, MOVE_WING_ATTACK, MOVE_GROWL, MOVE_SUPERSONIC },
+ .level = 0,
+ .ppBonuses = 0x0,
+ .hpEV = 110,
+ .attackEV = 100,
+ .defenseEV = 100,
+ .speedEV = 0,
+ .spAttackEV = 100,
+ .spDefenseEV = 100,
+ .otId = 0x10000000,
+ .hpIV = 5,
+ .attackIV = 5,
+ .defenseIV = 5,
+ .speedIV = 5,
+ .spAttackIV = 5,
+ .spDefenseIV = 5,
+ .abilityNum = 0,
+ .personality = 0x0,
+ .nickname = __("キャモメ$$$$$$$"),
+ .friendship = 255
+ },
+ [4] = {
+ .species = SPECIES_NUMEL,
+ .heldItem = ITEM_FOCUS_BAND,
+ .moves = { MOVE_EMBER, MOVE_DIG, MOVE_TACKLE, MOVE_FOCUS_ENERGY },
+ .level = 0,
+ .ppBonuses = 0x0,
+ .hpEV = 110,
+ .attackEV = 100,
+ .defenseEV = 100,
+ .speedEV = 0,
+ .spAttackEV = 100,
+ .spDefenseEV = 100,
+ .otId = 0x10000000,
+ .hpIV = 5,
+ .attackIV = 5,
+ .defenseIV = 5,
+ .speedIV = 5,
+ .spAttackIV = 5,
+ .spDefenseIV = 5,
+ .abilityNum = 0,
+ .personality = 0x96,
+ .nickname = __("ドンメル$$$$$$$"),
+ .friendship = 255
+ },
+ [5] = {
+ .species = SPECIES_SURSKIT,
+ .heldItem = ITEM_PERSIM_BERRY,
+ .moves = { MOVE_BUBBLE_BEAM, MOVE_MUD_SHOT, MOVE_QUICK_ATTACK, MOVE_AGILITY },
+ .level = 0,
+ .ppBonuses = 0x0,
+ .hpEV = 100,
+ .attackEV = 100,
+ .defenseEV = 100,
+ .speedEV = 0,
+ .spAttackEV = 100,
+ .spDefenseEV = 100,
+ .otId = 0x10000000,
+ .hpIV = 5,
+ .attackIV = 5,
+ .defenseIV = 5,
+ .speedIV = 5,
+ .spAttackIV = 5,
+ .spDefenseIV = 5,
+ .abilityNum = 0,
+ .personality = 0x0,
+ .nickname = __("アメタマ$$$$$$$"),
+ .friendship = 255
+ },
+ }
+ },
+ },
+ .display = {
+ .data = { 0x31, 0x35, 0x35, 0x3b, 0x26, 0x26, 0x1b, 0x1c, 0x1d, 0x25, 0x39, 0x3a, 0x3b, 0x3b, 0x3b, 0x8, 0x31, 0x2b, 0x2b, 0x3b, 0x34, 0x34, 0x2b, 0x2b, 0x34, 0x33, 0x3f, 0x3f, 0x3f, 0x3f, 0x3b, 0x8, 0x31, 0x2b, 0x2b, 0x3b, 0x3b, 0x3b, 0x34, 0x34, 0x3b, 0x33, 0x3f, 0x3f, 0x3f, 0x3b, 0x3b, 0x8, 0x31, 0x2b, 0x2b, 0x35, 0x35, 0x35, 0x35, 0x35, 0x3b, 0x33, 0x3f, 0x3f, 0x3f, 0x3b, 0x3f, 0x8, 0x31, 0x2b, 0x34, 0x34, 0x34, 0x2b, 0x34, 0x34, 0x3b, 0x2c, 0x3f, 0x3f, 0x3f, 0x3b, 0x3b, 0x8, 0x31, 0x2b, 0x3b, 0x35, 0x3b, 0x2b, 0x3b, 0x35, 0x3b, 0x35, 0x3b, 0x3f, 0x3f, 0x3f, 0x3b, 0x8, 0x31, 0x2b, 0x3b, 0x2b, 0x3b, 0x2b, 0x3b, 0x2b, 0x3b, 0x2b, 0x3b, 0x3f, 0x3f, 0x3f, 0x3b, 0x8, 0x31, 0x34, 0x3b, 0x2b, 0x3b, 0x34, 0x3b, 0x2b, 0x35, 0x2b, 0x3b, 0x3b, 0x3f, 0x3b, 0x3b, 0x8, 0x31, 0x3b, 0x3b, 0x34, 0x3b, 0x3b, 0x3b, 0x34, 0x34, 0x34, 0x3f, 0x3b, 0x3b, 0x3b, 0x3f, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8 },
+ .unk3A0 = { 0x381, 0x6fc1, 0x6341, 0x6041, 0x7f41, 0x4401, 0x5541, 0x5541, 0x11c1, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff },
+ .coords = { 0x28, 0x78 },
+ .direction = 0x1,
+ .range = 0x23
+ }
+ },
+ [1] = {
+ .unk0 = 0,
+ .unk1 = 0,
+ .trainers = {
+ [0] = {
+ .name = __("シゲゾウ$$$$ "),
+ .facilityClass = FACILITY_CLASS_NINJA_BOY,
+ .unused = 0x1,
+ .speechBefore = { EC_WORD_WIN, EC_WORD_UNTIL, EC_WORD_DAUGHTER, EC_MOVE(CONSTRICT), EC_WORD_OF, EC_WORD_WERE },
+ .speechWin = { EC_MOVE(CONSTRICT), EC_WORD_UNTIL, EC_WORD_LESS, EC_WORD_NONE, EC_WORD_HEY_QUES, EC_WORD_EXCL },
+ .speechLose = { EC_WORD_YET, EC_WORD_ELLIPSIS_ELLIPSIS_ELLIPSIS, EC_WORD_URGH, EC_WORD_ALMOST, EC_WORD_POWER, EC_WORD_NONE },
+ .speechAfter = { EC_WORD_HUH_QUES, EC_WORD_TOMORROW, EC_WORD_SMELL, EC_WORD_ABSOLUTELY, EC_WORD_THOSE, EC_WORD_EXCL_EXCL },
+ .mons = {
+ [0] = {
+ .species = SPECIES_ELECTRIKE,
+ .heldItem = ITEM_CHERI_BERRY,
+ .moves = { MOVE_SPARK, MOVE_THUNDER_WAVE, MOVE_QUICK_ATTACK, MOVE_ROAR },
+ .level = 0,
+ .ppBonuses = 0x0,
+ .hpEV = 120,
+ .attackEV = 120,
+ .defenseEV = 0,
+ .speedEV = 120,
+ .spAttackEV = 150,
+ .spDefenseEV = 0,
+ .otId = 0x10000000,
+ .hpIV = 5,
+ .attackIV = 5,
+ .defenseIV = 5,
+ .speedIV = 5,
+ .spAttackIV = 5,
+ .spDefenseIV = 5,
+ .abilityNum = 1,
+ .personality = 0x0,
+ .nickname = __("ラクライ$$$$$$$"),
+ .friendship = 255
+ },
+ [1] = {
+ .species = SPECIES_CORPHISH,
+ .heldItem = ITEM_QUICK_CLAW,
+ .moves = { MOVE_KNOCK_OFF, MOVE_CRABHAMMER, MOVE_TAUNT, MOVE_PROTECT },
+ .level = 0,
+ .ppBonuses = 0x0,
+ .hpEV = 100,
+ .attackEV = 110,
+ .defenseEV = 100,
+ .speedEV = 0,
+ .spAttackEV = 100,
+ .spDefenseEV = 100,
+ .otId = 0x10000000,
+ .hpIV = 5,
+ .attackIV = 5,
+ .defenseIV = 5,
+ .speedIV = 5,
+ .spAttackIV = 5,
+ .spDefenseIV = 5,
+ .abilityNum = 1,
+ .personality = 0x96,
+ .nickname = __("ヘイガニ$$$$$$$"),
+ .friendship = 255
+ },
+ [2] = {
+ .species = SPECIES_BALTOY,
+ .heldItem = ITEM_PERSIM_BERRY,
+ .moves = { MOVE_PSYBEAM, MOVE_ROCK_TOMB, MOVE_MUD_SLAP, MOVE_HARDEN },
+ .level = 0,
+ .ppBonuses = 0x0,
+ .hpEV = 100,
+ .attackEV = 100,
+ .defenseEV = 100,
+ .speedEV = 0,
+ .spAttackEV = 110,
+ .spDefenseEV = 100,
+ .otId = 0x10000000,
+ .hpIV = 5,
+ .attackIV = 5,
+ .defenseIV = 5,
+ .speedIV = 5,
+ .spAttackIV = 5,
+ .spDefenseIV = 5,
+ .abilityNum = 0,
+ .personality = 0x96,
+ .nickname = __("ヤジロン$$$$$$$"),
+ .friendship = 255
+ },
+ [3] = NULL_BATTLE_TOWER_POKEMON,
+ [4] = NULL_BATTLE_TOWER_POKEMON,
+ [5] = NULL_BATTLE_TOWER_POKEMON,
+ }
+ },
+ [1] = {
+ .name = __("ナミコ$$$$$ "),
+ .facilityClass = FACILITY_CLASS_BEAUTY,
+ .unused = 0x1,
+ .speechBefore = { EC_WORD_SISTER, EC_WORD_ALTHOUGH, EC_WORD_KIND, EC_WORD_MATCH, EC_WORD_PLEASE, EC_WORD_WITHOUT },
+ .speechWin = { EC_WORD_KIND, EC_WORD_ELLIPSIS, EC_WORD_INSTEAD, EC_WORD_DEEP, EC_WORD_WEAK, EC_WORD_QUES },
+ .speechLose = { EC_WORD_AWFUL, EC_WORD_GWAH, EC_WORD_HOPELESS, EC_WORD_CAN_T_WIN, EC_WORD_IS, EC_WORD_NONE },
+ .speechAfter = { EC_WORD_AWW, 0xFFFF, 0xFFFF, EC_WORD_ALMOST, EC_WORD_GOOD, EC_WORD_ANYWHERE },
+ .mons = {
+ [0] = NULL_BATTLE_TOWER_POKEMON,
+ [1] = NULL_BATTLE_TOWER_POKEMON,
+ [2] = NULL_BATTLE_TOWER_POKEMON,
+ [3] = {
+ .species = SPECIES_SPHEAL,
+ .heldItem = ITEM_FOCUS_BAND,
+ .moves = { MOVE_ICE_BALL, MOVE_BODY_SLAM, MOVE_WATER_GUN, MOVE_ENCORE },
+ .level = 0,
+ .ppBonuses = 0x0,
+ .hpEV = 100,
+ .attackEV = 100,
+ .defenseEV = 100,
+ .speedEV = 0,
+ .spAttackEV = 110,
+ .spDefenseEV = 100,
+ .otId = 0x10000000,
+ .hpIV = 5,
+ .attackIV = 5,
+ .defenseIV = 5,
+ .speedIV = 5,
+ .spAttackIV = 5,
+ .spDefenseIV = 5,
+ .abilityNum = 0,
+ .personality = 0x80,
+ .nickname = __("タマザラシ$$$$$$"),
+ .friendship = 255
+ },
+ [4] = {
+ .species = SPECIES_SPOINK,
+ .heldItem = ITEM_PERSIM_BERRY,
+ .moves = { MOVE_PSYWAVE, MOVE_FUTURE_SIGHT, MOVE_CONFUSE_RAY, MOVE_MAGIC_COAT },
+ .level = 0,
+ .ppBonuses = 0x0,
+ .hpEV = 100,
+ .attackEV = 0,
+ .defenseEV = 100,
+ .speedEV = 100,
+ .spAttackEV = 110,
+ .spDefenseEV = 100,
+ .otId = 0x10000000,
+ .hpIV = 5,
+ .attackIV = 5,
+ .defenseIV = 5,
+ .speedIV = 5,
+ .spAttackIV = 5,
+ .spDefenseIV = 5,
+ .abilityNum = 1,
+ .personality = 0xf,
+ .nickname = __("バネブー$$$$$$$"),
+ .friendship = 255
+ },
+ [5] = {
+ .species = SPECIES_POOCHYENA,
+ .heldItem = ITEM_PECHA_BERRY,
+ .moves = { MOVE_BITE, MOVE_POISON_FANG, MOVE_SWAGGER, MOVE_SCARY_FACE },
+ .level = 0,
+ .ppBonuses = 0x0,
+ .hpEV = 70,
+ .attackEV = 80,
+ .defenseEV = 80,
+ .speedEV = 80,
+ .spAttackEV = 80,
+ .spDefenseEV = 80,
+ .otId = 0x10000000,
+ .hpIV = 5,
+ .attackIV = 5,
+ .defenseIV = 5,
+ .speedIV = 5,
+ .spAttackIV = 5,
+ .spDefenseIV = 5,
+ .abilityNum = 0,
+ .personality = 0x96,
+ .nickname = __("ポチエナ$$$$$$$"),
+ .friendship = 255
+ },
+ }
+ },
+ },
+ .display = {
+ .data = { 0x31, 0x3b, 0x35, 0x3b, 0x39, 0x26, 0x1b, 0x1c, 0x1d, 0x25, 0x39, 0x3a, 0x3b, 0x35, 0x3b, 0x8, 0x31, 0x3b, 0x2b, 0x3b, 0x3b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x3b, 0x3b, 0x3b, 0x2b, 0x3b, 0x8, 0x31, 0x3b, 0x2b, 0x3b, 0x3b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x3e, 0x3e, 0x3b, 0x2b, 0x3b, 0x8, 0x31, 0x3b, 0x2b, 0x3b, 0x3b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x3b, 0x3b, 0x3b, 0x2b, 0x3b, 0x8, 0x3f, 0x3b, 0x2b, 0x3b, 0x3b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x3b, 0x3e, 0x3e, 0x2b, 0x3b, 0x8, 0x31, 0x3b, 0x2b, 0x3b, 0x3b, 0x2b, 0x2b, 0x2c, 0x2b, 0x2b, 0x3b, 0x3b, 0x3b, 0x2b, 0x3b, 0x8, 0x31, 0x3f, 0x2b, 0x3b, 0x3b, 0x2c, 0x2c, 0x3b, 0x2c, 0x2c, 0x3e, 0x3e, 0x3b, 0x2b, 0x3b, 0x8, 0x31, 0x3b, 0x2b, 0x35, 0x35, 0x35, 0x35, 0x3b, 0x35, 0x35, 0x35, 0x35, 0x35, 0x2b, 0x3b, 0x8, 0x3f, 0x3b, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x3b, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x3b, 0x8, 0x31, 0x3b, 0x3f, 0x3f, 0x3b, 0x35, 0x35, 0x3b, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x8, 0x31, 0x3f, 0x3f, 0x3f, 0x3b, 0x2b, 0x2b, 0x35, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x8, 0x31, 0x3f, 0x3f, 0x3b, 0x3b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x8, 0x31, 0x3b, 0x3b, 0x3b, 0x3f, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8 },
+ .unk3A0 = { 0x381, 0x27c5, 0x27c5, 0x27c5, 0x27c5, 0x27c5, 0x26c5, 0x2005, 0x3efd, 0x1, 0x6ff, 0x7ff, 0x7ff, 0xffff, 0xffff, 0xffff },
+ .coords = { 0x67, 0xa7 },
+ .direction = 0x1,
+ .range = 0x33
+ }
+ },
+};
+
static const struct TrHillTag sDataTagNormal =
{
.unkField_0 = 8,
.unused1 = 2,
- .unkField_2 = 4,
- .unused3 = 0,
- .unused4 = 5,
- .unused5 = 30,
- .unused6 = 5,
- .floors =
+ .numFloors = 4,
+ .checksum = 0x00051E05
+};
+
+static const struct TrHillFloor sDataTagNormal_floors[] =
+{
+ [0] =
{
- [0] =
+ .unk0 = 0x11,
+ .unk1 = 0x12,
+ .trainers =
{
- .unk0 = 0x11,
- .unk1 = 0x12,
- .trainers =
+ [0] =
{
- [0] =
+ .name = _("ALAINA"),
+ .facilityClass = FACILITY_CLASS_HEX_MANIAC,
+ .unused = 0,
+ .speechBefore = {EC_WORD_YOU, EC_WORD_CAN, EC_WORD_CHOOSE, EC_WORD_NOT, EC_WORD_TO, EC_WORD_BELIEVE},
+ .speechWin = {EC_WORD_A, EC_WORD_SUPER, EC_WORD_NATURAL, EC_WORD_POWER, EC_WORD_HAS, EC_WORD_COME},
+ .speechLose = {EC_WORD_THIS, EC_WORD_MUST_BE, EC_WORD_A, EC_MOVE(NIGHTMARE), EC_WORD_EXCL, 0xFFFF},
+ .speechAfter = {EC_WORD_I, EC_WORD_WILL, EC_WORD_DISAPPEAR, EC_WORD_IN, EC_WORD_THE, EC_WORD_DARK},
+ .mons =
{
- .name = _("ALAINA"),
- .facilityClass = FACILITY_CLASS_HEX_MANIAC,
- .unused = 0,
- .speechBefore = {EC_WORD_YOU, EC_WORD_CAN, EC_WORD_CHOOSE, EC_WORD_NOT, EC_WORD_TO, EC_WORD_BELIEVE},
- .speechWin = {EC_WORD_A, EC_WORD_SUPER, EC_WORD_NATURAL, EC_WORD_POWER, EC_WORD_HAS, EC_WORD_COME},
- .speechLose = {EC_WORD_THIS, EC_WORD_MUST_BE, EC_WORD_A, EC_MOVE(NIGHTMARE), EC_WORD_EXCL, 0xFFFF},
- .speechAfter = {EC_WORD_I, EC_WORD_WILL, EC_WORD_DISAPPEAR, EC_WORD_IN, EC_WORD_THE, EC_WORD_DARK},
- .mons =
+ [0] =
{
- [0] =
- {
- .species = SPECIES_MISDREAVUS,
- .heldItem = ITEM_BRIGHT_POWDER,
- .moves = {MOVE_SHADOW_BALL, MOVE_PSYCHIC, MOVE_THUNDERBOLT, MOVE_CONFUSE_RAY},
- .level = 0,
- .ppBonuses = 0,
- .attackEV = 155,
- .speedEV = 255,
- .spAttackEV = 100,
- .otId = TRAINER_HILL_OTID,
- .hpIV = 24,
- .attackIV = 24,
- .defenseIV = 24,
- .speedIV = 24,
- .spAttackIV = 24,
- .spDefenseIV = 24,
- .abilityNum = 0,
- .personality = 0x0,
- .nickname = _("MISDREAVUS"),
- .friendship = 255,
- },
- [1] =
- {
- .species = SPECIES_SOLROCK,
- .heldItem = ITEM_FOCUS_BAND,
- .moves = {MOVE_PSYCHIC, MOVE_FLAMETHROWER, MOVE_ROCK_SLIDE, MOVE_CALM_MIND},
- .level = 0,
- .ppBonuses = 0,
- .hpEV = 200,
- .defenseEV = 100,
- .spAttackEV = 110,
- .spDefenseEV = 100,
- .otId = TRAINER_HILL_OTID,
- .hpIV = 24,
- .attackIV = 24,
- .defenseIV = 24,
- .speedIV = 24,
- .spAttackIV = 24,
- .spDefenseIV = 24,
- .abilityNum = 0,
- .personality = 0xF,
- .nickname = _("SOLROCK"),
- .friendship = 255,
- },
- [2] =
- {
- .species = SPECIES_CLAYDOL,
- .heldItem = ITEM_SHELL_BELL,
- .moves = {MOVE_EARTHQUAKE, MOVE_PSYCHIC, MOVE_SHADOW_BALL, MOVE_ICE_BEAM},
- .level = 0,
- .ppBonuses = 0,
- .hpEV = 255,
- .defenseEV = 135,
- .spDefenseEV = 120,
- .otId = TRAINER_HILL_OTID,
- .hpIV = 24,
- .attackIV = 24,
- .defenseIV = 24,
- .speedIV = 24,
- .spAttackIV = 24,
- .spDefenseIV = 24,
- .abilityNum = 0,
- .personality = 0xC,
- .nickname = _("CLAYDOL"),
- .friendship = 255,
- },
- [3] =
- {
- .species = SPECIES_WEEZING,
- .heldItem = ITEM_SALAC_BERRY,
- .moves = {MOVE_SLUDGE_BOMB, MOVE_SHADOW_BALL, MOVE_FRUSTRATION, MOVE_DESTINY_BOND},
- .level = 0,
- .ppBonuses = 0,
- .hpEV = 110,
- .attackEV = 200,
- .spDefenseEV = 200,
- .otId = TRAINER_HILL_OTID,
- .hpIV = 24,
- .attackIV = 24,
- .defenseIV = 24,
- .speedIV = 24,
- .spAttackIV = 24,
- .spDefenseIV = 24,
- .abilityNum = 0,
- .personality = 0x80,
- .nickname = _("WEEZING"),
- .friendship = 0,
- },
- [4] =
- {
- .species = SPECIES_LUNATONE,
- .heldItem = ITEM_FOCUS_BAND,
- .moves = {MOVE_PSYCHIC, MOVE_ICE_BEAM, MOVE_ROCK_SLIDE, MOVE_CALM_MIND},
- .level = 0,
- .ppBonuses = 0,
- .hpEV = 200,
- .defenseEV = 100,
- .spAttackEV = 110,
- .spDefenseEV = 100,
- .otId = TRAINER_HILL_OTID,
- .hpIV = 24,
- .attackIV = 24,
- .defenseIV = 24,
- .speedIV = 24,
- .spAttackIV = 24,
- .spDefenseIV = 24,
- .abilityNum = 0,
- .personality = 0xF,
- .nickname = _("LUNATONE"),
- .friendship = 255,
- },
- [5] =
- {
- .species = SPECIES_FLYGON,
- .heldItem = ITEM_CHOICE_BAND,
- .moves = {MOVE_EARTHQUAKE, MOVE_DRAGON_CLAW, MOVE_CRUNCH, MOVE_FLAMETHROWER},
- .level = 0,
- .ppBonuses = 0,
- .attackEV = 155,
- .speedEV = 255,
- .spAttackEV = 100,
- .otId = TRAINER_HILL_OTID,
- .hpIV = 24,
- .attackIV = 24,
- .defenseIV = 24,
- .speedIV = 24,
- .spAttackIV = 24,
- .spDefenseIV = 24,
- .abilityNum = 0,
- .personality = 0x83,
- .nickname = _("FLYGON"),
- .friendship = 255,
- },
+ .species = SPECIES_MISDREAVUS,
+ .heldItem = ITEM_BRIGHT_POWDER,
+ .moves = {MOVE_SHADOW_BALL, MOVE_PSYCHIC, MOVE_THUNDERBOLT, MOVE_CONFUSE_RAY},
+ .level = 0,
+ .ppBonuses = 0,
+ .attackEV = 155,
+ .speedEV = 255,
+ .spAttackEV = 100,
+ .otId = TRAINER_HILL_OTID,
+ .hpIV = 24,
+ .attackIV = 24,
+ .defenseIV = 24,
+ .speedIV = 24,
+ .spAttackIV = 24,
+ .spDefenseIV = 24,
+ .abilityNum = 0,
+ .personality = 0x0,
+ .nickname = _("MISDREAVUS"),
+ .friendship = 255,
+ },
+ [1] =
+ {
+ .species = SPECIES_SOLROCK,
+ .heldItem = ITEM_FOCUS_BAND,
+ .moves = {MOVE_PSYCHIC, MOVE_FLAMETHROWER, MOVE_ROCK_SLIDE, MOVE_CALM_MIND},
+ .level = 0,
+ .ppBonuses = 0,
+ .hpEV = 200,
+ .defenseEV = 100,
+ .spAttackEV = 110,
+ .spDefenseEV = 100,
+ .otId = TRAINER_HILL_OTID,
+ .hpIV = 24,
+ .attackIV = 24,
+ .defenseIV = 24,
+ .speedIV = 24,
+ .spAttackIV = 24,
+ .spDefenseIV = 24,
+ .abilityNum = 0,
+ .personality = 0xF,
+ .nickname = _("SOLROCK"),
+ .friendship = 255,
+ },
+ [2] =
+ {
+ .species = SPECIES_CLAYDOL,
+ .heldItem = ITEM_SHELL_BELL,
+ .moves = {MOVE_EARTHQUAKE, MOVE_PSYCHIC, MOVE_SHADOW_BALL, MOVE_ICE_BEAM},
+ .level = 0,
+ .ppBonuses = 0,
+ .hpEV = 255,
+ .defenseEV = 135,
+ .spDefenseEV = 120,
+ .otId = TRAINER_HILL_OTID,
+ .hpIV = 24,
+ .attackIV = 24,
+ .defenseIV = 24,
+ .speedIV = 24,
+ .spAttackIV = 24,
+ .spDefenseIV = 24,
+ .abilityNum = 0,
+ .personality = 0xC,
+ .nickname = _("CLAYDOL"),
+ .friendship = 255,
+ },
+ [3] =
+ {
+ .species = SPECIES_WEEZING,
+ .heldItem = ITEM_SALAC_BERRY,
+ .moves = {MOVE_SLUDGE_BOMB, MOVE_SHADOW_BALL, MOVE_FRUSTRATION, MOVE_DESTINY_BOND},
+ .level = 0,
+ .ppBonuses = 0,
+ .hpEV = 110,
+ .attackEV = 200,
+ .spDefenseEV = 200,
+ .otId = TRAINER_HILL_OTID,
+ .hpIV = 24,
+ .attackIV = 24,
+ .defenseIV = 24,
+ .speedIV = 24,
+ .spAttackIV = 24,
+ .spDefenseIV = 24,
+ .abilityNum = 0,
+ .personality = 0x80,
+ .nickname = _("WEEZING"),
+ .friendship = 0,
+ },
+ [4] =
+ {
+ .species = SPECIES_LUNATONE,
+ .heldItem = ITEM_FOCUS_BAND,
+ .moves = {MOVE_PSYCHIC, MOVE_ICE_BEAM, MOVE_ROCK_SLIDE, MOVE_CALM_MIND},
+ .level = 0,
+ .ppBonuses = 0,
+ .hpEV = 200,
+ .defenseEV = 100,
+ .spAttackEV = 110,
+ .spDefenseEV = 100,
+ .otId = TRAINER_HILL_OTID,
+ .hpIV = 24,
+ .attackIV = 24,
+ .defenseIV = 24,
+ .speedIV = 24,
+ .spAttackIV = 24,
+ .spDefenseIV = 24,
+ .abilityNum = 0,
+ .personality = 0xF,
+ .nickname = _("LUNATONE"),
+ .friendship = 255,
+ },
+ [5] =
+ {
+ .species = SPECIES_FLYGON,
+ .heldItem = ITEM_CHOICE_BAND,
+ .moves = {MOVE_EARTHQUAKE, MOVE_DRAGON_CLAW, MOVE_CRUNCH, MOVE_FLAMETHROWER},
+ .level = 0,
+ .ppBonuses = 0,
+ .attackEV = 155,
+ .speedEV = 255,
+ .spAttackEV = 100,
+ .otId = TRAINER_HILL_OTID,
+ .hpIV = 24,
+ .attackIV = 24,
+ .defenseIV = 24,
+ .speedIV = 24,
+ .spAttackIV = 24,
+ .spDefenseIV = 24,
+ .abilityNum = 0,
+ .personality = 0x83,
+ .nickname = _("FLYGON"),
+ .friendship = 255,
},
},
- [1] =
+ },
+ [1] =
+ {
+ .name = _("ALFONSO"),
+ .facilityClass = FACILITY_CLASS_CYCLING_TRIATHLETE_M,
+ .unused = 0,
+ .speechBefore = {EC_WORD_I, EC_WORD_NEVER, EC_WORD_TAKE, EC_WORD_A, EC_WORD_TRAIN, 0xFFFF},
+ .speechWin = {EC_WORD_I_AM, EC_WORD_FEELING, EC_MOVE2(SUPERSONIC), EC_WORD_ON, EC_WORD_MY, EC_WORD_BIKE},
+ .speechLose = {EC_WORD_MY, EC_WORD_BIKE, EC_WORD_EXCL, EC_WORD_YOU_VE, EC_WORD_DESTROYED, EC_WORD_IT},
+ .speechAfter = {EC_WORD_A, EC_WORD_BIKE, EC_WORD_OVER, EC_WORD_ANY, EC_WORD_TRAIN, EC_WORD_EXCL},
+ .mons =
{
- .name = _("ALFONSO"),
- .facilityClass = FACILITY_CLASS_CYCLING_TRIATHLETE_M,
- .unused = 0,
- .speechBefore = {EC_WORD_I, EC_WORD_NEVER, EC_WORD_TAKE, EC_WORD_A, EC_WORD_TRAIN, 0xFFFF},
- .speechWin = {EC_WORD_I_AM, EC_WORD_FEELING, EC_MOVE2(SUPERSONIC), EC_WORD_ON, EC_WORD_MY, EC_WORD_BIKE},
- .speechLose = {EC_WORD_MY, EC_WORD_BIKE, EC_WORD_EXCL, EC_WORD_YOU_VE, EC_WORD_DESTROYED, EC_WORD_IT},
- .speechAfter = {EC_WORD_A, EC_WORD_BIKE, EC_WORD_OVER, EC_WORD_ANY, EC_WORD_TRAIN, EC_WORD_EXCL},
- .mons =
+ [0] =
{
- [0] =
- {
- .species = SPECIES_SEALEO,
- .heldItem = ITEM_NEVER_MELT_ICE,
- .moves = {MOVE_BLIZZARD, MOVE_ICE_BALL, MOVE_ENCORE, MOVE_HAIL},
- .level = 0,
- .ppBonuses = 0,
- .hpEV = 255,
- .spAttackEV = 255,
- .otId = TRAINER_HILL_OTID,
- .hpIV = 15,
- .attackIV = 15,
- .defenseIV = 15,
- .speedIV = 15,
- .spAttackIV = 15,
- .spDefenseIV = 15,
- .abilityNum = 0,
- .personality = 0xF,
- .nickname = _("SEALEO"),
- .friendship = 255,
- },
- [1] =
- {
- .species = SPECIES_AMPHAROS,
- .heldItem = ITEM_MAGNET,
- .moves = {MOVE_THUNDER, MOVE_THUNDER_WAVE, MOVE_COTTON_SPORE, MOVE_LIGHT_SCREEN},
- .level = 0,
- .ppBonuses = 0,
- .speedEV = 255,
- .spAttackEV = 255,
- .otId = TRAINER_HILL_OTID,
- .hpIV = 15,
- .attackIV = 15,
- .defenseIV = 15,
- .speedIV = 15,
- .spAttackIV = 15,
- .spDefenseIV = 15,
- .abilityNum = 0,
- .personality = 0xF,
- .nickname = _("AMPHAROS"),
- .friendship = 255,
- },
- [2] =
- {
- .species = SPECIES_MACHOKE,
- .heldItem = ITEM_BLACK_BELT,
- .moves = {MOVE_DYNAMIC_PUNCH, MOVE_MUD_SLAP, MOVE_COUNTER, MOVE_SCARY_FACE},
- .level = 0,
- .ppBonuses = 0,
- .hpEV = 255,
- .attackEV = 255,
- .otId = TRAINER_HILL_OTID,
- .hpIV = 15,
- .attackIV = 15,
- .defenseIV = 15,
- .speedIV = 15,
- .spAttackIV = 15,
- .spDefenseIV = 15,
- .abilityNum = 0,
- .personality = 0x4E,
- .nickname = _("MACHOKE"),
- .friendship = 255,
- },
- [3] =
- {
- .species = SPECIES_FLAREON,
- .heldItem = ITEM_CHARCOAL,
- .moves = {MOVE_FIRE_BLAST, MOVE_BITE, MOVE_QUICK_ATTACK, MOVE_SAND_ATTACK},
- .level = 0,
- .ppBonuses = 0,
- .speedEV = 255,
- .spAttackEV = 255,
- .otId = TRAINER_HILL_OTID,
- .hpIV = 15,
- .attackIV = 15,
- .defenseIV = 15,
- .speedIV = 15,
- .spAttackIV = 15,
- .spDefenseIV = 15,
- .abilityNum = 0,
- .personality = 0x28,
- .nickname = _("FLAREON"),
- .friendship = 255,
- },
- [4] =
- {
- .species = SPECIES_MAGNETON,
- .heldItem = ITEM_MAGNET,
- .moves = {MOVE_ZAP_CANNON, MOVE_THUNDER_WAVE, MOVE_SCREECH, MOVE_METAL_SOUND},
- .level = 0,
- .ppBonuses = 0,
- .speedEV = 255,
- .spAttackEV = 255,
- .otId = TRAINER_HILL_OTID,
- .hpIV = 15,
- .attackIV = 15,
- .defenseIV = 15,
- .speedIV = 15,
- .spAttackIV = 15,
- .spDefenseIV = 15,
- .abilityNum = 0,
- .personality = 0x0,
- .nickname = _("MAGNETON"),
- .friendship = 255,
- },
- [5] =
- {
- .species = SPECIES_PINSIR,
- .heldItem = ITEM_QUICK_CLAW,
- .moves = {MOVE_GUILLOTINE, MOVE_BRICK_BREAK, MOVE_SWAGGER, MOVE_FAINT_ATTACK},
- .level = 0,
- .ppBonuses = 0,
- .hpEV = 200,
- .defenseEV = 155,
- .spDefenseEV = 155,
- .otId = TRAINER_HILL_OTID,
- .hpIV = 15,
- .attackIV = 15,
- .defenseIV = 15,
- .speedIV = 15,
- .spAttackIV = 15,
- .spDefenseIV = 15,
- .abilityNum = 0,
- .personality = 0x85,
- .nickname = _("PINSIR"),
- .friendship = 255,
- },
+ .species = SPECIES_SEALEO,
+ .heldItem = ITEM_NEVER_MELT_ICE,
+ .moves = {MOVE_BLIZZARD, MOVE_ICE_BALL, MOVE_ENCORE, MOVE_HAIL},
+ .level = 0,
+ .ppBonuses = 0,
+ .hpEV = 255,
+ .spAttackEV = 255,
+ .otId = TRAINER_HILL_OTID,
+ .hpIV = 15,
+ .attackIV = 15,
+ .defenseIV = 15,
+ .speedIV = 15,
+ .spAttackIV = 15,
+ .spDefenseIV = 15,
+ .abilityNum = 0,
+ .personality = 0xF,
+ .nickname = _("SEALEO"),
+ .friendship = 255,
+ },
+ [1] =
+ {
+ .species = SPECIES_AMPHAROS,
+ .heldItem = ITEM_MAGNET,
+ .moves = {MOVE_THUNDER, MOVE_THUNDER_WAVE, MOVE_COTTON_SPORE, MOVE_LIGHT_SCREEN},
+ .level = 0,
+ .ppBonuses = 0,
+ .speedEV = 255,
+ .spAttackEV = 255,
+ .otId = TRAINER_HILL_OTID,
+ .hpIV = 15,
+ .attackIV = 15,
+ .defenseIV = 15,
+ .speedIV = 15,
+ .spAttackIV = 15,
+ .spDefenseIV = 15,
+ .abilityNum = 0,
+ .personality = 0xF,
+ .nickname = _("AMPHAROS"),
+ .friendship = 255,
+ },
+ [2] =
+ {
+ .species = SPECIES_MACHOKE,
+ .heldItem = ITEM_BLACK_BELT,
+ .moves = {MOVE_DYNAMIC_PUNCH, MOVE_MUD_SLAP, MOVE_COUNTER, MOVE_SCARY_FACE},
+ .level = 0,
+ .ppBonuses = 0,
+ .hpEV = 255,
+ .attackEV = 255,
+ .otId = TRAINER_HILL_OTID,
+ .hpIV = 15,
+ .attackIV = 15,
+ .defenseIV = 15,
+ .speedIV = 15,
+ .spAttackIV = 15,
+ .spDefenseIV = 15,
+ .abilityNum = 0,
+ .personality = 0x4E,
+ .nickname = _("MACHOKE"),
+ .friendship = 255,
+ },
+ [3] =
+ {
+ .species = SPECIES_FLAREON,
+ .heldItem = ITEM_CHARCOAL,
+ .moves = {MOVE_FIRE_BLAST, MOVE_BITE, MOVE_QUICK_ATTACK, MOVE_SAND_ATTACK},
+ .level = 0,
+ .ppBonuses = 0,
+ .speedEV = 255,
+ .spAttackEV = 255,
+ .otId = TRAINER_HILL_OTID,
+ .hpIV = 15,
+ .attackIV = 15,
+ .defenseIV = 15,
+ .speedIV = 15,
+ .spAttackIV = 15,
+ .spDefenseIV = 15,
+ .abilityNum = 0,
+ .personality = 0x28,
+ .nickname = _("FLAREON"),
+ .friendship = 255,
+ },
+ [4] =
+ {
+ .species = SPECIES_MAGNETON,
+ .heldItem = ITEM_MAGNET,
+ .moves = {MOVE_ZAP_CANNON, MOVE_THUNDER_WAVE, MOVE_SCREECH, MOVE_METAL_SOUND},
+ .level = 0,
+ .ppBonuses = 0,
+ .speedEV = 255,
+ .spAttackEV = 255,
+ .otId = TRAINER_HILL_OTID,
+ .hpIV = 15,
+ .attackIV = 15,
+ .defenseIV = 15,
+ .speedIV = 15,
+ .spAttackIV = 15,
+ .spDefenseIV = 15,
+ .abilityNum = 0,
+ .personality = 0x0,
+ .nickname = _("MAGNETON"),
+ .friendship = 255,
+ },
+ [5] =
+ {
+ .species = SPECIES_PINSIR,
+ .heldItem = ITEM_QUICK_CLAW,
+ .moves = {MOVE_GUILLOTINE, MOVE_BRICK_BREAK, MOVE_SWAGGER, MOVE_FAINT_ATTACK},
+ .level = 0,
+ .ppBonuses = 0,
+ .hpEV = 200,
+ .defenseEV = 155,
+ .spDefenseEV = 155,
+ .otId = TRAINER_HILL_OTID,
+ .hpIV = 15,
+ .attackIV = 15,
+ .defenseIV = 15,
+ .speedIV = 15,
+ .spAttackIV = 15,
+ .spDefenseIV = 15,
+ .abilityNum = 0,
+ .personality = 0x85,
+ .nickname = _("PINSIR"),
+ .friendship = 255,
},
},
},
+ },
+ .display = {
.data = {0x31, 0x3B, 0x35, 0x35, 0x26, 0x26, 0x1B, 0x1C, 0x1D, 0x25, 0x26, 0x3A, 0x3B, 0x35, 0x3B, 0x8, 0x31, 0x3B, 0x2C, 0x2C, 0x2C, 0x2B, 0x24, 0x24, 0x24, 0x24, 0x2C, 0x3B, 0x3B, 0x2C, 0x3B, 0x8, 0x2D, 0x3B, 0x3B, 0x3B, 0x3B, 0x2B, 0x3B, 0x3B, 0x3B, 0x3B, 0x35, 0x3B, 0x35, 0x35, 0x3B, 0x8, 0x33, 0x3B, 0x32, 0x21, 0x30, 0x2B, 0x3B, 0x32, 0x21, 0x30, 0x2B, 0x3B, 0x2C, 0x2B, 0x3B, 0x8, 0x33, 0x35, 0x3B, 0x3B, 0x3B, 0x2C, 0x35, 0x3B, 0x3B, 0x3B, 0x2B, 0x3B, 0x3B, 0x2B, 0x3B, 0x8, 0x34, 0x2C, 0x3B, 0x32, 0x21, 0x30, 0x2B, 0x32, 0x30, 0x3B, 0x2B, 0x32, 0x30, 0x2C, 0x3B, 0x8, 0x31, 0x35, 0x3B, 0x3B, 0x35, 0x3B, 0x2C, 0x3B, 0x3B, 0x35, 0x2C, 0x3B, 0x3B, 0x35, 0x35, 0x8, 0x31, 0x2C, 0x32, 0x30, 0x2B, 0x32, 0x30, 0x35, 0x3B, 0x2B, 0x32, 0x21, 0x30, 0x2C, 0x2C, 0x8, 0x31, 0x35, 0x3B, 0x3B, 0x2B, 0x3B, 0x3B, 0x2B, 0x3B, 0x2C, 0x3B, 0x35, 0x3B, 0x3B, 0x3B, 0x8, 0x31, 0x2C, 0x32, 0x30, 0x2B, 0x32, 0x30, 0x2B, 0x3B, 0x32, 0x30, 0x2B, 0x32, 0x30, 0x3B, 0x8, 0x31, 0x35, 0x35, 0x35, 0x2B, 0x3B, 0x3B, 0x2B, 0x3B, 0x3B, 0x35, 0x2B, 0x3B, 0x35, 0x35, 0x8, 0x31, 0x2B, 0x2C, 0x2C, 0x2C, 0x32, 0x30, 0x2B, 0x32, 0x30, 0x2C, 0x2C, 0x3B, 0x2C, 0x2C, 0x8, 0x31, 0x2B, 0x3B, 0x3B, 0x35, 0x3B, 0x3B, 0x2B, 0x3B, 0x3B, 0x35, 0x3B, 0x3B, 0x3B, 0x3B, 0x8, 0x31, 0x2C, 0x32, 0x30, 0x2B, 0x3B, 0x3B, 0x2C, 0x32, 0x30, 0x2C, 0x32, 0x30, 0x3B, 0x35, 0x8, 0x31, 0x3B, 0x3B, 0x3B, 0x2C, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x2C, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8},
.unk3A0 = {0x381, 0x3FE5, 0x401, 0xBDED, 0x8425, 0xDFBD, 0x221, 0x7E7F, 0x941, 0x7F7D, 0x911, 0x7FF7, 0x4101, 0x79F9, 0x803, 0xFFFF},
.coords = {27, 45},
.direction = 0x21,
.range = 0x21,
- },
- [1] =
+ }
+ },
+ [1] =
+ {
+ .unk0 = 0x13,
+ .unk1 = 0x14,
+ .trainers =
{
- .unk0 = 0x13,
- .unk1 = 0x14,
- .trainers =
+ [0] =
{
- [0] =
+ .name = _("THEODORE"),
+ .facilityClass = FACILITY_CLASS_BLACK_BELT,
+ .unused = 0,
+ .speechBefore = {EC_WORD_MY, EC_WORD_POWER, EC_WORD_WILL, EC_MOVE2(STOMP), EC_WORD_YOU, EC_WORD_EXCL},
+ .speechWin = {EC_WORD_WAAAH, EC_WORD_HAHAHA, EC_WORD_EXCL, EC_WORD_WAAAH, EC_WORD_HAHAHA, EC_WORD_EXCL_EXCL},
+ .speechLose = {EC_WORD_I, EC_WORD_WENT, EC_WORD_AT, EC_WORD_IT, EC_WORD_TOO, EC_WORD_HARD},
+ .speechAfter = {EC_WORD_YES_SIR_EXCL, EC_WORD_YOU, EC_WORD_LOOK, EC_WORD_NICE, EC_WORD_AND, EC_WORD_GUTSY},
+ .mons =
{
- .name = _("THEODORE"),
- .facilityClass = FACILITY_CLASS_BLACK_BELT,
- .unused = 0,
- .speechBefore = {EC_WORD_MY, EC_WORD_POWER, EC_WORD_WILL, EC_MOVE2(STOMP), EC_WORD_YOU, EC_WORD_EXCL},
- .speechWin = {EC_WORD_WAAAH, EC_WORD_HAHAHA, EC_WORD_EXCL, EC_WORD_WAAAH, EC_WORD_HAHAHA, EC_WORD_EXCL_EXCL},
- .speechLose = {EC_WORD_I, EC_WORD_WENT, EC_WORD_AT, EC_WORD_IT, EC_WORD_TOO, EC_WORD_HARD},
- .speechAfter = {EC_WORD_YES_SIR_EXCL, EC_WORD_YOU, EC_WORD_LOOK, EC_WORD_NICE, EC_WORD_AND, EC_WORD_GUTSY},
- .mons =
+ [0] =
{
- [0] =
- {
- .species = SPECIES_MEDITITE,
- .heldItem = ITEM_FOCUS_BAND,
- .moves = {MOVE_FOCUS_PUNCH, MOVE_PROTECT, MOVE_NONE, MOVE_NONE},
- .level = 0,
- .ppBonuses = 0,
- .hpEV = 252,
- .attackEV = 252,
- .spDefenseEV = 6,
- .otId = TRAINER_HILL_OTID,
- .hpIV = 20,
- .attackIV = 20,
- .defenseIV = 20,
- .speedIV = 20,
- .spAttackIV = 20,
- .spDefenseIV = 20,
- .abilityNum = 0,
- .personality = 0x80,
- .nickname = _("MEDITITE"),
- .friendship = 255,
- },
- [1] =
- {
- .species = SPECIES_HERACROSS,
- .heldItem = ITEM_FOCUS_BAND,
- .moves = {MOVE_FOCUS_PUNCH, MOVE_PROTECT, MOVE_NONE, MOVE_NONE},
- .level = 0,
- .ppBonuses = 0,
- .hpEV = 252,
- .attackEV = 252,
- .spDefenseEV = 6,
- .otId = TRAINER_HILL_OTID,
- .hpIV = 20,
- .attackIV = 20,
- .defenseIV = 20,
- .speedIV = 20,
- .spAttackIV = 20,
- .spDefenseIV = 20,
- .abilityNum = 1,
- .personality = 0x80,
- .nickname = _("HERACROSS"),
- .friendship = 255,
- },
- [2] =
- {
- .species = SPECIES_HITMONTOP,
- .heldItem = ITEM_SHELL_BELL,
- .moves = {MOVE_FOCUS_PUNCH, MOVE_PROTECT, MOVE_NONE, MOVE_NONE},
- .level = 0,
- .ppBonuses = 0,
- .hpEV = 252,
- .attackEV = 252,
- .spDefenseEV = 6,
- .otId = TRAINER_HILL_OTID,
- .hpIV = 20,
- .attackIV = 20,
- .defenseIV = 20,
- .speedIV = 20,
- .spAttackIV = 20,
- .spDefenseIV = 20,
- .abilityNum = 0,
- .personality = 0x3,
- .nickname = _("HITMONTOP"),
- .friendship = 255,
- },
- [3] =
- {
- .species = SPECIES_MACHOP,
- .heldItem = ITEM_SALAC_BERRY,
- .moves = {MOVE_FOCUS_PUNCH, MOVE_REVENGE, MOVE_NONE, MOVE_NONE},
- .level = 0,
- .ppBonuses = 0,
- .hpEV = 252,
- .attackEV = 252,
- .spDefenseEV = 6,
- .otId = TRAINER_HILL_OTID,
- .hpIV = 20,
- .attackIV = 20,
- .defenseIV = 20,
- .speedIV = 20,
- .spAttackIV = 20,
- .spDefenseIV = 20,
- .abilityNum = 0,
- .personality = 0x4E,
- .nickname = _("MACHOP"),
- .friendship = 255,
- },
- [4] =
- {
- .species = SPECIES_PINSIR,
- .heldItem = ITEM_SALAC_BERRY,
- .moves = {MOVE_FOCUS_PUNCH, MOVE_REVENGE, MOVE_NONE, MOVE_NONE},
- .level = 0,
- .ppBonuses = 0,
- .hpEV = 252,
- .attackEV = 252,
- .spDefenseEV = 6,
- .otId = TRAINER_HILL_OTID,
- .hpIV = 20,
- .attackIV = 20,
- .defenseIV = 20,
- .speedIV = 20,
- .spAttackIV = 20,
- .spDefenseIV = 20,
- .abilityNum = 0,
- .personality = 0x80,
- .nickname = _("PINSIR"),
- .friendship = 255,
- },
- [5] =
- {
- .species = SPECIES_HITMONCHAN,
- .heldItem = ITEM_FOCUS_BAND,
- .moves = {MOVE_FOCUS_PUNCH, MOVE_REVENGE, MOVE_NONE, MOVE_NONE},
- .level = 0,
- .ppBonuses = 0,
- .hpEV = 252,
- .attackEV = 252,
- .spDefenseEV = 6,
- .otId = TRAINER_HILL_OTID,
- .hpIV = 20,
- .attackIV = 20,
- .defenseIV = 20,
- .speedIV = 20,
- .spAttackIV = 20,
- .spDefenseIV = 20,
- .abilityNum = 0,
- .personality = 0x3,
- .nickname = _("HITMONCHAN"),
- .friendship = 255,
- },
+ .species = SPECIES_MEDITITE,
+ .heldItem = ITEM_FOCUS_BAND,
+ .moves = {MOVE_FOCUS_PUNCH, MOVE_PROTECT, MOVE_NONE, MOVE_NONE},
+ .level = 0,
+ .ppBonuses = 0,
+ .hpEV = 252,
+ .attackEV = 252,
+ .spDefenseEV = 6,
+ .otId = TRAINER_HILL_OTID,
+ .hpIV = 20,
+ .attackIV = 20,
+ .defenseIV = 20,
+ .speedIV = 20,
+ .spAttackIV = 20,
+ .spDefenseIV = 20,
+ .abilityNum = 0,
+ .personality = 0x80,
+ .nickname = _("MEDITITE"),
+ .friendship = 255,
+ },
+ [1] =
+ {
+ .species = SPECIES_HERACROSS,
+ .heldItem = ITEM_FOCUS_BAND,
+ .moves = {MOVE_FOCUS_PUNCH, MOVE_PROTECT, MOVE_NONE, MOVE_NONE},
+ .level = 0,
+ .ppBonuses = 0,
+ .hpEV = 252,
+ .attackEV = 252,
+ .spDefenseEV = 6,
+ .otId = TRAINER_HILL_OTID,
+ .hpIV = 20,
+ .attackIV = 20,
+ .defenseIV = 20,
+ .speedIV = 20,
+ .spAttackIV = 20,
+ .spDefenseIV = 20,
+ .abilityNum = 1,
+ .personality = 0x80,
+ .nickname = _("HERACROSS"),
+ .friendship = 255,
+ },
+ [2] =
+ {
+ .species = SPECIES_HITMONTOP,
+ .heldItem = ITEM_SHELL_BELL,
+ .moves = {MOVE_FOCUS_PUNCH, MOVE_PROTECT, MOVE_NONE, MOVE_NONE},
+ .level = 0,
+ .ppBonuses = 0,
+ .hpEV = 252,
+ .attackEV = 252,
+ .spDefenseEV = 6,
+ .otId = TRAINER_HILL_OTID,
+ .hpIV = 20,
+ .attackIV = 20,
+ .defenseIV = 20,
+ .speedIV = 20,
+ .spAttackIV = 20,
+ .spDefenseIV = 20,
+ .abilityNum = 0,
+ .personality = 0x3,
+ .nickname = _("HITMONTOP"),
+ .friendship = 255,
+ },
+ [3] =
+ {
+ .species = SPECIES_MACHOP,
+ .heldItem = ITEM_SALAC_BERRY,
+ .moves = {MOVE_FOCUS_PUNCH, MOVE_REVENGE, MOVE_NONE, MOVE_NONE},
+ .level = 0,
+ .ppBonuses = 0,
+ .hpEV = 252,
+ .attackEV = 252,
+ .spDefenseEV = 6,
+ .otId = TRAINER_HILL_OTID,
+ .hpIV = 20,
+ .attackIV = 20,
+ .defenseIV = 20,
+ .speedIV = 20,
+ .spAttackIV = 20,
+ .spDefenseIV = 20,
+ .abilityNum = 0,
+ .personality = 0x4E,
+ .nickname = _("MACHOP"),
+ .friendship = 255,
+ },
+ [4] =
+ {
+ .species = SPECIES_PINSIR,
+ .heldItem = ITEM_SALAC_BERRY,
+ .moves = {MOVE_FOCUS_PUNCH, MOVE_REVENGE, MOVE_NONE, MOVE_NONE},
+ .level = 0,
+ .ppBonuses = 0,
+ .hpEV = 252,
+ .attackEV = 252,
+ .spDefenseEV = 6,
+ .otId = TRAINER_HILL_OTID,
+ .hpIV = 20,
+ .attackIV = 20,
+ .defenseIV = 20,
+ .speedIV = 20,
+ .spAttackIV = 20,
+ .spDefenseIV = 20,
+ .abilityNum = 0,
+ .personality = 0x80,
+ .nickname = _("PINSIR"),
+ .friendship = 255,
+ },
+ [5] =
+ {
+ .species = SPECIES_HITMONCHAN,
+ .heldItem = ITEM_FOCUS_BAND,
+ .moves = {MOVE_FOCUS_PUNCH, MOVE_REVENGE, MOVE_NONE, MOVE_NONE},
+ .level = 0,
+ .ppBonuses = 0,
+ .hpEV = 252,
+ .attackEV = 252,
+ .spDefenseEV = 6,
+ .otId = TRAINER_HILL_OTID,
+ .hpIV = 20,
+ .attackIV = 20,
+ .defenseIV = 20,
+ .speedIV = 20,
+ .spAttackIV = 20,
+ .spDefenseIV = 20,
+ .abilityNum = 0,
+ .personality = 0x3,
+ .nickname = _("HITMONCHAN"),
+ .friendship = 255,
},
},
- [1] =
+ },
+ [1] =
+ {
+ .name = _("JAYDEN"),
+ .facilityClass = FACILITY_CLASS_POKEMON_BREEDER_F,
+ .unused = 0,
+ .speechBefore = {EC_WORD_SOME, EC_WORD_THINGS, EC_WORD_YOU, EC_WORD_CAN_T, EC_WORD_DO, EC_WORD_ALONE},
+ .speechWin = {EC_WORD_YOU, EC_WORD_WIN, EC_WORD_AS, EC_WORD_A, EC_WORD_GROUP, 0xFFFF},
+ .speechLose = {EC_WORD_WE, EC_WORD_COULDN_T, EC_WORD_WIN, EC_WORD_TOGETHER, EC_WORD_QUES, 0xFFFF},
+ .speechAfter = {EC_WORD_MAYBE, EC_WORD_I, EC_WORD_NEED, EC_WORD_A, EC_WORD_BOY, EC_WORD_FRIEND},
+ .mons =
{
- .name = _("JAYDEN"),
- .facilityClass = FACILITY_CLASS_POKEMON_BREEDER_F,
- .unused = 0,
- .speechBefore = {EC_WORD_SOME, EC_WORD_THINGS, EC_WORD_YOU, EC_WORD_CAN_T, EC_WORD_DO, EC_WORD_ALONE},
- .speechWin = {EC_WORD_YOU, EC_WORD_WIN, EC_WORD_AS, EC_WORD_A, EC_WORD_GROUP, 0xFFFF},
- .speechLose = {EC_WORD_WE, EC_WORD_COULDN_T, EC_WORD_WIN, EC_WORD_TOGETHER, EC_WORD_QUES, 0xFFFF},
- .speechAfter = {EC_WORD_MAYBE, EC_WORD_I, EC_WORD_NEED, EC_WORD_A, EC_WORD_BOY, EC_WORD_FRIEND},
- .mons =
+ [0] =
{
- [0] =
- {
- .species = SPECIES_VULPIX,
- .heldItem = ITEM_LUM_BERRY,
- .moves = {MOVE_WILL_O_WISP, MOVE_CONFUSE_RAY, MOVE_TAIL_WHIP, MOVE_OVERHEAT},
- .level = 0,
- .ppBonuses = 0,
- .hpEV = 252,
- .defenseEV = 252,
- .spDefenseEV = 6,
- .otId = TRAINER_HILL_OTID,
- .hpIV = 15,
- .attackIV = 15,
- .defenseIV = 15,
- .speedIV = 15,
- .spAttackIV = 15,
- .spDefenseIV = 15,
- .abilityNum = 0,
- .personality = 0xF,
- .nickname = _("VULPIX"),
- .friendship = 255,
- },
- [1] =
- {
- .species = SPECIES_MINUN,
- .heldItem = ITEM_FOCUS_BAND,
- .moves = {MOVE_THUNDER_WAVE, MOVE_CHARM, MOVE_ENCORE, MOVE_SPARK},
- .level = 0,
- .ppBonuses = 0,
- .hpEV = 252,
- .defenseEV = 252,
- .spAttackEV = 6,
- .otId = TRAINER_HILL_OTID,
- .hpIV = 15,
- .attackIV = 15,
- .defenseIV = 15,
- .speedIV = 15,
- .spAttackIV = 15,
- .spDefenseIV = 15,
- .abilityNum = 0,
- .personality = 0x8C,
- .nickname = _("MINUN"),
- .friendship = 255,
- },
- [2] =
- {
- .species = SPECIES_ROSELIA,
- .heldItem = ITEM_LUM_BERRY,
- .moves = {MOVE_TOXIC, MOVE_LEECH_SEED, MOVE_SWEET_SCENT, MOVE_GIGA_DRAIN},
- .level = 0,
- .ppBonuses = 0,
- .hpEV = 252,
- .defenseEV = 252,
- .spAttackEV = 6,
- .otId = TRAINER_HILL_OTID,
- .hpIV = 15,
- .attackIV = 15,
- .defenseIV = 15,
- .speedIV = 15,
- .spAttackIV = 15,
- .spDefenseIV = 15,
- .abilityNum = 1,
- .personality = 0xF,
- .nickname = _("ROSELIA"),
- .friendship = 255,
- },
- [3] =
- {
- .species = SPECIES_MR_MIME,
- .heldItem = ITEM_SITRUS_BERRY,
- .moves = {MOVE_SAFEGUARD, MOVE_REFLECT, MOVE_LIGHT_SCREEN, MOVE_PSYCHIC},
- .level = 0,
- .ppBonuses = 0,
- .hpEV = 252,
- .defenseEV = 252,
- .spDefenseEV = 6,
- .otId = TRAINER_HILL_OTID,
- .hpIV = 15,
- .attackIV = 15,
- .defenseIV = 15,
- .speedIV = 15,
- .spAttackIV = 15,
- .spDefenseIV = 15,
- .abilityNum = 0,
- .personality = 0x82,
- .nickname = _("MR. MIME"),
- .friendship = 255,
- },
- [4] =
- {
- .species = SPECIES_PLUSLE,
- .heldItem = ITEM_SITRUS_BERRY,
- .moves = {MOVE_RAIN_DANCE, MOVE_LIGHT_SCREEN, MOVE_HELPING_HAND, MOVE_THUNDER},
- .level = 0,
- .ppBonuses = 0,
- .hpEV = 252,
- .defenseEV = 252,
- .spDefenseEV = 6,
- .otId = TRAINER_HILL_OTID,
- .hpIV = 15,
- .attackIV = 15,
- .defenseIV = 15,
- .speedIV = 15,
- .spAttackIV = 15,
- .spDefenseIV = 15,
- .abilityNum = 0,
- .personality = 0x5,
- .nickname = _("PLUSLE"),
- .friendship = 255,
- },
- [5] =
- {
- .species = SPECIES_TOGEPI,
- .heldItem = ITEM_SITRUS_BERRY,
- .moves = {MOVE_LIGHT_SCREEN, MOVE_REFLECT, MOVE_FOLLOW_ME, MOVE_METRONOME},
- .level = 0,
- .ppBonuses = 0,
- .hpEV = 252,
- .defenseEV = 252,
- .spDefenseEV = 6,
- .otId = TRAINER_HILL_OTID,
- .hpIV = 15,
- .attackIV = 15,
- .defenseIV = 15,
- .speedIV = 15,
- .spAttackIV = 15,
- .spDefenseIV = 15,
- .abilityNum = 1,
- .personality = 0x37,
- .nickname = _("TOGEPI"),
- .friendship = 255,
- },
+ .species = SPECIES_VULPIX,
+ .heldItem = ITEM_LUM_BERRY,
+ .moves = {MOVE_WILL_O_WISP, MOVE_CONFUSE_RAY, MOVE_TAIL_WHIP, MOVE_OVERHEAT},
+ .level = 0,
+ .ppBonuses = 0,
+ .hpEV = 252,
+ .defenseEV = 252,
+ .spDefenseEV = 6,
+ .otId = TRAINER_HILL_OTID,
+ .hpIV = 15,
+ .attackIV = 15,
+ .defenseIV = 15,
+ .speedIV = 15,
+ .spAttackIV = 15,
+ .spDefenseIV = 15,
+ .abilityNum = 0,
+ .personality = 0xF,
+ .nickname = _("VULPIX"),
+ .friendship = 255,
+ },
+ [1] =
+ {
+ .species = SPECIES_MINUN,
+ .heldItem = ITEM_FOCUS_BAND,
+ .moves = {MOVE_THUNDER_WAVE, MOVE_CHARM, MOVE_ENCORE, MOVE_SPARK},
+ .level = 0,
+ .ppBonuses = 0,
+ .hpEV = 252,
+ .defenseEV = 252,
+ .spAttackEV = 6,
+ .otId = TRAINER_HILL_OTID,
+ .hpIV = 15,
+ .attackIV = 15,
+ .defenseIV = 15,
+ .speedIV = 15,
+ .spAttackIV = 15,
+ .spDefenseIV = 15,
+ .abilityNum = 0,
+ .personality = 0x8C,
+ .nickname = _("MINUN"),
+ .friendship = 255,
+ },
+ [2] =
+ {
+ .species = SPECIES_ROSELIA,
+ .heldItem = ITEM_LUM_BERRY,
+ .moves = {MOVE_TOXIC, MOVE_LEECH_SEED, MOVE_SWEET_SCENT, MOVE_GIGA_DRAIN},
+ .level = 0,
+ .ppBonuses = 0,
+ .hpEV = 252,
+ .defenseEV = 252,
+ .spAttackEV = 6,
+ .otId = TRAINER_HILL_OTID,
+ .hpIV = 15,
+ .attackIV = 15,
+ .defenseIV = 15,
+ .speedIV = 15,
+ .spAttackIV = 15,
+ .spDefenseIV = 15,
+ .abilityNum = 1,
+ .personality = 0xF,
+ .nickname = _("ROSELIA"),
+ .friendship = 255,
+ },
+ [3] =
+ {
+ .species = SPECIES_MR_MIME,
+ .heldItem = ITEM_SITRUS_BERRY,
+ .moves = {MOVE_SAFEGUARD, MOVE_REFLECT, MOVE_LIGHT_SCREEN, MOVE_PSYCHIC},
+ .level = 0,
+ .ppBonuses = 0,
+ .hpEV = 252,
+ .defenseEV = 252,
+ .spDefenseEV = 6,
+ .otId = TRAINER_HILL_OTID,
+ .hpIV = 15,
+ .attackIV = 15,
+ .defenseIV = 15,
+ .speedIV = 15,
+ .spAttackIV = 15,
+ .spDefenseIV = 15,
+ .abilityNum = 0,
+ .personality = 0x82,
+ .nickname = _("MR. MIME"),
+ .friendship = 255,
+ },
+ [4] =
+ {
+ .species = SPECIES_PLUSLE,
+ .heldItem = ITEM_SITRUS_BERRY,
+ .moves = {MOVE_RAIN_DANCE, MOVE_LIGHT_SCREEN, MOVE_HELPING_HAND, MOVE_THUNDER},
+ .level = 0,
+ .ppBonuses = 0,
+ .hpEV = 252,
+ .defenseEV = 252,
+ .spDefenseEV = 6,
+ .otId = TRAINER_HILL_OTID,
+ .hpIV = 15,
+ .attackIV = 15,
+ .defenseIV = 15,
+ .speedIV = 15,
+ .spAttackIV = 15,
+ .spDefenseIV = 15,
+ .abilityNum = 0,
+ .personality = 0x5,
+ .nickname = _("PLUSLE"),
+ .friendship = 255,
+ },
+ [5] =
+ {
+ .species = SPECIES_TOGEPI,
+ .heldItem = ITEM_SITRUS_BERRY,
+ .moves = {MOVE_LIGHT_SCREEN, MOVE_REFLECT, MOVE_FOLLOW_ME, MOVE_METRONOME},
+ .level = 0,
+ .ppBonuses = 0,
+ .hpEV = 252,
+ .defenseEV = 252,
+ .spDefenseEV = 6,
+ .otId = TRAINER_HILL_OTID,
+ .hpIV = 15,
+ .attackIV = 15,
+ .defenseIV = 15,
+ .speedIV = 15,
+ .spAttackIV = 15,
+ .spDefenseIV = 15,
+ .abilityNum = 1,
+ .personality = 0x37,
+ .nickname = _("TOGEPI"),
+ .friendship = 255,
},
},
},
+ },
+ .display = {
.data = {0xD1, 0xD5, 0xD5, 0xD5, 0xD9, 0xD9, 0x1B, 0x1C, 0x1D, 0xC5, 0xC6, 0xCE, 0xD5, 0xDB, 0xD5, 0x8, 0xD1, 0xCB, 0xC4, 0xC4, 0xDB, 0xDB, 0xC4, 0xC4, 0xC4, 0xCC, 0xCC, 0xCC, 0xCB, 0xDB, 0xCB, 0x8, 0xD1, 0xCB, 0xDB, 0xDB, 0x17, 0x17, 0x17, 0xDB, 0xDB, 0xDB, 0xDB, 0xDB, 0xCB, 0xDB, 0xCB, 0x8, 0xD1, 0xCB, 0xDB, 0xD5, 0x17, 0x17, 0x17, 0xD5, 0xD5, 0xD5, 0xD5, 0xDF, 0xCB, 0xDB, 0xCB, 0x8, 0xD1, 0xCB, 0xDB, 0xCB, 0x17, 0x17, 0x1F, 0xCB, 0xCB, 0xC4, 0xC4, 0xDB, 0xCB, 0xDB, 0xCB, 0x8, 0xD1, 0xCB, 0xDB, 0xCB, 0xDB, 0xDB, 0xC4, 0xCB, 0xCB, 0xDF, 0xD5, 0xD5, 0xCB, 0xDB, 0xCB, 0x8, 0xD1, 0xCB, 0xDB, 0xCB, 0xDB, 0xDB, 0xDB, 0xCB, 0xCB, 0xDB, 0xC4, 0xC4, 0xCB, 0xDB, 0xCB, 0x8, 0xD1, 0xCB, 0xDB, 0xCB, 0xDB, 0xDB, 0xDB, 0xCB, 0xCB, 0xD5, 0xD5, 0xDF, 0xCB, 0xDB, 0xCB, 0x8, 0xD1, 0xCB, 0xDB, 0xCB, 0xDB, 0xDB, 0xDB, 0xCB, 0xCB, 0xC4, 0xC4, 0xDB, 0xCB, 0xDB, 0xCB, 0x8, 0xD1, 0xCB, 0xDB, 0xCB, 0xDB, 0xDB, 0xDB, 0xCB, 0xCB, 0xDF, 0xD5, 0xD5, 0xCB, 0xDB, 0xCB, 0x8, 0xD1, 0xCB, 0xDB, 0xCB, 0xDB, 0xDB, 0xDB, 0xC4, 0xC4, 0xDB, 0xC4, 0xC4, 0xC4, 0xDB, 0xCB, 0x8, 0xD1, 0xCB, 0xDB, 0xCB, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0xDB, 0xD5, 0xD5, 0xD5, 0xCB, 0x8, 0xD1, 0xC4, 0xDB, 0xCB, 0xDB, 0xDB, 0xDB, 0xDB, 0xDB, 0x9B, 0xDB, 0xCB, 0xCB, 0xCB, 0xCB, 0x8, 0xD1, 0xDB, 0xDB, 0xCB, 0xDB, 0xDB, 0xDB, 0xDB, 0xDB, 0x9B, 0xDB, 0xCB, 0xCB, 0xCB, 0xCB, 0x8, 0xD1, 0xDB, 0xDB, 0xC4, 0xDB, 0xDB, 0xDB, 0xDB, 0xDB, 0x9B, 0xDB, 0xC4, 0xC4, 0xC4, 0xC4, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8},
.unk3A0 = {0x381, 0x73FB, 0x400B, 0x400B, 0x51EB, 0x538B, 0x51BB, 0x518B, 0x51EB, 0x518B, 0x51BB, 0x5003, 0x501F, 0x101F, 0x101F, 0xFFFF},
.coords = {180, 233},
.direction = 0x3,
.range = 0x35,
- },
- [2] =
+ }
+ },
+ [2] =
+ {
+ .unk0 = 0x15,
+ .unk1 = 0x16,
+ .trainers =
{
- .unk0 = 0x15,
- .unk1 = 0x16,
- .trainers =
+ [0] =
{
- [0] =
+ .name = _("SALVADORE"),
+ .facilityClass = FACILITY_CLASS_PKMN_BREEDER_M,
+ .unused = 0,
+ .speechBefore = {EC_WORD_LET_S, EC_MOVE2(WRAP), EC_WORD_THINGS, EC_WORD_UP, EC_WORD_HERE, EC_WORD_HEY_QUES},
+ .speechWin = {EC_WORD_WOULD, EC_WORD_YOU, EC_WORD_LIKE, EC_WORD_TO, EC_WORD_GO_HOME, EC_WORD_QUES},
+ .speechLose = {EC_WORD_I, EC_WORD_WILL, EC_WORD_MAKE, EC_WORD_YOU, EC_WORD_SORRY, EC_WORD_FRIEND},
+ .speechAfter = {EC_WORD_HAVEN_T, EC_WORD_YOU, EC_WORD_DONE, EC_WORD_ENOUGH, EC_WORD_QUES, 0xFFFF},
+ .mons =
{
- .name = _("SALVADORE"),
- .facilityClass = FACILITY_CLASS_PKMN_BREEDER_M,
- .unused = 0,
- .speechBefore = {EC_WORD_LET_S, EC_MOVE2(WRAP), EC_WORD_THINGS, EC_WORD_UP, EC_WORD_HERE, EC_WORD_HEY_QUES},
- .speechWin = {EC_WORD_WOULD, EC_WORD_YOU, EC_WORD_LIKE, EC_WORD_TO, EC_WORD_GO_HOME, EC_WORD_QUES},
- .speechLose = {EC_WORD_I, EC_WORD_WILL, EC_WORD_MAKE, EC_WORD_YOU, EC_WORD_SORRY, EC_WORD_FRIEND},
- .speechAfter = {EC_WORD_HAVEN_T, EC_WORD_YOU, EC_WORD_DONE, EC_WORD_ENOUGH, EC_WORD_QUES, 0xFFFF},
- .mons =
+ [0] =
{
- [0] =
- {
- .species = SPECIES_VAPOREON,
- .heldItem = ITEM_FOCUS_BAND,
- .moves = {MOVE_HAZE, MOVE_HELPING_HAND, MOVE_TICKLE, MOVE_WATER_PULSE},
- .level = 0,
- .ppBonuses = 0,
- .hpEV = 250,
- .defenseEV = 130,
- .spDefenseEV = 130,
- .otId = TRAINER_HILL_OTID,
- .hpIV = 20,
- .attackIV = 15,
- .defenseIV = 15,
- .speedIV = 15,
- .spAttackIV = 15,
- .spDefenseIV = 15,
- .abilityNum = 0,
- .personality = 0x37,
- .nickname = _("VAPOREON"),
- .friendship = 0,
- },
- [1] =
- {
- .species = SPECIES_DODRIO,
- .heldItem = ITEM_KINGS_ROCK,
- .moves = {MOVE_HAZE, MOVE_TRI_ATTACK, MOVE_TAUNT, MOVE_TORMENT},
- .level = 0,
- .ppBonuses = 0,
- .hpEV = 252,
- .speedEV = 252,
- .spDefenseEV = 6,
- .otId = TRAINER_HILL_OTID,
- .hpIV = 20,
- .attackIV = 15,
- .defenseIV = 15,
- .speedIV = 15,
- .spAttackIV = 15,
- .spDefenseIV = 15,
- .abilityNum = 1,
- .personality = 0x8A,
- .nickname = _("DODRIO"),
- .friendship = 0,
- },
- [2] =
- {
- .species = SPECIES_OMASTAR,
- .heldItem = ITEM_QUICK_CLAW,
- .moves = {MOVE_HAZE, MOVE_HYDRO_PUMP, MOVE_TICKLE, MOVE_ATTRACT},
- .level = 0,
- .ppBonuses = 0,
- .hpEV = 250,
- .defenseEV = 130,
- .spDefenseEV = 130,
- .otId = TRAINER_HILL_OTID,
- .hpIV = 20,
- .attackIV = 15,
- .defenseIV = 15,
- .speedIV = 15,
- .spAttackIV = 15,
- .spDefenseIV = 15,
- .abilityNum = 0,
- .personality = 0x14,
- .nickname = _("OMASTAR"),
- .friendship = 255,
- },
- [3] =
- {
- .species = SPECIES_LICKITUNG,
- .heldItem = ITEM_CHESTO_BERRY,
- .moves = {MOVE_BELLY_DRUM, MOVE_REST, MOVE_MUD_SLAP, MOVE_SWAGGER},
- .level = 0,
- .ppBonuses = 0,
- .hpEV = 250,
- .defenseEV = 130,
- .spDefenseEV = 130,
- .otId = TRAINER_HILL_OTID,
- .hpIV = 15,
- .attackIV = 15,
- .defenseIV = 15,
- .speedIV = 15,
- .spAttackIV = 15,
- .spDefenseIV = 15,
- .abilityNum = 0,
- .personality = 0x8,
- .nickname = _("LICKITUNG"),
- .friendship = 255,
- },
- [4] =
- {
- .species = SPECIES_SLOWBRO,
- .heldItem = ITEM_LEFTOVERS,
- .moves = {MOVE_BELLY_DRUM, MOVE_MUD_SLAP, MOVE_SWAGGER, MOVE_AMNESIA},
- .level = 0,
- .ppBonuses = 0,
- .hpEV = 250,
- .defenseEV = 130,
- .spDefenseEV = 130,
- .otId = TRAINER_HILL_OTID,
- .hpIV = 15,
- .attackIV = 15,
- .defenseIV = 15,
- .speedIV = 15,
- .spAttackIV = 15,
- .spDefenseIV = 15,
- .abilityNum = 1,
- .personality = 0x94,
- .nickname = _("SLOWBRO"),
- .friendship = 0,
- },
- [5] =
- {
- .species = SPECIES_LINOONE,
- .heldItem = ITEM_LUM_BERRY,
- .moves = {MOVE_BELLY_DRUM, MOVE_REST, MOVE_MUD_SLAP, MOVE_SWAGGER},
- .level = 0,
- .ppBonuses = 0,
- .hpEV = 250,
- .defenseEV = 130,
- .spDefenseEV = 130,
- .otId = TRAINER_HILL_OTID,
- .hpIV = 20,
- .attackIV = 15,
- .defenseIV = 15,
- .speedIV = 15,
- .spAttackIV = 15,
- .spDefenseIV = 15,
- .abilityNum = 0,
- .personality = 0x8,
- .nickname = _("LINOONE"),
- .friendship = 255,
- },
+ .species = SPECIES_VAPOREON,
+ .heldItem = ITEM_FOCUS_BAND,
+ .moves = {MOVE_HAZE, MOVE_HELPING_HAND, MOVE_TICKLE, MOVE_WATER_PULSE},
+ .level = 0,
+ .ppBonuses = 0,
+ .hpEV = 250,
+ .defenseEV = 130,
+ .spDefenseEV = 130,
+ .otId = TRAINER_HILL_OTID,
+ .hpIV = 20,
+ .attackIV = 15,
+ .defenseIV = 15,
+ .speedIV = 15,
+ .spAttackIV = 15,
+ .spDefenseIV = 15,
+ .abilityNum = 0,
+ .personality = 0x37,
+ .nickname = _("VAPOREON"),
+ .friendship = 0,
+ },
+ [1] =
+ {
+ .species = SPECIES_DODRIO,
+ .heldItem = ITEM_KINGS_ROCK,
+ .moves = {MOVE_HAZE, MOVE_TRI_ATTACK, MOVE_TAUNT, MOVE_TORMENT},
+ .level = 0,
+ .ppBonuses = 0,
+ .hpEV = 252,
+ .speedEV = 252,
+ .spDefenseEV = 6,
+ .otId = TRAINER_HILL_OTID,
+ .hpIV = 20,
+ .attackIV = 15,
+ .defenseIV = 15,
+ .speedIV = 15,
+ .spAttackIV = 15,
+ .spDefenseIV = 15,
+ .abilityNum = 1,
+ .personality = 0x8A,
+ .nickname = _("DODRIO"),
+ .friendship = 0,
+ },
+ [2] =
+ {
+ .species = SPECIES_OMASTAR,
+ .heldItem = ITEM_QUICK_CLAW,
+ .moves = {MOVE_HAZE, MOVE_HYDRO_PUMP, MOVE_TICKLE, MOVE_ATTRACT},
+ .level = 0,
+ .ppBonuses = 0,
+ .hpEV = 250,
+ .defenseEV = 130,
+ .spDefenseEV = 130,
+ .otId = TRAINER_HILL_OTID,
+ .hpIV = 20,
+ .attackIV = 15,
+ .defenseIV = 15,
+ .speedIV = 15,
+ .spAttackIV = 15,
+ .spDefenseIV = 15,
+ .abilityNum = 0,
+ .personality = 0x14,
+ .nickname = _("OMASTAR"),
+ .friendship = 255,
+ },
+ [3] =
+ {
+ .species = SPECIES_LICKITUNG,
+ .heldItem = ITEM_CHESTO_BERRY,
+ .moves = {MOVE_BELLY_DRUM, MOVE_REST, MOVE_MUD_SLAP, MOVE_SWAGGER},
+ .level = 0,
+ .ppBonuses = 0,
+ .hpEV = 250,
+ .defenseEV = 130,
+ .spDefenseEV = 130,
+ .otId = TRAINER_HILL_OTID,
+ .hpIV = 15,
+ .attackIV = 15,
+ .defenseIV = 15,
+ .speedIV = 15,
+ .spAttackIV = 15,
+ .spDefenseIV = 15,
+ .abilityNum = 0,
+ .personality = 0x8,
+ .nickname = _("LICKITUNG"),
+ .friendship = 255,
+ },
+ [4] =
+ {
+ .species = SPECIES_SLOWBRO,
+ .heldItem = ITEM_LEFTOVERS,
+ .moves = {MOVE_BELLY_DRUM, MOVE_MUD_SLAP, MOVE_SWAGGER, MOVE_AMNESIA},
+ .level = 0,
+ .ppBonuses = 0,
+ .hpEV = 250,
+ .defenseEV = 130,
+ .spDefenseEV = 130,
+ .otId = TRAINER_HILL_OTID,
+ .hpIV = 15,
+ .attackIV = 15,
+ .defenseIV = 15,
+ .speedIV = 15,
+ .spAttackIV = 15,
+ .spDefenseIV = 15,
+ .abilityNum = 1,
+ .personality = 0x94,
+ .nickname = _("SLOWBRO"),
+ .friendship = 0,
+ },
+ [5] =
+ {
+ .species = SPECIES_LINOONE,
+ .heldItem = ITEM_LUM_BERRY,
+ .moves = {MOVE_BELLY_DRUM, MOVE_REST, MOVE_MUD_SLAP, MOVE_SWAGGER},
+ .level = 0,
+ .ppBonuses = 0,
+ .hpEV = 250,
+ .defenseEV = 130,
+ .spDefenseEV = 130,
+ .otId = TRAINER_HILL_OTID,
+ .hpIV = 20,
+ .attackIV = 15,
+ .defenseIV = 15,
+ .speedIV = 15,
+ .spAttackIV = 15,
+ .spDefenseIV = 15,
+ .abilityNum = 0,
+ .personality = 0x8,
+ .nickname = _("LINOONE"),
+ .friendship = 255,
},
},
- [1] =
+ },
+ [1] =
+ {
+ .name = _("VERONICA"),
+ .facilityClass = FACILITY_CLASS_POKEMON_BREEDER_F,
+ .unused = 0,
+ .speechBefore = {EC_WORD_I_AM, EC_WORD_THE, EC_WORD_STRONG, EC_WORD_BEAUTY, EC_WORD_AROUND, EC_WORD_HERE},
+ .speechWin = {EC_WORD_I_AM, EC_WORD_STRONG, EC_WORD_THAT_S, EC_WORD_WHY, EC_WORD_EXCL, 0xFFFF},
+ .speechLose = {EC_WORD_I_AM, EC_WORD_TIRED, EC_WORD_TODAY, EC_WORD_THAT_S, EC_WORD_WHY, EC_WORD_EXCL},
+ .speechAfter = {EC_WORD_WHY, EC_WORD_YES, EC_WORD_I_AM, EC_WORD_ANGRY, EC_WORD_THANK_YOU, EC_WORD_EXCL},
+ .mons =
{
- .name = _("VERONICA"),
- .facilityClass = FACILITY_CLASS_POKEMON_BREEDER_F,
- .unused = 0,
- .speechBefore = {EC_WORD_I_AM, EC_WORD_THE, EC_WORD_STRONG, EC_WORD_BEAUTY, EC_WORD_AROUND, EC_WORD_HERE},
- .speechWin = {EC_WORD_I_AM, EC_WORD_STRONG, EC_WORD_THAT_S, EC_WORD_WHY, EC_WORD_EXCL, 0xFFFF},
- .speechLose = {EC_WORD_I_AM, EC_WORD_TIRED, EC_WORD_TODAY, EC_WORD_THAT_S, EC_WORD_WHY, EC_WORD_EXCL},
- .speechAfter = {EC_WORD_WHY, EC_WORD_YES, EC_WORD_I_AM, EC_WORD_ANGRY, EC_WORD_THANK_YOU, EC_WORD_EXCL},
- .mons =
+ [0] =
{
- [0] =
- {
- .species = SPECIES_SKITTY,
- .heldItem = ITEM_FOCUS_BAND,
- .moves = {MOVE_PSYCH_UP, MOVE_DOUBLE_EDGE, MOVE_SHADOW_BALL, MOVE_IRON_TAIL},
- .level = 0,
- .ppBonuses = 0,
- .attackEV = 252,
- .speedEV = 252,
- .otId = TRAINER_HILL_OTID,
- .hpIV = 31,
- .attackIV = 31,
- .defenseIV = 31,
- .speedIV = 31,
- .spAttackIV = 31,
- .spDefenseIV = 31,
- .abilityNum = 0,
- .personality = 0xCB,
- .nickname = _("SKITTY"),
- .friendship = 255,
- },
- [1] =
- {
- .species = SPECIES_MEDICHAM,
- .heldItem = ITEM_QUICK_CLAW,
- .moves = {MOVE_PSYCH_UP, MOVE_HI_JUMP_KICK, MOVE_MEGA_KICK, MOVE_ROCK_SLIDE},
- .level = 0,
- .ppBonuses = 0,
- .hpEV = 252,
- .attackEV = 6,
- .speedEV = 252,
- .otId = TRAINER_HILL_OTID,
- .hpIV = 15,
- .attackIV = 15,
- .defenseIV = 15,
- .speedIV = 15,
- .spAttackIV = 15,
- .spDefenseIV = 15,
- .abilityNum = 0,
- .personality = 0xD,
- .nickname = _("MEDICHAM"),
- .friendship = 0,
- },
- [2] =
- {
- .species = SPECIES_STANTLER,
- .heldItem = ITEM_SHELL_BELL,
- .moves = {MOVE_PSYCH_UP, MOVE_RETURN, MOVE_EARTHQUAKE, MOVE_SHADOW_BALL},
- .level = 0,
- .ppBonuses = 0,
- .hpEV = 252,
- .attackEV = 252,
- .speedEV = 6,
- .otId = TRAINER_HILL_OTID,
- .hpIV = 15,
- .attackIV = 15,
- .defenseIV = 15,
- .speedIV = 15,
- .spAttackIV = 15,
- .spDefenseIV = 15,
- .abilityNum = 0,
- .personality = 0x3,
- .nickname = _("STANTLER"),
- .friendship = 0,
- },
- [3] =
- {
- .species = SPECIES_NIDOQUEEN,
- .heldItem = ITEM_SALAC_BERRY,
- .moves = {MOVE_SUPERPOWER, MOVE_BITE, MOVE_CHARM, MOVE_FLATTER},
- .level = 0,
- .ppBonuses = 0,
- .hpEV = 252,
- .attackEV = 252,
- .spDefenseEV = 6,
- .otId = TRAINER_HILL_OTID,
- .hpIV = 15,
- .attackIV = 20,
- .defenseIV = 15,
- .speedIV = 15,
- .spAttackIV = 15,
- .spDefenseIV = 15,
- .abilityNum = 0,
- .personality = 0x3,
- .nickname = _("NIDOQUEEN"),
- .friendship = 0,
- },
- [4] =
- {
- .species = SPECIES_NINETALES,
- .heldItem = ITEM_SALAC_BERRY,
- .moves = {MOVE_OVERHEAT, MOVE_QUICK_ATTACK, MOVE_SPITE, MOVE_TAIL_WHIP},
- .level = 0,
- .ppBonuses = 0,
- .hpEV = 6,
- .speedEV = 252,
- .spAttackEV = 252,
- .otId = TRAINER_HILL_OTID,
- .hpIV = 15,
- .attackIV = 15,
- .defenseIV = 15,
- .speedIV = 15,
- .spAttackIV = 15,
- .spDefenseIV = 15,
- .abilityNum = 0,
- .personality = 0xD7,
- .nickname = _("NINETALES"),
- .friendship = 255,
- },
- [5] =
- {
- .species = SPECIES_CHARIZARD,
- .heldItem = ITEM_SALAC_BERRY,
- .moves = {MOVE_OVERHEAT, MOVE_BEAT_UP, MOVE_SCARY_FACE, MOVE_GROWL},
- .level = 0,
- .ppBonuses = 0,
- .hpEV = 6,
- .speedEV = 252,
- .spAttackEV = 252,
- .otId = TRAINER_HILL_OTID,
- .hpIV = 15,
- .attackIV = 15,
- .defenseIV = 15,
- .speedIV = 15,
- .spAttackIV = 15,
- .spDefenseIV = 15,
- .abilityNum = 0,
- .personality = 0x28,
- .nickname = _("CHARIZARD"),
- .friendship = 255,
- },
+ .species = SPECIES_SKITTY,
+ .heldItem = ITEM_FOCUS_BAND,
+ .moves = {MOVE_PSYCH_UP, MOVE_DOUBLE_EDGE, MOVE_SHADOW_BALL, MOVE_IRON_TAIL},
+ .level = 0,
+ .ppBonuses = 0,
+ .attackEV = 252,
+ .speedEV = 252,
+ .otId = TRAINER_HILL_OTID,
+ .hpIV = 31,
+ .attackIV = 31,
+ .defenseIV = 31,
+ .speedIV = 31,
+ .spAttackIV = 31,
+ .spDefenseIV = 31,
+ .abilityNum = 0,
+ .personality = 0xCB,
+ .nickname = _("SKITTY"),
+ .friendship = 255,
+ },
+ [1] =
+ {
+ .species = SPECIES_MEDICHAM,
+ .heldItem = ITEM_QUICK_CLAW,
+ .moves = {MOVE_PSYCH_UP, MOVE_HI_JUMP_KICK, MOVE_MEGA_KICK, MOVE_ROCK_SLIDE},
+ .level = 0,
+ .ppBonuses = 0,
+ .hpEV = 252,
+ .attackEV = 6,
+ .speedEV = 252,
+ .otId = TRAINER_HILL_OTID,
+ .hpIV = 15,
+ .attackIV = 15,
+ .defenseIV = 15,
+ .speedIV = 15,
+ .spAttackIV = 15,
+ .spDefenseIV = 15,
+ .abilityNum = 0,
+ .personality = 0xD,
+ .nickname = _("MEDICHAM"),
+ .friendship = 0,
+ },
+ [2] =
+ {
+ .species = SPECIES_STANTLER,
+ .heldItem = ITEM_SHELL_BELL,
+ .moves = {MOVE_PSYCH_UP, MOVE_RETURN, MOVE_EARTHQUAKE, MOVE_SHADOW_BALL},
+ .level = 0,
+ .ppBonuses = 0,
+ .hpEV = 252,
+ .attackEV = 252,
+ .speedEV = 6,
+ .otId = TRAINER_HILL_OTID,
+ .hpIV = 15,
+ .attackIV = 15,
+ .defenseIV = 15,
+ .speedIV = 15,
+ .spAttackIV = 15,
+ .spDefenseIV = 15,
+ .abilityNum = 0,
+ .personality = 0x3,
+ .nickname = _("STANTLER"),
+ .friendship = 0,
+ },
+ [3] =
+ {
+ .species = SPECIES_NIDOQUEEN,
+ .heldItem = ITEM_SALAC_BERRY,
+ .moves = {MOVE_SUPERPOWER, MOVE_BITE, MOVE_CHARM, MOVE_FLATTER},
+ .level = 0,
+ .ppBonuses = 0,
+ .hpEV = 252,
+ .attackEV = 252,
+ .spDefenseEV = 6,
+ .otId = TRAINER_HILL_OTID,
+ .hpIV = 15,
+ .attackIV = 20,
+ .defenseIV = 15,
+ .speedIV = 15,
+ .spAttackIV = 15,
+ .spDefenseIV = 15,
+ .abilityNum = 0,
+ .personality = 0x3,
+ .nickname = _("NIDOQUEEN"),
+ .friendship = 0,
+ },
+ [4] =
+ {
+ .species = SPECIES_NINETALES,
+ .heldItem = ITEM_SALAC_BERRY,
+ .moves = {MOVE_OVERHEAT, MOVE_QUICK_ATTACK, MOVE_SPITE, MOVE_TAIL_WHIP},
+ .level = 0,
+ .ppBonuses = 0,
+ .hpEV = 6,
+ .speedEV = 252,
+ .spAttackEV = 252,
+ .otId = TRAINER_HILL_OTID,
+ .hpIV = 15,
+ .attackIV = 15,
+ .defenseIV = 15,
+ .speedIV = 15,
+ .spAttackIV = 15,
+ .spDefenseIV = 15,
+ .abilityNum = 0,
+ .personality = 0xD7,
+ .nickname = _("NINETALES"),
+ .friendship = 255,
+ },
+ [5] =
+ {
+ .species = SPECIES_CHARIZARD,
+ .heldItem = ITEM_SALAC_BERRY,
+ .moves = {MOVE_OVERHEAT, MOVE_BEAT_UP, MOVE_SCARY_FACE, MOVE_GROWL},
+ .level = 0,
+ .ppBonuses = 0,
+ .hpEV = 6,
+ .speedEV = 252,
+ .spAttackEV = 252,
+ .otId = TRAINER_HILL_OTID,
+ .hpIV = 15,
+ .attackIV = 15,
+ .defenseIV = 15,
+ .speedIV = 15,
+ .spAttackIV = 15,
+ .spDefenseIV = 15,
+ .abilityNum = 0,
+ .personality = 0x28,
+ .nickname = _("CHARIZARD"),
+ .friendship = 255,
},
},
},
+ },
+ .display = {
.data = {0x31, 0x35, 0x35, 0x35, 0x26, 0x26, 0x13, 0x14, 0x15, 0x38, 0x26, 0x2E, 0x35, 0x35, 0x3B, 0x8, 0x69, 0x63, 0x64, 0x64, 0x64, 0x64, 0x71, 0x71, 0x71, 0x72, 0x64, 0x64, 0x64, 0x63, 0x73, 0x8, 0x69, 0x63, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x63, 0x73, 0x8, 0x69, 0x63, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x63, 0x73, 0x8, 0x69, 0x63, 0x43, 0x41, 0x40, 0x41, 0x42, 0x41, 0x41, 0x4A, 0x42, 0x41, 0x41, 0x63, 0x73, 0x8, 0x69, 0x63, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x64, 0x73, 0x73, 0x73, 0x63, 0x73, 0x8, 0x69, 0x63, 0x41, 0x43, 0x4B, 0x43, 0x43, 0x41, 0x42, 0x42, 0x40, 0x41, 0x40, 0x63, 0x73, 0x8, 0x69, 0x63, 0x73, 0x73, 0x64, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x63, 0x73, 0x8, 0x69, 0x63, 0x41, 0x40, 0x42, 0x42, 0x41, 0x41, 0x42, 0x4A, 0x42, 0x41, 0x42, 0x63, 0x73, 0x8, 0x69, 0x63, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x64, 0x73, 0x73, 0x73, 0x63, 0x73, 0x8, 0x69, 0x63, 0x41, 0x42, 0x41, 0x43, 0x4B, 0x41, 0x41, 0x41, 0x40, 0x43, 0x41, 0x63, 0x73, 0x8, 0x69, 0x63, 0x73, 0x73, 0x73, 0x73, 0x64, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x63, 0x73, 0x8, 0x69, 0x63, 0x41, 0x40, 0x43, 0x41, 0x42, 0x42, 0x41, 0x4A, 0x42, 0x41, 0x42, 0x63, 0x73, 0x8, 0x69, 0x64, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x64, 0x73, 0x73, 0x73, 0x64, 0x73, 0x8, 0x69, 0x43, 0x43, 0x41, 0x42, 0x42, 0x41, 0x43, 0x41, 0x41, 0x40, 0x42, 0x41, 0x42, 0x73, 0x8, 0x69, 0x42, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x42, 0x73, 0x8},
.unk3A0 = {0x381, 0x7C3D, 0x4005, 0x4005, 0x4005, 0x4045, 0x4005, 0x4805, 0x4005, 0x4045, 0x4005, 0x4205, 0x4005, 0x4045, 0x1, 0x1},
.coords = {37, 41},
.direction = 0x23,
.range = 0x33,
- },
- [3] =
+ }
+ },
+ [3] =
+ {
+ .unk0 = 0x17,
+ .unk1 = 0x18,
+ .trainers =
{
- .unk0 = 0x17,
- .unk1 = 0x18,
- .trainers =
+ [0] =
{
- [0] =
+ .name = _("KEENAN"),
+ .facilityClass = FACILITY_CLASS_PSYCHIC_M,
+ .unused = 0,
+ .speechBefore = {EC_WORD_YOU, EC_WORD_LOOK, EC_WORD_SO, EC_WORD_HURRIED, 0xFFFF, 0xFFFF},
+ .speechWin = {EC_WORD_TOO, EC_WORD_BAD, 0xFFFF, EC_WORD_TIME, EC_WORD_IS, EC_WORD_UP},
+ .speechLose = {EC_WORD_DOES, EC_WORD_THE, EC_WORD_TIME, EC_WORD_WORRY, EC_WORD_YOU, EC_WORD_QUES},
+ .speechAfter = {EC_WORD_YOU, EC_WORD_DON_T, EC_WORD_HAVE, EC_WORD_TIME, EC_WORD_TO, EC_WORD_CHAT},
+ .mons =
{
- .name = _("KEENAN"),
- .facilityClass = FACILITY_CLASS_PSYCHIC_M,
- .unused = 0,
- .speechBefore = {EC_WORD_YOU, EC_WORD_LOOK, EC_WORD_SO, EC_WORD_HURRIED, 0xFFFF, 0xFFFF},
- .speechWin = {EC_WORD_TOO, EC_WORD_BAD, 0xFFFF, EC_WORD_TIME, EC_WORD_IS, EC_WORD_UP},
- .speechLose = {EC_WORD_DOES, EC_WORD_THE, EC_WORD_TIME, EC_WORD_WORRY, EC_WORD_YOU, EC_WORD_QUES},
- .speechAfter = {EC_WORD_YOU, EC_WORD_DON_T, EC_WORD_HAVE, EC_WORD_TIME, EC_WORD_TO, EC_WORD_CHAT},
- .mons =
+ [0] =
{
- [0] =
- {
- .species = SPECIES_ALAKAZAM,
- .heldItem = ITEM_PETAYA_BERRY,
- .moves = {MOVE_SKILL_SWAP, MOVE_FIRE_PUNCH, MOVE_ICE_PUNCH, MOVE_REFLECT},
- .level = 0,
- .ppBonuses = 0,
- .speedEV = 255,
- .spAttackEV = 255,
- .otId = TRAINER_HILL_OTID,
- .hpIV = 5,
- .attackIV = 5,
- .defenseIV = 5,
- .speedIV = 5,
- .spAttackIV = 5,
- .spDefenseIV = 5,
- .abilityNum = 0,
- .personality = 0x41,
- .nickname = _("ALAKAZAM"),
- .friendship = 255,
- },
- [1] =
- {
- .species = SPECIES_BLISSEY,
- .heldItem = ITEM_LEFTOVERS,
- .moves = {MOVE_SKILL_SWAP, MOVE_EGG_BOMB, MOVE_THUNDERBOLT, MOVE_SING},
- .level = 0,
- .ppBonuses = 0,
- .defenseEV = 255,
- .spAttackEV = 155,
- .spDefenseEV = 100,
- .otId = TRAINER_HILL_OTID,
- .hpIV = 5,
- .attackIV = 5,
- .defenseIV = 5,
- .speedIV = 5,
- .spAttackIV = 5,
- .spDefenseIV = 5,
- .abilityNum = 1,
- .personality = 0xF,
- .nickname = _("BLISSEY"),
- .friendship = 255,
- },
- [2] =
- {
- .species = SPECIES_GRUMPIG,
- .heldItem = ITEM_TWISTED_SPOON,
- .moves = {MOVE_SKILL_SWAP, MOVE_PSYCHIC, MOVE_CONFUSE_RAY, MOVE_REST},
- .level = 0,
- .ppBonuses = 0,
- .hpEV = 110,
- .defenseEV = 200,
- .spAttackEV = 200,
- .otId = TRAINER_HILL_OTID,
- .hpIV = 5,
- .attackIV = 5,
- .defenseIV = 5,
- .speedIV = 5,
- .spAttackIV = 5,
- .spDefenseIV = 5,
- .abilityNum = 0,
- .personality = 0x8C,
- .nickname = _("GRUMPIG"),
- .friendship = 255,
- },
- [3] =
- {
- .species = SPECIES_GARDEVOIR,
- .heldItem = ITEM_SALAC_BERRY,
- .moves = {MOVE_SKILL_SWAP, MOVE_DREAM_EATER, MOVE_HYPNOSIS, MOVE_PROTECT},
- .level = 0,
- .ppBonuses = 0,
- .speedEV = 255,
- .spAttackEV = 255,
- .otId = TRAINER_HILL_OTID,
- .hpIV = 5,
- .attackIV = 5,
- .defenseIV = 5,
- .speedIV = 5,
- .spAttackIV = 5,
- .spDefenseIV = 5,
- .abilityNum = 1,
- .personality = 0xF,
- .nickname = _("GARDEVOIR"),
- .friendship = 255,
- },
- [4] =
- {
- .species = SPECIES_VENOMOTH,
- .heldItem = ITEM_BRIGHT_POWDER,
- .moves = {MOVE_SKILL_SWAP, MOVE_SIGNAL_BEAM, MOVE_SLEEP_POWDER, MOVE_TOXIC},
- .level = 0,
- .ppBonuses = 0,
- .attackEV = 255,
- .speedEV = 255,
- .otId = TRAINER_HILL_OTID,
- .hpIV = 5,
- .attackIV = 5,
- .defenseIV = 5,
- .speedIV = 5,
- .spAttackIV = 5,
- .spDefenseIV = 5,
- .abilityNum = 0,
- .personality = 0x80,
- .nickname = _("VENOMOTH"),
- .friendship = 255,
- },
- [5] =
- {
- .species = SPECIES_ESPEON,
- .heldItem = ITEM_LUM_BERRY,
- .moves = {MOVE_SKILL_SWAP, MOVE_PSYBEAM, MOVE_SWIFT, MOVE_ATTRACT},
- .level = 0,
- .ppBonuses = 0,
- .speedEV = 255,
- .spAttackEV = 255,
- .otId = TRAINER_HILL_OTID,
- .hpIV = 5,
- .attackIV = 5,
- .defenseIV = 5,
- .speedIV = 5,
- .spAttackIV = 5,
- .spDefenseIV = 5,
- .abilityNum = 0,
- .personality = 0xF,
- .nickname = _("ESPEON"),
- .friendship = 255,
- },
+ .species = SPECIES_ALAKAZAM,
+ .heldItem = ITEM_PETAYA_BERRY,
+ .moves = {MOVE_SKILL_SWAP, MOVE_FIRE_PUNCH, MOVE_ICE_PUNCH, MOVE_REFLECT},
+ .level = 0,
+ .ppBonuses = 0,
+ .speedEV = 255,
+ .spAttackEV = 255,
+ .otId = TRAINER_HILL_OTID,
+ .hpIV = 5,
+ .attackIV = 5,
+ .defenseIV = 5,
+ .speedIV = 5,
+ .spAttackIV = 5,
+ .spDefenseIV = 5,
+ .abilityNum = 0,
+ .personality = 0x41,
+ .nickname = _("ALAKAZAM"),
+ .friendship = 255,
+ },
+ [1] =
+ {
+ .species = SPECIES_BLISSEY,
+ .heldItem = ITEM_LEFTOVERS,
+ .moves = {MOVE_SKILL_SWAP, MOVE_EGG_BOMB, MOVE_THUNDERBOLT, MOVE_SING},
+ .level = 0,
+ .ppBonuses = 0,
+ .defenseEV = 255,
+ .spAttackEV = 155,
+ .spDefenseEV = 100,
+ .otId = TRAINER_HILL_OTID,
+ .hpIV = 5,
+ .attackIV = 5,
+ .defenseIV = 5,
+ .speedIV = 5,
+ .spAttackIV = 5,
+ .spDefenseIV = 5,
+ .abilityNum = 1,
+ .personality = 0xF,
+ .nickname = _("BLISSEY"),
+ .friendship = 255,
+ },
+ [2] =
+ {
+ .species = SPECIES_GRUMPIG,
+ .heldItem = ITEM_TWISTED_SPOON,
+ .moves = {MOVE_SKILL_SWAP, MOVE_PSYCHIC, MOVE_CONFUSE_RAY, MOVE_REST},
+ .level = 0,
+ .ppBonuses = 0,
+ .hpEV = 110,
+ .defenseEV = 200,
+ .spAttackEV = 200,
+ .otId = TRAINER_HILL_OTID,
+ .hpIV = 5,
+ .attackIV = 5,
+ .defenseIV = 5,
+ .speedIV = 5,
+ .spAttackIV = 5,
+ .spDefenseIV = 5,
+ .abilityNum = 0,
+ .personality = 0x8C,
+ .nickname = _("GRUMPIG"),
+ .friendship = 255,
+ },
+ [3] =
+ {
+ .species = SPECIES_GARDEVOIR,
+ .heldItem = ITEM_SALAC_BERRY,
+ .moves = {MOVE_SKILL_SWAP, MOVE_DREAM_EATER, MOVE_HYPNOSIS, MOVE_PROTECT},
+ .level = 0,
+ .ppBonuses = 0,
+ .speedEV = 255,
+ .spAttackEV = 255,
+ .otId = TRAINER_HILL_OTID,
+ .hpIV = 5,
+ .attackIV = 5,
+ .defenseIV = 5,
+ .speedIV = 5,
+ .spAttackIV = 5,
+ .spDefenseIV = 5,
+ .abilityNum = 1,
+ .personality = 0xF,
+ .nickname = _("GARDEVOIR"),
+ .friendship = 255,
+ },
+ [4] =
+ {
+ .species = SPECIES_VENOMOTH,
+ .heldItem = ITEM_BRIGHT_POWDER,
+ .moves = {MOVE_SKILL_SWAP, MOVE_SIGNAL_BEAM, MOVE_SLEEP_POWDER, MOVE_TOXIC},
+ .level = 0,
+ .ppBonuses = 0,
+ .attackEV = 255,
+ .speedEV = 255,
+ .otId = TRAINER_HILL_OTID,
+ .hpIV = 5,
+ .attackIV = 5,
+ .defenseIV = 5,
+ .speedIV = 5,
+ .spAttackIV = 5,
+ .spDefenseIV = 5,
+ .abilityNum = 0,
+ .personality = 0x80,
+ .nickname = _("VENOMOTH"),
+ .friendship = 255,
+ },
+ [5] =
+ {
+ .species = SPECIES_ESPEON,
+ .heldItem = ITEM_LUM_BERRY,
+ .moves = {MOVE_SKILL_SWAP, MOVE_PSYBEAM, MOVE_SWIFT, MOVE_ATTRACT},
+ .level = 0,
+ .ppBonuses = 0,
+ .speedEV = 255,
+ .spAttackEV = 255,
+ .otId = TRAINER_HILL_OTID,
+ .hpIV = 5,
+ .attackIV = 5,
+ .defenseIV = 5,
+ .speedIV = 5,
+ .spAttackIV = 5,
+ .spDefenseIV = 5,
+ .abilityNum = 0,
+ .personality = 0xF,
+ .nickname = _("ESPEON"),
+ .friendship = 255,
},
},
- [1] =
+ },
+ [1] =
+ {
+ .name = _("KRISTINA"),
+ .facilityClass = FACILITY_CLASS_AROMA_LADY,
+ .unused = 0,
+ .speechBefore = {EC_WORD_IT_S, EC_WORD_HOT, EC_WORD_ELLIPSIS, EC_WORD_WHAT, EC_WORD_A, EC_WORD_STENCH},
+ .speechWin = {EC_WORD_I, EC_WORD_REALLY, EC_WORD_LIKE, EC_WORD_AN, EC_WORD_OFFENSIVE, EC_WORD_STENCH},
+ .speechLose = {EC_WORD_I, EC_MOVE2(COVET), EC_WORD_ANY, EC_WORD_STRONG, EC_WORD_STENCH, 0xFFFF},
+ .speechAfter = {EC_WORD_MY, EC_WORD_SENSE, EC_WORD_OF, EC_WORD_SMELL, EC_WORD_ISN_T, EC_WORD_NORMAL},
+ .mons =
{
- .name = _("KRISTINA"),
- .facilityClass = FACILITY_CLASS_AROMA_LADY,
- .unused = 0,
- .speechBefore = {EC_WORD_IT_S, EC_WORD_HOT, EC_WORD_ELLIPSIS, EC_WORD_WHAT, EC_WORD_A, EC_WORD_STENCH},
- .speechWin = {EC_WORD_I, EC_WORD_REALLY, EC_WORD_LIKE, EC_WORD_AN, EC_WORD_OFFENSIVE, EC_WORD_STENCH},
- .speechLose = {EC_WORD_I, EC_MOVE2(COVET), EC_WORD_ANY, EC_WORD_STRONG, EC_WORD_STENCH, 0xFFFF},
- .speechAfter = {EC_WORD_MY, EC_WORD_SENSE, EC_WORD_OF, EC_WORD_SMELL, EC_WORD_ISN_T, EC_WORD_NORMAL},
- .mons =
+ [0] =
{
- [0] =
- {
- .species = SPECIES_WEEZING,
- .heldItem = ITEM_POISON_BARB,
- .moves = {MOVE_TOXIC, MOVE_SLUDGE_BOMB, MOVE_SMOKESCREEN, MOVE_HAZE},
- .level = 0,
- .ppBonuses = 0,
- .hpEV = 255,
- .attackEV = 255,
- .otId = TRAINER_HILL_OTID,
- .hpIV = 15,
- .attackIV = 15,
- .defenseIV = 15,
- .speedIV = 15,
- .spAttackIV = 15,
- .spDefenseIV = 15,
- .abilityNum = 0,
- .personality = 0x3,
- .nickname = _("WEEZING"),
- .friendship = 255,
- },
- [1] =
- {
- .species = SPECIES_GLOOM,
- .heldItem = ITEM_MIRACLE_SEED,
- .moves = {MOVE_PETAL_DANCE, MOVE_SYNTHESIS, MOVE_SUNNY_DAY, MOVE_SOLAR_BEAM},
- .level = 0,
- .ppBonuses = 0,
- .speedEV = 255,
- .spAttackEV = 255,
- .otId = TRAINER_HILL_OTID,
- .hpIV = 15,
- .attackIV = 15,
- .defenseIV = 15,
- .speedIV = 15,
- .spAttackIV = 15,
- .spDefenseIV = 15,
- .abilityNum = 0,
- .personality = 0x8C,
- .nickname = _("GLOOM"),
- .friendship = 255,
- },
- [2] =
- {
- .species = SPECIES_MUK,
- .heldItem = ITEM_BRIGHT_POWDER,
- .moves = {MOVE_SCREECH, MOVE_DISABLE, MOVE_SLUDGE_BOMB, MOVE_ACID_ARMOR},
- .level = 0,
- .ppBonuses = 0,
- .hpEV = 255,
- .attackEV = 255,
- .otId = TRAINER_HILL_OTID,
- .hpIV = 15,
- .attackIV = 15,
- .defenseIV = 15,
- .speedIV = 15,
- .spAttackIV = 15,
- .spDefenseIV = 15,
- .abilityNum = 0,
- .personality = 0x3,
- .nickname = _("MUK"),
- .friendship = 255,
- },
- [3] =
- {
- .species = SPECIES_TROPIUS,
- .heldItem = ITEM_WHITE_HERB,
- .moves = {MOVE_SUNNY_DAY, MOVE_SOLAR_BEAM, MOVE_SWEET_SCENT, MOVE_AERIAL_ACE},
- .level = 0,
- .ppBonuses = 0,
- .attackEV = 120,
- .speedEV = 255,
- .spAttackEV = 135,
- .otId = TRAINER_HILL_OTID,
- .hpIV = 15,
- .attackIV = 15,
- .defenseIV = 15,
- .speedIV = 15,
- .spAttackIV = 15,
- .spDefenseIV = 15,
- .abilityNum = 0,
- .personality = 0x83,
- .nickname = _("TROPIUS"),
- .friendship = 255,
- },
- [4] =
- {
- .species = SPECIES_BELLOSSOM,
- .heldItem = ITEM_MENTAL_HERB,
- .moves = {MOVE_SWEET_SCENT, MOVE_PETAL_DANCE, MOVE_STUN_SPORE, MOVE_SLUDGE_BOMB},
- .level = 0,
- .ppBonuses = 0,
- .hpEV = 255,
- .speedEV = 255,
- .otId = TRAINER_HILL_OTID,
- .hpIV = 15,
- .attackIV = 15,
- .defenseIV = 15,
- .speedIV = 15,
- .spAttackIV = 15,
- .spDefenseIV = 15,
- .abilityNum = 0,
- .personality = 0x6,
- .nickname = _("BELLOSSOM"),
- .friendship = 255,
- },
- [5] =
- {
- .species = SPECIES_MEGANIUM,
- .heldItem = ITEM_MIRACLE_SEED,
- .moves = {MOVE_RAZOR_LEAF, MOVE_BODY_SLAM, MOVE_LEECH_SEED, MOVE_SYNTHESIS},
- .level = 0,
- .ppBonuses = 0,
- .attackEV = 200,
- .speedEV = 110,
- .spAttackEV = 200,
- .otId = TRAINER_HILL_OTID,
- .hpIV = 15,
- .attackIV = 15,
- .defenseIV = 15,
- .speedIV = 15,
- .spAttackIV = 15,
- .spDefenseIV = 15,
- .abilityNum = 0,
- .personality = 0x1F,
- .nickname = _("MEGANIUM"),
- .friendship = 255,
- },
+ .species = SPECIES_WEEZING,
+ .heldItem = ITEM_POISON_BARB,
+ .moves = {MOVE_TOXIC, MOVE_SLUDGE_BOMB, MOVE_SMOKESCREEN, MOVE_HAZE},
+ .level = 0,
+ .ppBonuses = 0,
+ .hpEV = 255,
+ .attackEV = 255,
+ .otId = TRAINER_HILL_OTID,
+ .hpIV = 15,
+ .attackIV = 15,
+ .defenseIV = 15,
+ .speedIV = 15,
+ .spAttackIV = 15,
+ .spDefenseIV = 15,
+ .abilityNum = 0,
+ .personality = 0x3,
+ .nickname = _("WEEZING"),
+ .friendship = 255,
+ },
+ [1] =
+ {
+ .species = SPECIES_GLOOM,
+ .heldItem = ITEM_MIRACLE_SEED,
+ .moves = {MOVE_PETAL_DANCE, MOVE_SYNTHESIS, MOVE_SUNNY_DAY, MOVE_SOLAR_BEAM},
+ .level = 0,
+ .ppBonuses = 0,
+ .speedEV = 255,
+ .spAttackEV = 255,
+ .otId = TRAINER_HILL_OTID,
+ .hpIV = 15,
+ .attackIV = 15,
+ .defenseIV = 15,
+ .speedIV = 15,
+ .spAttackIV = 15,
+ .spDefenseIV = 15,
+ .abilityNum = 0,
+ .personality = 0x8C,
+ .nickname = _("GLOOM"),
+ .friendship = 255,
+ },
+ [2] =
+ {
+ .species = SPECIES_MUK,
+ .heldItem = ITEM_BRIGHT_POWDER,
+ .moves = {MOVE_SCREECH, MOVE_DISABLE, MOVE_SLUDGE_BOMB, MOVE_ACID_ARMOR},
+ .level = 0,
+ .ppBonuses = 0,
+ .hpEV = 255,
+ .attackEV = 255,
+ .otId = TRAINER_HILL_OTID,
+ .hpIV = 15,
+ .attackIV = 15,
+ .defenseIV = 15,
+ .speedIV = 15,
+ .spAttackIV = 15,
+ .spDefenseIV = 15,
+ .abilityNum = 0,
+ .personality = 0x3,
+ .nickname = _("MUK"),
+ .friendship = 255,
+ },
+ [3] =
+ {
+ .species = SPECIES_TROPIUS,
+ .heldItem = ITEM_WHITE_HERB,
+ .moves = {MOVE_SUNNY_DAY, MOVE_SOLAR_BEAM, MOVE_SWEET_SCENT, MOVE_AERIAL_ACE},
+ .level = 0,
+ .ppBonuses = 0,
+ .attackEV = 120,
+ .speedEV = 255,
+ .spAttackEV = 135,
+ .otId = TRAINER_HILL_OTID,
+ .hpIV = 15,
+ .attackIV = 15,
+ .defenseIV = 15,
+ .speedIV = 15,
+ .spAttackIV = 15,
+ .spDefenseIV = 15,
+ .abilityNum = 0,
+ .personality = 0x83,
+ .nickname = _("TROPIUS"),
+ .friendship = 255,
+ },
+ [4] =
+ {
+ .species = SPECIES_BELLOSSOM,
+ .heldItem = ITEM_MENTAL_HERB,
+ .moves = {MOVE_SWEET_SCENT, MOVE_PETAL_DANCE, MOVE_STUN_SPORE, MOVE_SLUDGE_BOMB},
+ .level = 0,
+ .ppBonuses = 0,
+ .hpEV = 255,
+ .speedEV = 255,
+ .otId = TRAINER_HILL_OTID,
+ .hpIV = 15,
+ .attackIV = 15,
+ .defenseIV = 15,
+ .speedIV = 15,
+ .spAttackIV = 15,
+ .spDefenseIV = 15,
+ .abilityNum = 0,
+ .personality = 0x6,
+ .nickname = _("BELLOSSOM"),
+ .friendship = 255,
+ },
+ [5] =
+ {
+ .species = SPECIES_MEGANIUM,
+ .heldItem = ITEM_MIRACLE_SEED,
+ .moves = {MOVE_RAZOR_LEAF, MOVE_BODY_SLAM, MOVE_LEECH_SEED, MOVE_SYNTHESIS},
+ .level = 0,
+ .ppBonuses = 0,
+ .attackEV = 200,
+ .speedEV = 110,
+ .spAttackEV = 200,
+ .otId = TRAINER_HILL_OTID,
+ .hpIV = 15,
+ .attackIV = 15,
+ .defenseIV = 15,
+ .speedIV = 15,
+ .spAttackIV = 15,
+ .spDefenseIV = 15,
+ .abilityNum = 0,
+ .personality = 0x1F,
+ .nickname = _("MEGANIUM"),
+ .friendship = 255,
},
},
},
+ },
+ .display = {
.data = {0x31, 0x3B, 0x3B, 0x3B, 0x39, 0x26, 0x1B, 0x1C, 0x1D, 0x25, 0x39, 0x3A, 0x3B, 0x3B, 0x3B, 0x8, 0x1F, 0x17, 0x17, 0x17, 0x17, 0x2B, 0x24, 0x24, 0x24, 0x2B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x8, 0x33, 0x17, 0x17, 0x17, 0x17, 0x2B, 0x3B, 0x3B, 0x3B, 0x2B, 0x35, 0x35, 0x3B, 0x35, 0x35, 0x8, 0x33, 0x17, 0x17, 0x17, 0x17, 0x2B, 0x3B, 0x3B, 0x3B, 0x2B, 0x2C, 0x2C, 0x3B, 0x2C, 0x2C, 0x8, 0x33, 0x17, 0x1F, 0x17, 0x17, 0x2B, 0x3B, 0x3B, 0x3B, 0x2B, 0x17, 0x17, 0x17, 0x17, 0x17, 0x8, 0x34, 0x17, 0x2C, 0x17, 0x17, 0x2B, 0x3B, 0x3B, 0x3B, 0x2C, 0x17, 0x17, 0x17, 0x17, 0x17, 0x8, 0x17, 0x17, 0x17, 0x17, 0x17, 0x2C, 0x3B, 0x3B, 0x3B, 0x3B, 0x17, 0x17, 0x17, 0x17, 0x17, 0x8, 0x1F, 0x17, 0x17, 0x17, 0x17, 0x1F, 0x17, 0x3B, 0x3B, 0x3B, 0x17, 0x17, 0x17, 0x17, 0x17, 0x8, 0x33, 0x17, 0x17, 0x17, 0x17, 0x2B, 0x3B, 0x3B, 0x3B, 0x35, 0x1F, 0x17, 0x17, 0x1F, 0x17, 0x8, 0x34, 0x17, 0x17, 0x17, 0x17, 0x2B, 0x3B, 0x3B, 0x3B, 0x2B, 0x2C, 0x3B, 0x3B, 0x2B, 0x17, 0x8, 0x17, 0x17, 0x17, 0x1F, 0x17, 0x2B, 0x3B, 0x3B, 0x3B, 0x2B, 0x17, 0x17, 0x17, 0x2C, 0x17, 0x8, 0x1F, 0x17, 0x17, 0x2C, 0x17, 0x2B, 0x3B, 0x3B, 0x3B, 0x2B, 0x17, 0x3B, 0x1F, 0x3B, 0x17, 0x8, 0x33, 0x17, 0x17, 0x17, 0x17, 0x2B, 0x3B, 0x3B, 0x3B, 0x2B, 0x17, 0x3B, 0x2B, 0x3B, 0x17, 0x8, 0x33, 0x17, 0x17, 0x17, 0x17, 0x2B, 0x35, 0x35, 0x35, 0x2B, 0x17, 0x3B, 0x2C, 0x3B, 0x17, 0x8, 0x34, 0x17, 0x17, 0x17, 0x17, 0x2C, 0x2C, 0x2C, 0x2C, 0x2C, 0x17, 0x17, 0x17, 0x17, 0x17, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8},
.unk3A0 = {0x381, 0x7C1, 0x8441, 0x8477, 0x8441, 0xA441, 0x401, 0x1, 0x8401, 0x8465, 0x445, 0x1441, 0x8449, 0x8449, 0x87C1, 0xFFFF},
.coords = {71, 167},
.direction = 0x1,
.range = 0x33,
- },
+ }
},
};
+
static const struct TrHillTag sDataTagVariety =
{
.unkField_0 = 8,
.unused1 = 1,
- .unkField_2 = 4,
- .unused3 = 0,
- .unused4 = 21,
- .unused5 = 76,
- .unused6 = 5,
- .floors =
- {
- [0] =
+ .numFloors = 4,
+ .checksum = 0x00054C15
+};
+
+static const struct TrHillFloor sDataTagVariety_floors[] = {
+ [0] =
{
.unk0 = 0x29,
.unk1 = 0x2A,
.trainers =
- {
- [0] =
{
- .name = _("TERRANCE"),
- .facilityClass = FACILITY_CLASS_GENTLEMAN,
- .unused = 0,
- .speechBefore = {EC_WORD_GOOD, EC_WORD_CHILDREN, EC_WORD_WILL, EC_WORD_GET, EC_WORD_A, EC_MOVE2(PRESENT)},
- .speechWin = {EC_WORD_THANK_YOU, EC_WORD_MY, EC_WORD_VICTORY, EC_WORD_IS, EC_WORD_YOUR, EC_MOVE2(PRESENT)},
- .speechLose = {EC_WORD_THAT_WAS, EC_WORD_MY, EC_MOVE2(PRESENT), EC_WORD_TO, EC_WORD_YOU, 0xFFFF},
- .speechAfter = {EC_WORD_WELL_THEN, EC_WORD_CONGRATS, EC_WORD_MY, EC_WORD_FRIEND, 0xFFFF, 0xFFFF},
- .mons =
- {
- [0] =
- {
- .species = SPECIES_DELIBIRD,
- .heldItem = ITEM_SITRUS_BERRY,
- .moves = {MOVE_PRESENT, MOVE_SPLASH, MOVE_HAIL, MOVE_PROTECT},
- .level = 0,
- .ppBonuses = 0,
- .attackEV = 255,
- .speedEV = 255,
- .otId = TRAINER_HILL_OTID,
- .hpIV = 15,
- .attackIV = 15,
- .defenseIV = 15,
- .speedIV = 15,
- .spAttackIV = 15,
- .spDefenseIV = 15,
- .abilityNum = 1,
- .personality = 0x8A,
- .nickname = _("DELIBIRD"),
- .friendship = 255,
+ [0] =
+ {
+ .name = _("TERRANCE"),
+ .facilityClass = FACILITY_CLASS_GENTLEMAN,
+ .unused = 0,
+ .speechBefore = {EC_WORD_GOOD, EC_WORD_CHILDREN, EC_WORD_WILL, EC_WORD_GET, EC_WORD_A, EC_MOVE2(PRESENT)},
+ .speechWin = {EC_WORD_THANK_YOU, EC_WORD_MY, EC_WORD_VICTORY, EC_WORD_IS, EC_WORD_YOUR, EC_MOVE2(PRESENT)},
+ .speechLose = {EC_WORD_THAT_WAS, EC_WORD_MY, EC_MOVE2(PRESENT), EC_WORD_TO, EC_WORD_YOU, 0xFFFF},
+ .speechAfter = {EC_WORD_WELL_THEN, EC_WORD_CONGRATS, EC_WORD_MY, EC_WORD_FRIEND, 0xFFFF, 0xFFFF},
+ .mons =
+ {
+ [0] =
+ {
+ .species = SPECIES_DELIBIRD,
+ .heldItem = ITEM_SITRUS_BERRY,
+ .moves = {MOVE_PRESENT, MOVE_SPLASH, MOVE_HAIL, MOVE_PROTECT},
+ .level = 0,
+ .ppBonuses = 0,
+ .attackEV = 255,
+ .speedEV = 255,
+ .otId = TRAINER_HILL_OTID,
+ .hpIV = 15,
+ .attackIV = 15,
+ .defenseIV = 15,
+ .speedIV = 15,
+ .spAttackIV = 15,
+ .spDefenseIV = 15,
+ .abilityNum = 1,
+ .personality = 0x8A,
+ .nickname = _("DELIBIRD"),
+ .friendship = 255,
+ },
+ [1] =
+ {
+ .species = SPECIES_CLEFAIRY,
+ .heldItem = ITEM_SITRUS_BERRY,
+ .moves = {MOVE_PRESENT, MOVE_COSMIC_POWER, MOVE_LIGHT_SCREEN, MOVE_MOONLIGHT},
+ .level = 0,
+ .ppBonuses = 0,
+ .attackEV = 255,
+ .speedEV = 255,
+ .otId = TRAINER_HILL_OTID,
+ .hpIV = 15,
+ .attackIV = 15,
+ .defenseIV = 15,
+ .speedIV = 15,
+ .spAttackIV = 15,
+ .spDefenseIV = 15,
+ .abilityNum = 0,
+ .personality = 0xD,
+ .nickname = _("CLEFAIRY"),
+ .friendship = 255,
+ },
+ [2] =
+ {
+ .species = SPECIES_PIKACHU,
+ .heldItem = ITEM_SITRUS_BERRY,
+ .moves = {MOVE_PRESENT, MOVE_GROWL, MOVE_TAIL_WHIP, MOVE_AGILITY},
+ .level = 0,
+ .ppBonuses = 0,
+ .attackEV = 255,
+ .speedEV = 255,
+ .otId = TRAINER_HILL_OTID,
+ .hpIV = 15,
+ .attackIV = 15,
+ .defenseIV = 15,
+ .speedIV = 15,
+ .spAttackIV = 15,
+ .spDefenseIV = 15,
+ .abilityNum = 0,
+ .personality = 0xD,
+ .nickname = _("PIKACHU"),
+ .friendship = 255,
+ },
+ [3] =
+ {
+ .species = SPECIES_MARILL,
+ .heldItem = ITEM_SITRUS_BERRY,
+ .moves = {MOVE_PRESENT, MOVE_DEFENSE_CURL, MOVE_TAIL_WHIP, MOVE_ENDURE},
+ .level = 0,
+ .ppBonuses = 0,
+ .attackEV = 255,
+ .speedEV = 255,
+ .otId = TRAINER_HILL_OTID,
+ .hpIV = 15,
+ .attackIV = 15,
+ .defenseIV = 15,
+ .speedIV = 15,
+ .spAttackIV = 15,
+ .spDefenseIV = 15,
+ .abilityNum = 1,
+ .personality = 0x8A,
+ .nickname = _("MARILL"),
+ .friendship = 255,
+ },
+ [4] =
+ {
+ .species = SPECIES_JIGGLYPUFF,
+ .heldItem = ITEM_SITRUS_BERRY,
+ .moves = {MOVE_PRESENT, MOVE_SING, MOVE_DISABLE, MOVE_REST},
+ .level = 0,
+ .ppBonuses = 0,
+ .attackEV = 255,
+ .speedEV = 255,
+ .otId = TRAINER_HILL_OTID,
+ .hpIV = 15,
+ .attackIV = 15,
+ .defenseIV = 15,
+ .speedIV = 15,
+ .spAttackIV = 15,
+ .spDefenseIV = 15,
+ .abilityNum = 0,
+ .personality = 0xD,
+ .nickname = _("JIGGLYPUFF"),
+ .friendship = 255,
+ },
+ [5] =
+ {
+ .species = SPECIES_TOGETIC,
+ .heldItem = ITEM_SITRUS_BERRY,
+ .moves = {MOVE_PRESENT, MOVE_CHARM, MOVE_SWEET_KISS, MOVE_WISH},
+ .level = 0,
+ .ppBonuses = 0,
+ .attackEV = 255,
+ .speedEV = 255,
+ .otId = TRAINER_HILL_OTID,
+ .hpIV = 15,
+ .attackIV = 15,
+ .defenseIV = 15,
+ .speedIV = 15,
+ .spAttackIV = 15,
+ .spDefenseIV = 15,
+ .abilityNum = 1,
+ .personality = 0x26,
+ .nickname = _("TOGETIC"),
+ .friendship = 255,
+ },
+ },
+ },
+ [1] =
+ {
+ .name = _("ELIZABETH"),
+ .facilityClass = FACILITY_CLASS_LADY,
+ .unused = 0,
+ .speechBefore = {EC_WORD_CAN, EC_WORD_YOU, EC_WORD_SENSE, EC_WORD_ME, EC_MOVE(FOCUS_ENERGY), EC_WORD_QUES},
+ .speechWin = {EC_WORD_THAT_S, EC_WORD_ABOUT, EC_WORD_RIGHT, EC_WORD_I, EC_WORD_WOULD, EC_WORD_THINK},
+ .speechLose = {EC_WORD_THINGS, EC_WORD_DON_T, EC_WORD_ALWAYS, EC_WORD_WORK, EC_WORD_OUT, 0xFFFF},
+ .speechAfter = {EC_WORD_I_AM, EC_WORD_FEELING, EC_WORD_LONESOME, EC_WORD_AND, EC_WORD_SAD, EC_WORD_NOW},
+ .mons =
+ {
+ [0] =
+ {
+ .species = SPECIES_WIGGLYTUFF,
+ .heldItem = ITEM_SILK_SCARF,
+ .moves = {MOVE_ROLLOUT, MOVE_DEFENSE_CURL, MOVE_SING, MOVE_DREAM_EATER},
+ .level = 0,
+ .ppBonuses = 0,
+ .hpEV = 255,
+ .speedEV = 255,
+ .otId = TRAINER_HILL_OTID,
+ .hpIV = 5,
+ .attackIV = 5,
+ .defenseIV = 5,
+ .speedIV = 5,
+ .spAttackIV = 5,
+ .spDefenseIV = 5,
+ .abilityNum = 0,
+ .personality = 0xC1,
+ .nickname = _("WIGGLYTUFF"),
+ .friendship = 255,
+ },
+ [1] =
+ {
+ .species = SPECIES_SABLEYE,
+ .heldItem = ITEM_SILK_SCARF,
+ .moves = {MOVE_ASTONISH, MOVE_FAINT_ATTACK, MOVE_DETECT, MOVE_CONFUSE_RAY},
+ .level = 0,
+ .ppBonuses = 0,
+ .hpEV = 255,
+ .speedEV = 255,
+ .otId = TRAINER_HILL_OTID,
+ .hpIV = 5,
+ .attackIV = 5,
+ .defenseIV = 5,
+ .speedIV = 5,
+ .spAttackIV = 5,
+ .spDefenseIV = 5,
+ .abilityNum = 0,
+ .personality = 0x87,
+ .nickname = _("SABLEYE"),
+ .friendship = 255,
+ },
+ [2] =
+ {
+ .species = SPECIES_GRUMPIG,
+ .heldItem = ITEM_SILK_SCARF,
+ .moves = {MOVE_PSYBEAM, MOVE_MAGIC_COAT, MOVE_BOUNCE, MOVE_FUTURE_SIGHT},
+ .level = 0,
+ .ppBonuses = 0,
+ .hpEV = 255,
+ .speedEV = 255,
+ .otId = TRAINER_HILL_OTID,
+ .hpIV = 5,
+ .attackIV = 5,
+ .defenseIV = 5,
+ .speedIV = 5,
+ .spAttackIV = 5,
+ .spDefenseIV = 5,
+ .abilityNum = 0,
+ .personality = 0xA,
+ .nickname = _("GRUMPIG"),
+ .friendship = 255,
+ },
+ [3] =
+ {
+ .species = SPECIES_CORSOLA,
+ .heldItem = ITEM_SILK_SCARF,
+ .moves = {MOVE_BUBBLE_BEAM, MOVE_ROCK_BLAST, MOVE_REFLECT, MOVE_LIGHT_SCREEN},
+ .level = 0,
+ .ppBonuses = 0,
+ .hpEV = 255,
+ .speedEV = 255,
+ .otId = TRAINER_HILL_OTID,
+ .hpIV = 5,
+ .attackIV = 5,
+ .defenseIV = 5,
+ .speedIV = 5,
+ .spAttackIV = 5,
+ .spDefenseIV = 5,
+ .abilityNum = 0,
+ .personality = 0x12,
+ .nickname = _("CORSOLA"),
+ .friendship = 255,
+ },
+ [4] =
+ {
+ .species = SPECIES_CLAMPERL,
+ .heldItem = ITEM_SILK_SCARF,
+ .moves = {MOVE_WHIRLPOOL, MOVE_IRON_DEFENSE, MOVE_ENDURE, MOVE_CONFUSE_RAY},
+ .level = 0,
+ .ppBonuses = 0,
+ .hpEV = 255,
+ .speedEV = 255,
+ .otId = TRAINER_HILL_OTID,
+ .hpIV = 5,
+ .attackIV = 5,
+ .defenseIV = 5,
+ .speedIV = 5,
+ .spAttackIV = 5,
+ .spDefenseIV = 5,
+ .abilityNum = 0,
+ .personality = 0xA,
+ .nickname = _("CLAMPERL"),
+ .friendship = 255,
+ },
+ [5] =
+ {
+ .species = SPECIES_STARMIE,
+ .heldItem = ITEM_SILK_SCARF,
+ .moves = {MOVE_DIVE, MOVE_ICY_WIND, MOVE_SWIFT, MOVE_SKILL_SWAP},
+ .level = 0,
+ .ppBonuses = 0,
+ .hpEV = 255,
+ .speedEV = 255,
+ .otId = TRAINER_HILL_OTID,
+ .hpIV = 5,
+ .attackIV = 5,
+ .defenseIV = 5,
+ .speedIV = 5,
+ .spAttackIV = 5,
+ .spDefenseIV = 5,
+ .abilityNum = 0,
+ .personality = 0xA,
+ .nickname = _("STARMIE"),
+ .friendship = 255,
+ },
+ },
},
- [1] =
- {
- .species = SPECIES_CLEFAIRY,
- .heldItem = ITEM_SITRUS_BERRY,
- .moves = {MOVE_PRESENT, MOVE_COSMIC_POWER, MOVE_LIGHT_SCREEN, MOVE_MOONLIGHT},
- .level = 0,
- .ppBonuses = 0,
- .attackEV = 255,
- .speedEV = 255,
- .otId = TRAINER_HILL_OTID,
- .hpIV = 15,
- .attackIV = 15,
- .defenseIV = 15,
- .speedIV = 15,
- .spAttackIV = 15,
- .spDefenseIV = 15,
- .abilityNum = 0,
- .personality = 0xD,
- .nickname = _("CLEFAIRY"),
- .friendship = 255,
- },
- [2] =
- {
- .species = SPECIES_PIKACHU,
- .heldItem = ITEM_SITRUS_BERRY,
- .moves = {MOVE_PRESENT, MOVE_GROWL, MOVE_TAIL_WHIP, MOVE_AGILITY},
- .level = 0,
- .ppBonuses = 0,
- .attackEV = 255,
- .speedEV = 255,
- .otId = TRAINER_HILL_OTID,
- .hpIV = 15,
- .attackIV = 15,
- .defenseIV = 15,
- .speedIV = 15,
- .spAttackIV = 15,
- .spDefenseIV = 15,
- .abilityNum = 0,
- .personality = 0xD,
- .nickname = _("PIKACHU"),
- .friendship = 255,
- },
- [3] =
- {
- .species = SPECIES_MARILL,
- .heldItem = ITEM_SITRUS_BERRY,
- .moves = {MOVE_PRESENT, MOVE_DEFENSE_CURL, MOVE_TAIL_WHIP, MOVE_ENDURE},
- .level = 0,
- .ppBonuses = 0,
- .attackEV = 255,
- .speedEV = 255,
- .otId = TRAINER_HILL_OTID,
- .hpIV = 15,
- .attackIV = 15,
- .defenseIV = 15,
- .speedIV = 15,
- .spAttackIV = 15,
- .spDefenseIV = 15,
- .abilityNum = 1,
- .personality = 0x8A,
- .nickname = _("MARILL"),
- .friendship = 255,
- },
- [4] =
- {
- .species = SPECIES_JIGGLYPUFF,
- .heldItem = ITEM_SITRUS_BERRY,
- .moves = {MOVE_PRESENT, MOVE_SING, MOVE_DISABLE, MOVE_REST},
- .level = 0,
- .ppBonuses = 0,
- .attackEV = 255,
- .speedEV = 255,
- .otId = TRAINER_HILL_OTID,
- .hpIV = 15,
- .attackIV = 15,
- .defenseIV = 15,
- .speedIV = 15,
- .spAttackIV = 15,
- .spDefenseIV = 15,
- .abilityNum = 0,
- .personality = 0xD,
- .nickname = _("JIGGLYPUFF"),
- .friendship = 255,
- },
- [5] =
- {
- .species = SPECIES_TOGETIC,
- .heldItem = ITEM_SITRUS_BERRY,
- .moves = {MOVE_PRESENT, MOVE_CHARM, MOVE_SWEET_KISS, MOVE_WISH},
- .level = 0,
- .ppBonuses = 0,
- .attackEV = 255,
- .speedEV = 255,
- .otId = TRAINER_HILL_OTID,
- .hpIV = 15,
- .attackIV = 15,
- .defenseIV = 15,
- .speedIV = 15,
- .spAttackIV = 15,
- .spDefenseIV = 15,
- .abilityNum = 1,
- .personality = 0x26,
- .nickname = _("TOGETIC"),
- .friendship = 255,
- },
- },
- },
- [1] =
- {
- .name = _("ELIZABETH"),
- .facilityClass = FACILITY_CLASS_LADY,
- .unused = 0,
- .speechBefore = {EC_WORD_CAN, EC_WORD_YOU, EC_WORD_SENSE, EC_WORD_ME, EC_MOVE(FOCUS_ENERGY), EC_WORD_QUES},
- .speechWin = {EC_WORD_THAT_S, EC_WORD_ABOUT, EC_WORD_RIGHT, EC_WORD_I, EC_WORD_WOULD, EC_WORD_THINK},
- .speechLose = {EC_WORD_THINGS, EC_WORD_DON_T, EC_WORD_ALWAYS, EC_WORD_WORK, EC_WORD_OUT, 0xFFFF},
- .speechAfter = {EC_WORD_I_AM, EC_WORD_FEELING, EC_WORD_LONESOME, EC_WORD_AND, EC_WORD_SAD, EC_WORD_NOW},
- .mons =
- {
- [0] =
- {
- .species = SPECIES_WIGGLYTUFF,
- .heldItem = ITEM_SILK_SCARF,
- .moves = {MOVE_ROLLOUT, MOVE_DEFENSE_CURL, MOVE_SING, MOVE_DREAM_EATER},
- .level = 0,
- .ppBonuses = 0,
- .hpEV = 255,
- .speedEV = 255,
- .otId = TRAINER_HILL_OTID,
- .hpIV = 5,
- .attackIV = 5,
- .defenseIV = 5,
- .speedIV = 5,
- .spAttackIV = 5,
- .spDefenseIV = 5,
- .abilityNum = 0,
- .personality = 0xC1,
- .nickname = _("WIGGLYTUFF"),
- .friendship = 255,
- },
- [1] =
- {
- .species = SPECIES_SABLEYE,
- .heldItem = ITEM_SILK_SCARF,
- .moves = {MOVE_ASTONISH, MOVE_FAINT_ATTACK, MOVE_DETECT, MOVE_CONFUSE_RAY},
- .level = 0,
- .ppBonuses = 0,
- .hpEV = 255,
- .speedEV = 255,
- .otId = TRAINER_HILL_OTID,
- .hpIV = 5,
- .attackIV = 5,
- .defenseIV = 5,
- .speedIV = 5,
- .spAttackIV = 5,
- .spDefenseIV = 5,
- .abilityNum = 0,
- .personality = 0x87,
- .nickname = _("SABLEYE"),
- .friendship = 255,
- },
- [2] =
- {
- .species = SPECIES_GRUMPIG,
- .heldItem = ITEM_SILK_SCARF,
- .moves = {MOVE_PSYBEAM, MOVE_MAGIC_COAT, MOVE_BOUNCE, MOVE_FUTURE_SIGHT},
- .level = 0,
- .ppBonuses = 0,
- .hpEV = 255,
- .speedEV = 255,
- .otId = TRAINER_HILL_OTID,
- .hpIV = 5,
- .attackIV = 5,
- .defenseIV = 5,
- .speedIV = 5,
- .spAttackIV = 5,
- .spDefenseIV = 5,
- .abilityNum = 0,
- .personality = 0xA,
- .nickname = _("GRUMPIG"),
- .friendship = 255,
- },
- [3] =
- {
- .species = SPECIES_CORSOLA,
- .heldItem = ITEM_SILK_SCARF,
- .moves = {MOVE_BUBBLE_BEAM, MOVE_ROCK_BLAST, MOVE_REFLECT, MOVE_LIGHT_SCREEN},
- .level = 0,
- .ppBonuses = 0,
- .hpEV = 255,
- .speedEV = 255,
- .otId = TRAINER_HILL_OTID,
- .hpIV = 5,
- .attackIV = 5,
- .defenseIV = 5,
- .speedIV = 5,
- .spAttackIV = 5,
- .spDefenseIV = 5,
- .abilityNum = 0,
- .personality = 0x12,
- .nickname = _("CORSOLA"),
- .friendship = 255,
- },
- [4] =
- {
- .species = SPECIES_CLAMPERL,
- .heldItem = ITEM_SILK_SCARF,
- .moves = {MOVE_WHIRLPOOL, MOVE_IRON_DEFENSE, MOVE_ENDURE, MOVE_CONFUSE_RAY},
- .level = 0,
- .ppBonuses = 0,
- .hpEV = 255,
- .speedEV = 255,
- .otId = TRAINER_HILL_OTID,
- .hpIV = 5,
- .attackIV = 5,
- .defenseIV = 5,
- .speedIV = 5,
- .spAttackIV = 5,
- .spDefenseIV = 5,
- .abilityNum = 0,
- .personality = 0xA,
- .nickname = _("CLAMPERL"),
- .friendship = 255,
- },
- [5] =
- {
- .species = SPECIES_STARMIE,
- .heldItem = ITEM_SILK_SCARF,
- .moves = {MOVE_DIVE, MOVE_ICY_WIND, MOVE_SWIFT, MOVE_SKILL_SWAP},
- .level = 0,
- .ppBonuses = 0,
- .hpEV = 255,
- .speedEV = 255,
- .otId = TRAINER_HILL_OTID,
- .hpIV = 5,
- .attackIV = 5,
- .defenseIV = 5,
- .speedIV = 5,
- .spAttackIV = 5,
- .spDefenseIV = 5,
- .abilityNum = 0,
- .personality = 0xA,
- .nickname = _("STARMIE"),
- .friendship = 255,
- },
- },
},
- },
- .data = {0x31, 0x3B, 0x3B, 0x3B, 0x39, 0x39, 0x13, 0x14, 0x15, 0x38, 0x39, 0x3A, 0x3B, 0x3B, 0x3B, 0x8, 0x40, 0x41, 0x41, 0x41, 0x41, 0x41, 0x42, 0x43, 0x43, 0x43, 0x43, 0x43, 0x40, 0x41, 0x41, 0x8, 0x40, 0xFB, 0x43, 0x41, 0x41, 0x41, 0x42, 0x40, 0x43, 0x41, 0x42, 0x42, 0x42, 0xFB, 0x41, 0x8, 0x40, 0x41, 0xFB, 0x41, 0x41, 0x41, 0x42, 0x40, 0x43, 0x41, 0x43, 0x43, 0xFB, 0x40, 0x41, 0x8, 0x40, 0x41, 0x41, 0xFB, 0x43, 0x41, 0x42, 0x40, 0x43, 0x43, 0x43, 0xFB, 0x41, 0x40, 0x41, 0x8, 0x40, 0x41, 0x41, 0x41, 0x42, 0x42, 0x42, 0x40, 0x43, 0x43, 0x43, 0x41, 0x41, 0x40, 0x41, 0x8, 0x40, 0x41, 0x41, 0x41, 0xFE, 0xFE, 0xFE, 0xFB, 0xFE, 0xFE, 0xFE, 0x41, 0x41, 0x40, 0x41, 0x8, 0x40, 0x41, 0x41, 0x41, 0xFE, 0xFE, 0xFE, 0xFB, 0xFE, 0xFE, 0xFE, 0x41, 0x41, 0x40, 0x41, 0x8, 0x40, 0x41, 0x42, 0x41, 0xFE, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0xFE, 0x41, 0x41, 0x40, 0x41, 0x8, 0x40, 0x41, 0x41, 0x41, 0xFE, 0xFE, 0xFE, 0xFB, 0xFE, 0xFE, 0xFE, 0x41, 0x41, 0x40, 0x41, 0x8, 0x40, 0x41, 0x41, 0x41, 0xFE, 0xFE, 0xFE, 0xFB, 0xFE, 0xFE, 0xFE, 0x41, 0x41, 0x40, 0x41, 0x8, 0x40, 0x42, 0x41, 0x43, 0x43, 0x43, 0x41, 0x40, 0x42, 0x42, 0x42, 0x42, 0x41, 0x40, 0x41, 0x8, 0x40, 0x40, 0x41, 0xFB, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0xFB, 0x41, 0x40, 0x41, 0x8, 0x40, 0x40, 0xFB, 0x43, 0x43, 0x41, 0x41, 0x41, 0x42, 0x42, 0x42, 0x42, 0xFB, 0x40, 0x41, 0x8, 0x40, 0xFB, 0x43, 0x43, 0x41, 0x41, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0xFB, 0x41, 0x8, 0x40, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x8},
- .unk3A0 = {0x381, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1},
- .coords = {133, 137},
- .direction = 0x23,
- .range = 0x33,
+ .display = {
+ .data = {0x31, 0x3B, 0x3B, 0x3B, 0x39, 0x39, 0x13, 0x14, 0x15, 0x38, 0x39, 0x3A, 0x3B, 0x3B, 0x3B, 0x8, 0x40, 0x41, 0x41, 0x41, 0x41, 0x41, 0x42, 0x43, 0x43, 0x43, 0x43, 0x43, 0x40, 0x41, 0x41, 0x8, 0x40, 0xFB, 0x43, 0x41, 0x41, 0x41, 0x42, 0x40, 0x43, 0x41, 0x42, 0x42, 0x42, 0xFB, 0x41, 0x8, 0x40, 0x41, 0xFB, 0x41, 0x41, 0x41, 0x42, 0x40, 0x43, 0x41, 0x43, 0x43, 0xFB, 0x40, 0x41, 0x8, 0x40, 0x41, 0x41, 0xFB, 0x43, 0x41, 0x42, 0x40, 0x43, 0x43, 0x43, 0xFB, 0x41, 0x40, 0x41, 0x8, 0x40, 0x41, 0x41, 0x41, 0x42, 0x42, 0x42, 0x40, 0x43, 0x43, 0x43, 0x41, 0x41, 0x40, 0x41, 0x8, 0x40, 0x41, 0x41, 0x41, 0xFE, 0xFE, 0xFE, 0xFB, 0xFE, 0xFE, 0xFE, 0x41, 0x41, 0x40, 0x41, 0x8, 0x40, 0x41, 0x41, 0x41, 0xFE, 0xFE, 0xFE, 0xFB, 0xFE, 0xFE, 0xFE, 0x41, 0x41, 0x40, 0x41, 0x8, 0x40, 0x41, 0x42, 0x41, 0xFE, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0xFE, 0x41, 0x41, 0x40, 0x41, 0x8, 0x40, 0x41, 0x41, 0x41, 0xFE, 0xFE, 0xFE, 0xFB, 0xFE, 0xFE, 0xFE, 0x41, 0x41, 0x40, 0x41, 0x8, 0x40, 0x41, 0x41, 0x41, 0xFE, 0xFE, 0xFE, 0xFB, 0xFE, 0xFE, 0xFE, 0x41, 0x41, 0x40, 0x41, 0x8, 0x40, 0x42, 0x41, 0x43, 0x43, 0x43, 0x41, 0x40, 0x42, 0x42, 0x42, 0x42, 0x41, 0x40, 0x41, 0x8, 0x40, 0x40, 0x41, 0xFB, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0xFB, 0x41, 0x40, 0x41, 0x8, 0x40, 0x40, 0xFB, 0x43, 0x43, 0x41, 0x41, 0x41, 0x42, 0x42, 0x42, 0x42, 0xFB, 0x40, 0x41, 0x8, 0x40, 0xFB, 0x43, 0x43, 0x41, 0x41, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0xFB, 0x41, 0x8, 0x40, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x8},
+ .unk3A0 = {0x381, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1},
+ .coords = {133, 137},
+ .direction = 0x23,
+ .range = 0x33,
+ }
},
- [1] =
+ [1] =
{
.unk0 = 0x2B,
.unk1 = 0x2C,
.trainers =
- {
- [0] =
{
- .name = _("ANNABELL"),
- .facilityClass = FACILITY_CLASS_PARASOL_LADY,
- .unused = 0,
- .speechBefore = {EC_WORD_HI, EC_WORD_ARE, EC_WORD_YOU, EC_WORD_FEELING, EC_WORD_UPBEAT, EC_WORD_QUES},
- .speechWin = {EC_WORD_AREN_T, EC_WORD_YOU, EC_WORD_FEELING, EC_WORD_WELL, EC_WORD_QUES, 0xFFFF},
- .speechLose = {EC_WORD_I, EC_WORD_CAN, EC_WORD_SEE, EC_WORD_YOU_RE, EC_WORD_FEELING, EC_WORD_GREAT},
- .speechAfter = {EC_WORD_YOUR, EC_WORD_POKEMON, EC_WORD_LOOK, EC_WORD_READY, EC_WORD_TO, EC_WORD_HUSTLE},
- .mons =
- {
- [0] =
- {
- .species = SPECIES_JIGGLYPUFF,
- .heldItem = ITEM_BRIGHT_POWDER,
- .moves = {MOVE_SING, MOVE_HYPER_VOICE, MOVE_ATTRACT, MOVE_NONE},
- .level = 0,
- .ppBonuses = 0,
- .hpEV = 85,
- .attackEV = 85,
- .defenseEV = 85,
- .speedEV = 85,
- .spAttackEV = 85,
- .spDefenseEV = 85,
- .otId = TRAINER_HILL_OTID,
- .hpIV = 5,
- .attackIV = 5,
- .defenseIV = 5,
- .speedIV = 5,
- .spAttackIV = 5,
- .spDefenseIV = 5,
- .abilityNum = 0,
- .personality = 0x0,
- .nickname = _("JIGGLYPUFF"),
- .friendship = 255,
- },
- [1] =
- {
- .species = SPECIES_JYNX,
- .heldItem = ITEM_BRIGHT_POWDER,
- .moves = {MOVE_PERISH_SONG, MOVE_FAKE_TEARS, MOVE_ATTRACT, MOVE_NONE},
- .level = 0,
- .ppBonuses = 0,
- .hpEV = 85,
- .attackEV = 85,
- .defenseEV = 85,
- .speedEV = 85,
- .spAttackEV = 85,
- .spDefenseEV = 85,
- .otId = TRAINER_HILL_OTID,
- .hpIV = 5,
- .attackIV = 5,
- .defenseIV = 5,
- .speedIV = 5,
- .spAttackIV = 5,
- .spDefenseIV = 5,
- .abilityNum = 0,
- .personality = 0x0,
- .nickname = _("JYNX"),
- .friendship = 255,
- },
- [2] =
- {
- .species = SPECIES_EXPLOUD,
- .heldItem = ITEM_BRIGHT_POWDER,
- .moves = {MOVE_HOWL, MOVE_HYPER_VOICE, MOVE_ATTRACT, MOVE_NONE},
- .level = 0,
- .ppBonuses = 0,
- .hpEV = 85,
- .attackEV = 85,
- .defenseEV = 85,
- .speedEV = 85,
- .spAttackEV = 85,
- .spDefenseEV = 85,
- .otId = TRAINER_HILL_OTID,
- .hpIV = 5,
- .attackIV = 5,
- .defenseIV = 5,
- .speedIV = 5,
- .spAttackIV = 5,
- .spDefenseIV = 5,
- .abilityNum = 0,
- .personality = 0x96,
- .nickname = _("EXPLOUD"),
- .friendship = 255,
- },
- [3] =
- {
- .species = SPECIES_ABSOL,
- .heldItem = ITEM_BRIGHT_POWDER,
- .moves = {MOVE_SWORDS_DANCE, MOVE_SLASH, MOVE_ATTRACT, MOVE_NONE},
- .level = 0,
- .ppBonuses = 0,
- .hpEV = 85,
- .attackEV = 85,
- .defenseEV = 85,
- .speedEV = 85,
- .spAttackEV = 85,
- .spDefenseEV = 85,
- .otId = TRAINER_HILL_OTID,
- .hpIV = 5,
- .attackIV = 5,
- .defenseIV = 5,
- .speedIV = 5,
- .spAttackIV = 5,
- .spDefenseIV = 5,
- .abilityNum = 0,
- .personality = 0x96,
- .nickname = _("ABSOL"),
- .friendship = 255,
- },
- [4] =
- {
- .species = SPECIES_PIDGEOTTO,
- .heldItem = ITEM_BRIGHT_POWDER,
- .moves = {MOVE_FEATHER_DANCE, MOVE_AERIAL_ACE, MOVE_ATTRACT, MOVE_NONE},
- .level = 0,
- .ppBonuses = 0,
- .hpEV = 85,
- .attackEV = 85,
- .defenseEV = 85,
- .speedEV = 85,
- .spAttackEV = 85,
- .spDefenseEV = 85,
- .otId = TRAINER_HILL_OTID,
- .hpIV = 5,
- .attackIV = 5,
- .defenseIV = 5,
- .speedIV = 5,
- .spAttackIV = 5,
- .spDefenseIV = 5,
- .abilityNum = 0,
- .personality = 0x96,
- .nickname = _("PIDGEOTTO"),
- .friendship = 255,
+ [0] =
+ {
+ .name = _("ANNABELL"),
+ .facilityClass = FACILITY_CLASS_PARASOL_LADY,
+ .unused = 0,
+ .speechBefore = {EC_WORD_HI, EC_WORD_ARE, EC_WORD_YOU, EC_WORD_FEELING, EC_WORD_UPBEAT, EC_WORD_QUES},
+ .speechWin = {EC_WORD_AREN_T, EC_WORD_YOU, EC_WORD_FEELING, EC_WORD_WELL, EC_WORD_QUES, 0xFFFF},
+ .speechLose = {EC_WORD_I, EC_WORD_CAN, EC_WORD_SEE, EC_WORD_YOU_RE, EC_WORD_FEELING, EC_WORD_GREAT},
+ .speechAfter = {EC_WORD_YOUR, EC_WORD_POKEMON, EC_WORD_LOOK, EC_WORD_READY, EC_WORD_TO, EC_WORD_HUSTLE},
+ .mons =
+ {
+ [0] =
+ {
+ .species = SPECIES_JIGGLYPUFF,
+ .heldItem = ITEM_BRIGHT_POWDER,
+ .moves = {MOVE_SING, MOVE_HYPER_VOICE, MOVE_ATTRACT, MOVE_NONE},
+ .level = 0,
+ .ppBonuses = 0,
+ .hpEV = 85,
+ .attackEV = 85,
+ .defenseEV = 85,
+ .speedEV = 85,
+ .spAttackEV = 85,
+ .spDefenseEV = 85,
+ .otId = TRAINER_HILL_OTID,
+ .hpIV = 5,
+ .attackIV = 5,
+ .defenseIV = 5,
+ .speedIV = 5,
+ .spAttackIV = 5,
+ .spDefenseIV = 5,
+ .abilityNum = 0,
+ .personality = 0x0,
+ .nickname = _("JIGGLYPUFF"),
+ .friendship = 255,
+ },
+ [1] =
+ {
+ .species = SPECIES_JYNX,
+ .heldItem = ITEM_BRIGHT_POWDER,
+ .moves = {MOVE_PERISH_SONG, MOVE_FAKE_TEARS, MOVE_ATTRACT, MOVE_NONE},
+ .level = 0,
+ .ppBonuses = 0,
+ .hpEV = 85,
+ .attackEV = 85,
+ .defenseEV = 85,
+ .speedEV = 85,
+ .spAttackEV = 85,
+ .spDefenseEV = 85,
+ .otId = TRAINER_HILL_OTID,
+ .hpIV = 5,
+ .attackIV = 5,
+ .defenseIV = 5,
+ .speedIV = 5,
+ .spAttackIV = 5,
+ .spDefenseIV = 5,
+ .abilityNum = 0,
+ .personality = 0x0,
+ .nickname = _("JYNX"),
+ .friendship = 255,
+ },
+ [2] =
+ {
+ .species = SPECIES_EXPLOUD,
+ .heldItem = ITEM_BRIGHT_POWDER,
+ .moves = {MOVE_HOWL, MOVE_HYPER_VOICE, MOVE_ATTRACT, MOVE_NONE},
+ .level = 0,
+ .ppBonuses = 0,
+ .hpEV = 85,
+ .attackEV = 85,
+ .defenseEV = 85,
+ .speedEV = 85,
+ .spAttackEV = 85,
+ .spDefenseEV = 85,
+ .otId = TRAINER_HILL_OTID,
+ .hpIV = 5,
+ .attackIV = 5,
+ .defenseIV = 5,
+ .speedIV = 5,
+ .spAttackIV = 5,
+ .spDefenseIV = 5,
+ .abilityNum = 0,
+ .personality = 0x96,
+ .nickname = _("EXPLOUD"),
+ .friendship = 255,
+ },
+ [3] =
+ {
+ .species = SPECIES_ABSOL,
+ .heldItem = ITEM_BRIGHT_POWDER,
+ .moves = {MOVE_SWORDS_DANCE, MOVE_SLASH, MOVE_ATTRACT, MOVE_NONE},
+ .level = 0,
+ .ppBonuses = 0,
+ .hpEV = 85,
+ .attackEV = 85,
+ .defenseEV = 85,
+ .speedEV = 85,
+ .spAttackEV = 85,
+ .spDefenseEV = 85,
+ .otId = TRAINER_HILL_OTID,
+ .hpIV = 5,
+ .attackIV = 5,
+ .defenseIV = 5,
+ .speedIV = 5,
+ .spAttackIV = 5,
+ .spDefenseIV = 5,
+ .abilityNum = 0,
+ .personality = 0x96,
+ .nickname = _("ABSOL"),
+ .friendship = 255,
+ },
+ [4] =
+ {
+ .species = SPECIES_PIDGEOTTO,
+ .heldItem = ITEM_BRIGHT_POWDER,
+ .moves = {MOVE_FEATHER_DANCE, MOVE_AERIAL_ACE, MOVE_ATTRACT, MOVE_NONE},
+ .level = 0,
+ .ppBonuses = 0,
+ .hpEV = 85,
+ .attackEV = 85,
+ .defenseEV = 85,
+ .speedEV = 85,
+ .spAttackEV = 85,
+ .spDefenseEV = 85,
+ .otId = TRAINER_HILL_OTID,
+ .hpIV = 5,
+ .attackIV = 5,
+ .defenseIV = 5,
+ .speedIV = 5,
+ .spAttackIV = 5,
+ .spDefenseIV = 5,
+ .abilityNum = 0,
+ .personality = 0x96,
+ .nickname = _("PIDGEOTTO"),
+ .friendship = 255,
+ },
+ [5] =
+ {
+ .species = SPECIES_ALTARIA,
+ .heldItem = ITEM_BRIGHT_POWDER,
+ .moves = {MOVE_DRAGON_DANCE, MOVE_AERIAL_ACE, MOVE_ATTRACT, MOVE_NONE},
+ .level = 0,
+ .ppBonuses = 0,
+ .hpEV = 85,
+ .attackEV = 85,
+ .defenseEV = 85,
+ .speedEV = 85,
+ .spAttackEV = 85,
+ .spDefenseEV = 85,
+ .otId = TRAINER_HILL_OTID,
+ .hpIV = 5,
+ .attackIV = 5,
+ .defenseIV = 5,
+ .speedIV = 5,
+ .spAttackIV = 5,
+ .spDefenseIV = 5,
+ .abilityNum = 0,
+ .personality = 0x0,
+ .nickname = _("ALTARIA"),
+ .friendship = 255,
+ },
+ },
+ },
+ [1] =
+ {
+ .name = _("COLEMAN"),
+ .facilityClass = FACILITY_CLASS_COLLECTOR,
+ .unused = 0,
+ .speechBefore = {EC_WORD_I, EC_WORD_SEEK, EC_WORD_SOMEONE, EC_WORD_AS, EC_WORD_MY, EC_WORD_IDOL},
+ .speechWin = {EC_WORD_DID, EC_WORD_MY, EC_WORD_IDOL, EC_WORD_SEE, EC_WORD_THAT, EC_WORD_QUES},
+ .speechLose = {EC_WORD_YOU_RE, EC_WORD_LIKE, EC_WORD_A, EC_MOVE(HEAL_BELL), EC_WORD_TO_ME, EC_WORD_EXCL},
+ .speechAfter = {EC_WORD_I_VE, EC_WORD_DECIDED, EC_WORD_I_CHOOSE_YOU, EC_WORD_AS, EC_WORD_MY, EC_WORD_IDOL},
+ .mons =
+ {
+ [0] =
+ {
+ .species = SPECIES_CHIMECHO,
+ .heldItem = ITEM_FOCUS_BAND,
+ .moves = {MOVE_UPROAR, MOVE_ATTRACT, MOVE_NONE, MOVE_NONE},
+ .level = 0,
+ .ppBonuses = 0,
+ .hpEV = 6,
+ .attackEV = 252,
+ .speedEV = 252,
+ .otId = TRAINER_HILL_OTID,
+ .hpIV = 5,
+ .attackIV = 5,
+ .defenseIV = 5,
+ .speedIV = 5,
+ .spAttackIV = 5,
+ .spDefenseIV = 5,
+ .abilityNum = 0,
+ .personality = 0xD,
+ .nickname = _("CHIMECHO"),
+ .friendship = 255,
+ },
+ [1] =
+ {
+ .species = SPECIES_WHISMUR,
+ .heldItem = ITEM_FOCUS_BAND,
+ .moves = {MOVE_UPROAR, MOVE_ATTRACT, MOVE_NONE, MOVE_NONE},
+ .level = 0,
+ .ppBonuses = 0,
+ .hpEV = 6,
+ .attackEV = 252,
+ .speedEV = 252,
+ .otId = TRAINER_HILL_OTID,
+ .hpIV = 5,
+ .attackIV = 5,
+ .defenseIV = 5,
+ .speedIV = 5,
+ .spAttackIV = 5,
+ .spDefenseIV = 5,
+ .abilityNum = 0,
+ .personality = 0xD,
+ .nickname = _("WHISMUR"),
+ .friendship = 255,
+ },
+ [2] =
+ {
+ .species = SPECIES_YANMA,
+ .heldItem = ITEM_FOCUS_BAND,
+ .moves = {MOVE_UPROAR, MOVE_ATTRACT, MOVE_NONE, MOVE_NONE},
+ .level = 0,
+ .ppBonuses = 0,
+ .hpEV = 6,
+ .attackEV = 252,
+ .speedEV = 252,
+ .otId = TRAINER_HILL_OTID,
+ .hpIV = 5,
+ .attackIV = 5,
+ .defenseIV = 5,
+ .speedIV = 5,
+ .spAttackIV = 5,
+ .spDefenseIV = 5,
+ .abilityNum = 0,
+ .personality = 0x8A,
+ .nickname = _("YANMA"),
+ .friendship = 255,
+ },
+ [3] =
+ {
+ .species = SPECIES_ILLUMISE,
+ .heldItem = ITEM_BRIGHT_POWDER,
+ .moves = {MOVE_ENCORE, MOVE_ATTRACT, MOVE_NONE, MOVE_NONE},
+ .level = 0,
+ .ppBonuses = 0,
+ .hpEV = 252,
+ .defenseEV = 6,
+ .speedEV = 252,
+ .otId = TRAINER_HILL_OTID,
+ .hpIV = 5,
+ .attackIV = 5,
+ .defenseIV = 5,
+ .speedIV = 5,
+ .spAttackIV = 5,
+ .spDefenseIV = 5,
+ .abilityNum = 0,
+ .personality = 0xA,
+ .nickname = _("ILLUMISE"),
+ .friendship = 255,
+ },
+ [4] =
+ {
+ .species = SPECIES_SPHEAL,
+ .heldItem = ITEM_FOCUS_BAND,
+ .moves = {MOVE_ENCORE, MOVE_ATTRACT, MOVE_NONE, MOVE_NONE},
+ .level = 0,
+ .ppBonuses = 0,
+ .hpEV = 252,
+ .speedEV = 252,
+ .spDefenseEV = 6,
+ .otId = TRAINER_HILL_OTID,
+ .hpIV = 5,
+ .attackIV = 5,
+ .defenseIV = 5,
+ .speedIV = 5,
+ .spAttackIV = 5,
+ .spDefenseIV = 5,
+ .abilityNum = 0,
+ .personality = 0xA,
+ .nickname = _("SPHEAL"),
+ .friendship = 255,
+ },
+ [5] =
+ {
+ .species = SPECIES_VIGOROTH,
+ .heldItem = ITEM_FOCUS_BAND,
+ .moves = {MOVE_ENCORE, MOVE_ATTRACT, MOVE_NONE, MOVE_NONE},
+ .level = 0,
+ .ppBonuses = 0,
+ .hpEV = 252,
+ .defenseEV = 6,
+ .speedEV = 252,
+ .otId = TRAINER_HILL_OTID,
+ .hpIV = 5,
+ .attackIV = 5,
+ .defenseIV = 5,
+ .speedIV = 5,
+ .spAttackIV = 5,
+ .spDefenseIV = 5,
+ .abilityNum = 0,
+ .personality = 0x87,
+ .nickname = _("VIGOROTH"),
+ .friendship = 255,
+ },
+ },
},
- [5] =
- {
- .species = SPECIES_ALTARIA,
- .heldItem = ITEM_BRIGHT_POWDER,
- .moves = {MOVE_DRAGON_DANCE, MOVE_AERIAL_ACE, MOVE_ATTRACT, MOVE_NONE},
- .level = 0,
- .ppBonuses = 0,
- .hpEV = 85,
- .attackEV = 85,
- .defenseEV = 85,
- .speedEV = 85,
- .spAttackEV = 85,
- .spDefenseEV = 85,
- .otId = TRAINER_HILL_OTID,
- .hpIV = 5,
- .attackIV = 5,
- .defenseIV = 5,
- .speedIV = 5,
- .spAttackIV = 5,
- .spDefenseIV = 5,
- .abilityNum = 0,
- .personality = 0x0,
- .nickname = _("ALTARIA"),
- .friendship = 255,
- },
- },
- },
- [1] =
- {
- .name = _("COLEMAN"),
- .facilityClass = FACILITY_CLASS_COLLECTOR,
- .unused = 0,
- .speechBefore = {EC_WORD_I, EC_WORD_SEEK, EC_WORD_SOMEONE, EC_WORD_AS, EC_WORD_MY, EC_WORD_IDOL},
- .speechWin = {EC_WORD_DID, EC_WORD_MY, EC_WORD_IDOL, EC_WORD_SEE, EC_WORD_THAT, EC_WORD_QUES},
- .speechLose = {EC_WORD_YOU_RE, EC_WORD_LIKE, EC_WORD_A, EC_MOVE(HEAL_BELL), EC_WORD_TO_ME, EC_WORD_EXCL},
- .speechAfter = {EC_WORD_I_VE, EC_WORD_DECIDED, EC_WORD_I_CHOOSE_YOU, EC_WORD_AS, EC_WORD_MY, EC_WORD_IDOL},
- .mons =
- {
- [0] =
- {
- .species = SPECIES_CHIMECHO,
- .heldItem = ITEM_FOCUS_BAND,
- .moves = {MOVE_UPROAR, MOVE_ATTRACT, MOVE_NONE, MOVE_NONE},
- .level = 0,
- .ppBonuses = 0,
- .hpEV = 6,
- .attackEV = 252,
- .speedEV = 252,
- .otId = TRAINER_HILL_OTID,
- .hpIV = 5,
- .attackIV = 5,
- .defenseIV = 5,
- .speedIV = 5,
- .spAttackIV = 5,
- .spDefenseIV = 5,
- .abilityNum = 0,
- .personality = 0xD,
- .nickname = _("CHIMECHO"),
- .friendship = 255,
- },
- [1] =
- {
- .species = SPECIES_WHISMUR,
- .heldItem = ITEM_FOCUS_BAND,
- .moves = {MOVE_UPROAR, MOVE_ATTRACT, MOVE_NONE, MOVE_NONE},
- .level = 0,
- .ppBonuses = 0,
- .hpEV = 6,
- .attackEV = 252,
- .speedEV = 252,
- .otId = TRAINER_HILL_OTID,
- .hpIV = 5,
- .attackIV = 5,
- .defenseIV = 5,
- .speedIV = 5,
- .spAttackIV = 5,
- .spDefenseIV = 5,
- .abilityNum = 0,
- .personality = 0xD,
- .nickname = _("WHISMUR"),
- .friendship = 255,
- },
- [2] =
- {
- .species = SPECIES_YANMA,
- .heldItem = ITEM_FOCUS_BAND,
- .moves = {MOVE_UPROAR, MOVE_ATTRACT, MOVE_NONE, MOVE_NONE},
- .level = 0,
- .ppBonuses = 0,
- .hpEV = 6,
- .attackEV = 252,
- .speedEV = 252,
- .otId = TRAINER_HILL_OTID,
- .hpIV = 5,
- .attackIV = 5,
- .defenseIV = 5,
- .speedIV = 5,
- .spAttackIV = 5,
- .spDefenseIV = 5,
- .abilityNum = 0,
- .personality = 0x8A,
- .nickname = _("YANMA"),
- .friendship = 255,
- },
- [3] =
- {
- .species = SPECIES_ILLUMISE,
- .heldItem = ITEM_BRIGHT_POWDER,
- .moves = {MOVE_ENCORE, MOVE_ATTRACT, MOVE_NONE, MOVE_NONE},
- .level = 0,
- .ppBonuses = 0,
- .hpEV = 252,
- .defenseEV = 6,
- .speedEV = 252,
- .otId = TRAINER_HILL_OTID,
- .hpIV = 5,
- .attackIV = 5,
- .defenseIV = 5,
- .speedIV = 5,
- .spAttackIV = 5,
- .spDefenseIV = 5,
- .abilityNum = 0,
- .personality = 0xA,
- .nickname = _("ILLUMISE"),
- .friendship = 255,
- },
- [4] =
- {
- .species = SPECIES_SPHEAL,
- .heldItem = ITEM_FOCUS_BAND,
- .moves = {MOVE_ENCORE, MOVE_ATTRACT, MOVE_NONE, MOVE_NONE},
- .level = 0,
- .ppBonuses = 0,
- .hpEV = 252,
- .speedEV = 252,
- .spDefenseEV = 6,
- .otId = TRAINER_HILL_OTID,
- .hpIV = 5,
- .attackIV = 5,
- .defenseIV = 5,
- .speedIV = 5,
- .spAttackIV = 5,
- .spDefenseIV = 5,
- .abilityNum = 0,
- .personality = 0xA,
- .nickname = _("SPHEAL"),
- .friendship = 255,
- },
- [5] =
- {
- .species = SPECIES_VIGOROTH,
- .heldItem = ITEM_FOCUS_BAND,
- .moves = {MOVE_ENCORE, MOVE_ATTRACT, MOVE_NONE, MOVE_NONE},
- .level = 0,
- .ppBonuses = 0,
- .hpEV = 252,
- .defenseEV = 6,
- .speedEV = 252,
- .otId = TRAINER_HILL_OTID,
- .hpIV = 5,
- .attackIV = 5,
- .defenseIV = 5,
- .speedIV = 5,
- .spAttackIV = 5,
- .spDefenseIV = 5,
- .abilityNum = 0,
- .personality = 0x87,
- .nickname = _("VIGOROTH"),
- .friendship = 255,
- },
- },
},
- },
- .data = {0x31, 0x3B, 0x3B, 0x3B, 0x39, 0x39, 0x13, 0x14, 0x15, 0x38, 0x39, 0x3A, 0x3B, 0x3B, 0x3B, 0x8, 0x91, 0x9B, 0x9C, 0x96, 0x40, 0x40, 0x96, 0x9B, 0x96, 0x40, 0x40, 0x96, 0x9B, 0x9C, 0x9B, 0x8, 0x9C, 0x9B, 0x96, 0x40, 0xDB, 0xDB, 0x40, 0x96, 0x40, 0xDB, 0xDB, 0x42, 0x96, 0x9B, 0x9B, 0x8, 0x91, 0x96, 0x40, 0xDB, 0xDB, 0xDB, 0xDB, 0xDB, 0xDB, 0xDB, 0xDB, 0xDB, 0x42, 0x96, 0x9C, 0x8, 0x91, 0x42, 0xDB, 0xDB, 0xD6, 0xD6, 0xD6, 0xDB, 0xD6, 0xD6, 0xD6, 0xDB, 0xDB, 0x42, 0x9B, 0x8, 0x96, 0x42, 0xDB, 0xD6, 0xD6, 0xD6, 0xD6, 0xD6, 0xD6, 0xD6, 0xD6, 0xD6, 0xDB, 0x42, 0x96, 0x8, 0x96, 0x42, 0xDB, 0xD6, 0xD6, 0xD6, 0xD6, 0xD6, 0xD6, 0xD6, 0xD6, 0xD6, 0xDB, 0x42, 0x96, 0x8, 0x96, 0x42, 0xDB, 0xD6, 0xD6, 0xD6, 0xD6, 0xD6, 0xD6, 0xD6, 0xD6, 0xD6, 0xDB, 0x42, 0x96, 0x8, 0x96, 0x42, 0xDB, 0xDB, 0xD6, 0xD6, 0xD6, 0xD6, 0xD6, 0xD6, 0xD6, 0xDB, 0xDB, 0x42, 0x96, 0x8, 0x91, 0x96, 0x42, 0xDB, 0xDB, 0xD6, 0xD6, 0xD6, 0xD6, 0xD6, 0xDB, 0xDB, 0x42, 0x96, 0x9B, 0x8, 0x91, 0x9B, 0x96, 0x42, 0xDB, 0xDB, 0xD6, 0xD6, 0xD6, 0xDB, 0xDB, 0x42, 0x96, 0x9B, 0x9C, 0x8, 0x9C, 0x9B, 0x9B, 0x96, 0x42, 0xDB, 0xDB, 0xD6, 0xDB, 0xDB, 0x42, 0x96, 0x9B, 0x9B, 0x9B, 0x8, 0x96, 0x9B, 0x9B, 0x9B, 0x96, 0x41, 0xDB, 0xDB, 0xDB, 0x42, 0x96, 0x9B, 0x9B, 0x9C, 0x96, 0x8, 0xD6, 0x96, 0x9C, 0x9B, 0x9B, 0x96, 0x41, 0xDB, 0x42, 0x96, 0x9B, 0x9B, 0x9B, 0x96, 0xD6, 0x8, 0x9C, 0xD6, 0x96, 0x9B, 0x9C, 0x9B, 0x96, 0x40, 0x96, 0x9B, 0x9C, 0x9B, 0x96, 0xD6, 0x9C, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8},
- .unk3A0 = {0x381, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0xFFFF},
- .coords = {131, 139},
- .direction = 0x23,
- .range = 0x77,
+ .display = {
+ .data = {0x31, 0x3B, 0x3B, 0x3B, 0x39, 0x39, 0x13, 0x14, 0x15, 0x38, 0x39, 0x3A, 0x3B, 0x3B, 0x3B, 0x8, 0x91, 0x9B, 0x9C, 0x96, 0x40, 0x40, 0x96, 0x9B, 0x96, 0x40, 0x40, 0x96, 0x9B, 0x9C, 0x9B, 0x8, 0x9C, 0x9B, 0x96, 0x40, 0xDB, 0xDB, 0x40, 0x96, 0x40, 0xDB, 0xDB, 0x42, 0x96, 0x9B, 0x9B, 0x8, 0x91, 0x96, 0x40, 0xDB, 0xDB, 0xDB, 0xDB, 0xDB, 0xDB, 0xDB, 0xDB, 0xDB, 0x42, 0x96, 0x9C, 0x8, 0x91, 0x42, 0xDB, 0xDB, 0xD6, 0xD6, 0xD6, 0xDB, 0xD6, 0xD6, 0xD6, 0xDB, 0xDB, 0x42, 0x9B, 0x8, 0x96, 0x42, 0xDB, 0xD6, 0xD6, 0xD6, 0xD6, 0xD6, 0xD6, 0xD6, 0xD6, 0xD6, 0xDB, 0x42, 0x96, 0x8, 0x96, 0x42, 0xDB, 0xD6, 0xD6, 0xD6, 0xD6, 0xD6, 0xD6, 0xD6, 0xD6, 0xD6, 0xDB, 0x42, 0x96, 0x8, 0x96, 0x42, 0xDB, 0xD6, 0xD6, 0xD6, 0xD6, 0xD6, 0xD6, 0xD6, 0xD6, 0xD6, 0xDB, 0x42, 0x96, 0x8, 0x96, 0x42, 0xDB, 0xDB, 0xD6, 0xD6, 0xD6, 0xD6, 0xD6, 0xD6, 0xD6, 0xDB, 0xDB, 0x42, 0x96, 0x8, 0x91, 0x96, 0x42, 0xDB, 0xDB, 0xD6, 0xD6, 0xD6, 0xD6, 0xD6, 0xDB, 0xDB, 0x42, 0x96, 0x9B, 0x8, 0x91, 0x9B, 0x96, 0x42, 0xDB, 0xDB, 0xD6, 0xD6, 0xD6, 0xDB, 0xDB, 0x42, 0x96, 0x9B, 0x9C, 0x8, 0x9C, 0x9B, 0x9B, 0x96, 0x42, 0xDB, 0xDB, 0xD6, 0xDB, 0xDB, 0x42, 0x96, 0x9B, 0x9B, 0x9B, 0x8, 0x96, 0x9B, 0x9B, 0x9B, 0x96, 0x41, 0xDB, 0xDB, 0xDB, 0x42, 0x96, 0x9B, 0x9B, 0x9C, 0x96, 0x8, 0xD6, 0x96, 0x9C, 0x9B, 0x9B, 0x96, 0x41, 0xDB, 0x42, 0x96, 0x9B, 0x9B, 0x9B, 0x96, 0xD6, 0x8, 0x9C, 0xD6, 0x96, 0x9B, 0x9C, 0x9B, 0x96, 0x40, 0x96, 0x9B, 0x9C, 0x9B, 0x96, 0xD6, 0x9C, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8},
+ .unk3A0 = {0x381, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0xFFFF},
+ .coords = {131, 139},
+ .direction = 0x23,
+ .range = 0x77,
+ }
},
- [2] =
+ [2] =
{
.unk0 = 0x2D,
.unk1 = 0x2E,
.trainers =
- {
- [0] =
{
- .name = _("ENRIQUE"),
- .facilityClass = FACILITY_CLASS_RICH_BOY,
- .unused = 0,
- .speechBefore = {EC_WORD_GET, EC_WORD_READY, EC_WORD_FOR, EC_WORD_AN, EC_WORD_AWESOME, EC_WORD_TIME},
- .speechWin = {EC_WORD_HEY, EC_WORD_HEY, EC_WORD_EXCL, EC_WORD_WHAT_S_UP_QUES, 0xFFFF, 0xFFFF},
- .speechLose = {EC_WORD_AWW, EC_WORD_COULDN_T, EC_WORD_YOU, EC_WORD_LET_ME_WIN, EC_WORD_QUES, 0xFFFF},
- .speechAfter = {EC_WORD_DID, EC_WORD_YOU, EC_WORD_SEE, EC_WORD_MY, EC_WORD_SKILL, EC_WORD_QUES},
- .mons =
- {
- [0] =
- {
- .species = SPECIES_WOOPER,
- .heldItem = ITEM_FIGY_BERRY,
- .moves = {MOVE_RAIN_DANCE, MOVE_YAWN, MOVE_SURF, MOVE_HAZE},
- .level = 0,
- .ppBonuses = 0,
- .hpEV = 252,
- .speedEV = 6,
- .spAttackEV = 252,
- .otId = TRAINER_HILL_OTID,
- .hpIV = 15,
- .attackIV = 15,
- .defenseIV = 15,
- .speedIV = 15,
- .spAttackIV = 15,
- .spDefenseIV = 15,
- .abilityNum = 0,
- .personality = 0x8C,
- .nickname = _("WOOPER"),
- .friendship = 255,
- },
- [1] =
- {
- .species = SPECIES_POLIWAG,
- .heldItem = ITEM_WIKI_BERRY,
- .moves = {MOVE_SURF, MOVE_ICE_BEAM, MOVE_MIST, MOVE_HYPNOSIS},
- .level = 0,
- .ppBonuses = 0,
- .hpEV = 252,
- .speedEV = 6,
- .spAttackEV = 252,
- .otId = TRAINER_HILL_OTID,
- .hpIV = 15,
- .attackIV = 15,
- .defenseIV = 15,
- .speedIV = 15,
- .spAttackIV = 15,
- .spDefenseIV = 15,
- .abilityNum = 1,
- .personality = 0x3,
- .nickname = _("POLIWAG"),
- .friendship = 255,
- },
- [2] =
- {
- .species = SPECIES_PSYDUCK,
- .heldItem = ITEM_AGUAV_BERRY,
- .moves = {MOVE_HYPNOSIS, MOVE_SURF, MOVE_DISABLE, MOVE_SEISMIC_TOSS},
- .level = 0,
- .ppBonuses = 0,
- .hpEV = 250,
- .defenseEV = 130,
- .spDefenseEV = 130,
- .otId = TRAINER_HILL_OTID,
- .hpIV = 15,
- .attackIV = 15,
- .defenseIV = 15,
- .speedIV = 15,
- .spAttackIV = 15,
- .spDefenseIV = 15,
- .abilityNum = 0,
- .personality = 0x3,
- .nickname = _("PSYDUCK"),
- .friendship = 255,
- },
- [3] =
- {
- .species = SPECIES_RHYDON,
- .heldItem = ITEM_SOFT_SAND,
- .moves = {MOVE_EARTHQUAKE, MOVE_MAGNITUDE, MOVE_NONE, MOVE_NONE},
- .level = 0,
- .ppBonuses = 0,
- .hpEV = 252,
- .attackEV = 252,
- .speedEV = 6,
- .otId = TRAINER_HILL_OTID,
- .hpIV = 15,
- .attackIV = 15,
- .defenseIV = 15,
- .speedIV = 15,
- .spAttackIV = 15,
- .spDefenseIV = 15,
- .abilityNum = 0,
- .personality = 0x96,
- .nickname = _("RHYDON"),
- .friendship = 0,
- },
- [4] =
- {
- .species = SPECIES_RHYHORN,
- .heldItem = ITEM_SOFT_SAND,
- .moves = {MOVE_EARTHQUAKE, MOVE_MAGNITUDE, MOVE_NONE, MOVE_NONE},
- .level = 0,
- .ppBonuses = 0,
- .hpEV = 6,
- .attackEV = 252,
- .speedEV = 252,
- .otId = TRAINER_HILL_OTID,
- .hpIV = 15,
- .attackIV = 15,
- .defenseIV = 15,
- .speedIV = 15,
- .spAttackIV = 15,
- .spDefenseIV = 15,
- .abilityNum = 0,
- .personality = 0x3,
- .nickname = _("RHYHORN"),
- .friendship = 0,
- },
- [5] =
- {
- .species = SPECIES_CUBONE,
- .heldItem = ITEM_SOFT_SAND,
- .moves = {MOVE_EARTHQUAKE, MOVE_NONE, MOVE_NONE, MOVE_NONE},
- .level = 0,
- .ppBonuses = 0,
- .hpEV = 6,
- .attackEV = 252,
- .speedEV = 252,
- .otId = TRAINER_HILL_OTID,
- .hpIV = 15,
- .attackIV = 15,
- .defenseIV = 15,
- .speedIV = 15,
- .spAttackIV = 15,
- .spDefenseIV = 15,
- .abilityNum = 1,
- .personality = 0x80,
- .nickname = _("CUBONE"),
- .friendship = 0,
- },
- },
- },
- [1] =
- {
- .name = _("COLLEEN"),
- .facilityClass = FACILITY_CLASS_LADY,
- .unused = 0,
- .speechBefore = {EC_WORD_I, EC_WORD_WOULD, EC_WORD_LIKE, EC_WORD_TO, EC_WORD_ROCK, EC_WORD_OUT},
- .speechWin = {EC_WORD_I, EC_WORD_LIKE, EC_WORD_THIS, EC_WORD_ROCK, EC_WORD_THING, EC_WORD_EXCL},
- .speechLose = {EC_WORD_GO_AHEAD, EC_WORD_AND, EC_WORD_CRUSH, EC_WORD_MY, EC_WORD_DREAM, EC_WORD_ELLIPSIS},
- .speechAfter = {EC_WORD_I, EC_WORD_WANT, EC_WORD_TO, EC_WORD_GO, EC_WORD_WILD, EC_WORD_SOMETIME},
- .mons =
- {
- [0] =
- {
- .species = SPECIES_MAGNEMITE,
- .heldItem = ITEM_MAGNET,
- .moves = {MOVE_THUNDER, MOVE_ZAP_CANNON, MOVE_SPARK, MOVE_THUNDER_SHOCK},
- .level = 0,
- .ppBonuses = 0,
- .hpEV = 6,
- .speedEV = 252,
- .spAttackEV = 252,
- .otId = TRAINER_HILL_OTID,
- .hpIV = 15,
- .attackIV = 15,
- .defenseIV = 15,
- .speedIV = 15,
- .spAttackIV = 15,
- .spDefenseIV = 15,
- .abilityNum = 0,
- .personality = 0x8C,
- .nickname = _("MAGNEMITE"),
- .friendship = 255,
- },
- [1] =
- {
- .species = SPECIES_ELECTABUZZ,
- .heldItem = ITEM_MAGNET,
- .moves = {MOVE_THUNDER, MOVE_THUNDERBOLT, MOVE_THUNDER_PUNCH, MOVE_SHOCK_WAVE},
- .level = 0,
- .ppBonuses = 0,
- .hpEV = 6,
- .speedEV = 252,
- .spAttackEV = 252,
- .otId = TRAINER_HILL_OTID,
- .hpIV = 15,
- .attackIV = 15,
- .defenseIV = 15,
- .speedIV = 15,
- .spAttackIV = 15,
- .spDefenseIV = 15,
- .abilityNum = 0,
- .personality = 0x41,
- .nickname = _("ELECTABUZZ"),
- .friendship = 255,
- },
- [2] =
- {
- .species = SPECIES_FLAAFFY,
- .heldItem = ITEM_MAGNET,
- .moves = {MOVE_THUNDER, MOVE_THUNDERBOLT, MOVE_SHOCK_WAVE, MOVE_THUNDER_SHOCK},
- .level = 0,
- .ppBonuses = 0,
- .hpEV = 250,
- .spAttackEV = 130,
- .otId = TRAINER_HILL_OTID,
- .hpIV = 15,
- .attackIV = 15,
- .defenseIV = 15,
- .speedIV = 15,
- .spAttackIV = 15,
- .spDefenseIV = 15,
- .abilityNum = 0,
- .personality = 0x0,
- .nickname = _("FLAAFFY"),
- .friendship = 255,
- },
- [3] =
- {
- .species = SPECIES_BALTOY,
- .heldItem = ITEM_SILK_SCARF,
- .moves = {MOVE_EXPLOSION, MOVE_SELF_DESTRUCT, MOVE_NONE, MOVE_NONE},
- .level = 0,
- .ppBonuses = 0,
- .hpEV = 6,
- .attackEV = 252,
- .speedEV = 252,
- .otId = TRAINER_HILL_OTID,
- .hpIV = 15,
- .attackIV = 15,
- .defenseIV = 15,
- .speedIV = 15,
- .spAttackIV = 15,
- .spDefenseIV = 15,
- .abilityNum = 0,
- .personality = 0x3,
- .nickname = _("BALTOY"),
- .friendship = 0,
- },
- [4] =
- {
- .species = SPECIES_PINECO,
- .heldItem = ITEM_SILK_SCARF,
- .moves = {MOVE_EXPLOSION, MOVE_SELF_DESTRUCT, MOVE_NONE, MOVE_NONE},
- .level = 0,
- .ppBonuses = 0,
- .hpEV = 252,
- .attackEV = 252,
- .speedEV = 6,
- .otId = TRAINER_HILL_OTID,
- .hpIV = 15,
- .attackIV = 15,
- .defenseIV = 15,
- .speedIV = 15,
- .spAttackIV = 15,
- .spDefenseIV = 15,
- .abilityNum = 0,
- .personality = 0x3,
- .nickname = _("PINECO"),
- .friendship = 0,
- },
- [5] =
- {
- .species = SPECIES_VOLTORB,
- .heldItem = ITEM_SILK_SCARF,
- .moves = {MOVE_EXPLOSION, MOVE_SELF_DESTRUCT, MOVE_NONE, MOVE_NONE},
- .level = 0,
- .ppBonuses = 0,
- .hpEV = 6,
- .attackEV = 252,
- .speedEV = 252,
- .otId = TRAINER_HILL_OTID,
- .hpIV = 15,
- .attackIV = 15,
- .defenseIV = 15,
- .speedIV = 15,
- .spAttackIV = 15,
- .spDefenseIV = 15,
- .abilityNum = 0,
- .personality = 0x80,
- .nickname = _("VOLTORB"),
- .friendship = 0,
+ [0] =
+ {
+ .name = _("ENRIQUE"),
+ .facilityClass = FACILITY_CLASS_RICH_BOY,
+ .unused = 0,
+ .speechBefore = {EC_WORD_GET, EC_WORD_READY, EC_WORD_FOR, EC_WORD_AN, EC_WORD_AWESOME, EC_WORD_TIME},
+ .speechWin = {EC_WORD_HEY, EC_WORD_HEY, EC_WORD_EXCL, EC_WORD_WHAT_S_UP_QUES, 0xFFFF, 0xFFFF},
+ .speechLose = {EC_WORD_AWW, EC_WORD_COULDN_T, EC_WORD_YOU, EC_WORD_LET_ME_WIN, EC_WORD_QUES, 0xFFFF},
+ .speechAfter = {EC_WORD_DID, EC_WORD_YOU, EC_WORD_SEE, EC_WORD_MY, EC_WORD_SKILL, EC_WORD_QUES},
+ .mons =
+ {
+ [0] =
+ {
+ .species = SPECIES_WOOPER,
+ .heldItem = ITEM_FIGY_BERRY,
+ .moves = {MOVE_RAIN_DANCE, MOVE_YAWN, MOVE_SURF, MOVE_HAZE},
+ .level = 0,
+ .ppBonuses = 0,
+ .hpEV = 252,
+ .speedEV = 6,
+ .spAttackEV = 252,
+ .otId = TRAINER_HILL_OTID,
+ .hpIV = 15,
+ .attackIV = 15,
+ .defenseIV = 15,
+ .speedIV = 15,
+ .spAttackIV = 15,
+ .spDefenseIV = 15,
+ .abilityNum = 0,
+ .personality = 0x8C,
+ .nickname = _("WOOPER"),
+ .friendship = 255,
+ },
+ [1] =
+ {
+ .species = SPECIES_POLIWAG,
+ .heldItem = ITEM_WIKI_BERRY,
+ .moves = {MOVE_SURF, MOVE_ICE_BEAM, MOVE_MIST, MOVE_HYPNOSIS},
+ .level = 0,
+ .ppBonuses = 0,
+ .hpEV = 252,
+ .speedEV = 6,
+ .spAttackEV = 252,
+ .otId = TRAINER_HILL_OTID,
+ .hpIV = 15,
+ .attackIV = 15,
+ .defenseIV = 15,
+ .speedIV = 15,
+ .spAttackIV = 15,
+ .spDefenseIV = 15,
+ .abilityNum = 1,
+ .personality = 0x3,
+ .nickname = _("POLIWAG"),
+ .friendship = 255,
+ },
+ [2] =
+ {
+ .species = SPECIES_PSYDUCK,
+ .heldItem = ITEM_AGUAV_BERRY,
+ .moves = {MOVE_HYPNOSIS, MOVE_SURF, MOVE_DISABLE, MOVE_SEISMIC_TOSS},
+ .level = 0,
+ .ppBonuses = 0,
+ .hpEV = 250,
+ .defenseEV = 130,
+ .spDefenseEV = 130,
+ .otId = TRAINER_HILL_OTID,
+ .hpIV = 15,
+ .attackIV = 15,
+ .defenseIV = 15,
+ .speedIV = 15,
+ .spAttackIV = 15,
+ .spDefenseIV = 15,
+ .abilityNum = 0,
+ .personality = 0x3,
+ .nickname = _("PSYDUCK"),
+ .friendship = 255,
+ },
+ [3] =
+ {
+ .species = SPECIES_RHYDON,
+ .heldItem = ITEM_SOFT_SAND,
+ .moves = {MOVE_EARTHQUAKE, MOVE_MAGNITUDE, MOVE_NONE, MOVE_NONE},
+ .level = 0,
+ .ppBonuses = 0,
+ .hpEV = 252,
+ .attackEV = 252,
+ .speedEV = 6,
+ .otId = TRAINER_HILL_OTID,
+ .hpIV = 15,
+ .attackIV = 15,
+ .defenseIV = 15,
+ .speedIV = 15,
+ .spAttackIV = 15,
+ .spDefenseIV = 15,
+ .abilityNum = 0,
+ .personality = 0x96,
+ .nickname = _("RHYDON"),
+ .friendship = 0,
+ },
+ [4] =
+ {
+ .species = SPECIES_RHYHORN,
+ .heldItem = ITEM_SOFT_SAND,
+ .moves = {MOVE_EARTHQUAKE, MOVE_MAGNITUDE, MOVE_NONE, MOVE_NONE},
+ .level = 0,
+ .ppBonuses = 0,
+ .hpEV = 6,
+ .attackEV = 252,
+ .speedEV = 252,
+ .otId = TRAINER_HILL_OTID,
+ .hpIV = 15,
+ .attackIV = 15,
+ .defenseIV = 15,
+ .speedIV = 15,
+ .spAttackIV = 15,
+ .spDefenseIV = 15,
+ .abilityNum = 0,
+ .personality = 0x3,
+ .nickname = _("RHYHORN"),
+ .friendship = 0,
+ },
+ [5] =
+ {
+ .species = SPECIES_CUBONE,
+ .heldItem = ITEM_SOFT_SAND,
+ .moves = {MOVE_EARTHQUAKE, MOVE_NONE, MOVE_NONE, MOVE_NONE},
+ .level = 0,
+ .ppBonuses = 0,
+ .hpEV = 6,
+ .attackEV = 252,
+ .speedEV = 252,
+ .otId = TRAINER_HILL_OTID,
+ .hpIV = 15,
+ .attackIV = 15,
+ .defenseIV = 15,
+ .speedIV = 15,
+ .spAttackIV = 15,
+ .spDefenseIV = 15,
+ .abilityNum = 1,
+ .personality = 0x80,
+ .nickname = _("CUBONE"),
+ .friendship = 0,
+ },
+ },
+ },
+ [1] =
+ {
+ .name = _("COLLEEN"),
+ .facilityClass = FACILITY_CLASS_LADY,
+ .unused = 0,
+ .speechBefore = {EC_WORD_I, EC_WORD_WOULD, EC_WORD_LIKE, EC_WORD_TO, EC_WORD_ROCK, EC_WORD_OUT},
+ .speechWin = {EC_WORD_I, EC_WORD_LIKE, EC_WORD_THIS, EC_WORD_ROCK, EC_WORD_THING, EC_WORD_EXCL},
+ .speechLose = {EC_WORD_GO_AHEAD, EC_WORD_AND, EC_WORD_CRUSH, EC_WORD_MY, EC_WORD_DREAM, EC_WORD_ELLIPSIS},
+ .speechAfter = {EC_WORD_I, EC_WORD_WANT, EC_WORD_TO, EC_WORD_GO, EC_WORD_WILD, EC_WORD_SOMETIME},
+ .mons =
+ {
+ [0] =
+ {
+ .species = SPECIES_MAGNEMITE,
+ .heldItem = ITEM_MAGNET,
+ .moves = {MOVE_THUNDER, MOVE_ZAP_CANNON, MOVE_SPARK, MOVE_THUNDER_SHOCK},
+ .level = 0,
+ .ppBonuses = 0,
+ .hpEV = 6,
+ .speedEV = 252,
+ .spAttackEV = 252,
+ .otId = TRAINER_HILL_OTID,
+ .hpIV = 15,
+ .attackIV = 15,
+ .defenseIV = 15,
+ .speedIV = 15,
+ .spAttackIV = 15,
+ .spDefenseIV = 15,
+ .abilityNum = 0,
+ .personality = 0x8C,
+ .nickname = _("MAGNEMITE"),
+ .friendship = 255,
+ },
+ [1] =
+ {
+ .species = SPECIES_ELECTABUZZ,
+ .heldItem = ITEM_MAGNET,
+ .moves = {MOVE_THUNDER, MOVE_THUNDERBOLT, MOVE_THUNDER_PUNCH, MOVE_SHOCK_WAVE},
+ .level = 0,
+ .ppBonuses = 0,
+ .hpEV = 6,
+ .speedEV = 252,
+ .spAttackEV = 252,
+ .otId = TRAINER_HILL_OTID,
+ .hpIV = 15,
+ .attackIV = 15,
+ .defenseIV = 15,
+ .speedIV = 15,
+ .spAttackIV = 15,
+ .spDefenseIV = 15,
+ .abilityNum = 0,
+ .personality = 0x41,
+ .nickname = _("ELECTABUZZ"),
+ .friendship = 255,
+ },
+ [2] =
+ {
+ .species = SPECIES_FLAAFFY,
+ .heldItem = ITEM_MAGNET,
+ .moves = {MOVE_THUNDER, MOVE_THUNDERBOLT, MOVE_SHOCK_WAVE, MOVE_THUNDER_SHOCK},
+ .level = 0,
+ .ppBonuses = 0,
+ .hpEV = 250,
+ .spAttackEV = 130,
+ .otId = TRAINER_HILL_OTID,
+ .hpIV = 15,
+ .attackIV = 15,
+ .defenseIV = 15,
+ .speedIV = 15,
+ .spAttackIV = 15,
+ .spDefenseIV = 15,
+ .abilityNum = 0,
+ .personality = 0x0,
+ .nickname = _("FLAAFFY"),
+ .friendship = 255,
+ },
+ [3] =
+ {
+ .species = SPECIES_BALTOY,
+ .heldItem = ITEM_SILK_SCARF,
+ .moves = {MOVE_EXPLOSION, MOVE_SELF_DESTRUCT, MOVE_NONE, MOVE_NONE},
+ .level = 0,
+ .ppBonuses = 0,
+ .hpEV = 6,
+ .attackEV = 252,
+ .speedEV = 252,
+ .otId = TRAINER_HILL_OTID,
+ .hpIV = 15,
+ .attackIV = 15,
+ .defenseIV = 15,
+ .speedIV = 15,
+ .spAttackIV = 15,
+ .spDefenseIV = 15,
+ .abilityNum = 0,
+ .personality = 0x3,
+ .nickname = _("BALTOY"),
+ .friendship = 0,
+ },
+ [4] =
+ {
+ .species = SPECIES_PINECO,
+ .heldItem = ITEM_SILK_SCARF,
+ .moves = {MOVE_EXPLOSION, MOVE_SELF_DESTRUCT, MOVE_NONE, MOVE_NONE},
+ .level = 0,
+ .ppBonuses = 0,
+ .hpEV = 252,
+ .attackEV = 252,
+ .speedEV = 6,
+ .otId = TRAINER_HILL_OTID,
+ .hpIV = 15,
+ .attackIV = 15,
+ .defenseIV = 15,
+ .speedIV = 15,
+ .spAttackIV = 15,
+ .spDefenseIV = 15,
+ .abilityNum = 0,
+ .personality = 0x3,
+ .nickname = _("PINECO"),
+ .friendship = 0,
+ },
+ [5] =
+ {
+ .species = SPECIES_VOLTORB,
+ .heldItem = ITEM_SILK_SCARF,
+ .moves = {MOVE_EXPLOSION, MOVE_SELF_DESTRUCT, MOVE_NONE, MOVE_NONE},
+ .level = 0,
+ .ppBonuses = 0,
+ .hpEV = 6,
+ .attackEV = 252,
+ .speedEV = 252,
+ .otId = TRAINER_HILL_OTID,
+ .hpIV = 15,
+ .attackIV = 15,
+ .defenseIV = 15,
+ .speedIV = 15,
+ .spAttackIV = 15,
+ .spDefenseIV = 15,
+ .abilityNum = 0,
+ .personality = 0x80,
+ .nickname = _("VOLTORB"),
+ .friendship = 0,
+ },
+ },
},
- },
},
- },
- .data = {0x31, 0x3B, 0x3B, 0x3B, 0x39, 0x39, 0x1B, 0x1C, 0x1D, 0x38, 0x39, 0x3A, 0x3B, 0x3B, 0x3B, 0x8, 0x91, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x84, 0x84, 0x84, 0x9A, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x8, 0x17, 0xB2, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xB0, 0x17, 0xB2, 0xA1, 0x8, 0x17, 0xBB, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0xBB, 0x17, 0x17, 0x17, 0x8, 0x17, 0xB2, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xB0, 0x17, 0xB2, 0xA1, 0x8, 0x17, 0x17, 0x17, 0xBB, 0x17, 0x17, 0x17, 0x17, 0x17, 0xBB, 0x17, 0x17, 0x17, 0x17, 0x17, 0x8, 0x17, 0xB2, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xB0, 0x17, 0xB2, 0xA1, 0x8, 0x17, 0x17, 0xBB, 0x17, 0x17, 0x17, 0x17, 0xBB, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x8, 0x17, 0xB2, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xB0, 0x17, 0xB2, 0xA1, 0x8, 0x17, 0x17, 0x17, 0x17, 0x17, 0xBB, 0x17, 0x17, 0x17, 0x17, 0xBB, 0x17, 0x17, 0x17, 0x17, 0x8, 0x17, 0xB2, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xB0, 0x17, 0xB2, 0xA1, 0x8, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0xBB, 0x17, 0x17, 0xBB, 0x17, 0x17, 0x8, 0x17, 0xB2, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xB0, 0x17, 0xB2, 0xA1, 0x8, 0x17, 0x17, 0x17, 0x17, 0xBB, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x8, 0x17, 0xB2, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xB0, 0x17, 0xB2, 0xA1, 0x8, 0x17, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0x17, 0xBB, 0xBB, 0x8},
- .unk3A0 = {0x381, 0x381, 0x7FF7, 0x1, 0x7FF7, 0x1, 0x7FF7, 0x1, 0x7FF7, 0x1, 0x7FF7, 0x1, 0x7FF7, 0x1, 0x7FF7, 0x1},
- .coords = {25, 30},
- .direction = 0x23,
- .range = 0x44,
+ .display = {
+ .data = {0x31, 0x3B, 0x3B, 0x3B, 0x39, 0x39, 0x1B, 0x1C, 0x1D, 0x38, 0x39, 0x3A, 0x3B, 0x3B, 0x3B, 0x8, 0x91, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x84, 0x84, 0x84, 0x9A, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x8, 0x17, 0xB2, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xB0, 0x17, 0xB2, 0xA1, 0x8, 0x17, 0xBB, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0xBB, 0x17, 0x17, 0x17, 0x8, 0x17, 0xB2, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xB0, 0x17, 0xB2, 0xA1, 0x8, 0x17, 0x17, 0x17, 0xBB, 0x17, 0x17, 0x17, 0x17, 0x17, 0xBB, 0x17, 0x17, 0x17, 0x17, 0x17, 0x8, 0x17, 0xB2, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xB0, 0x17, 0xB2, 0xA1, 0x8, 0x17, 0x17, 0xBB, 0x17, 0x17, 0x17, 0x17, 0xBB, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x8, 0x17, 0xB2, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xB0, 0x17, 0xB2, 0xA1, 0x8, 0x17, 0x17, 0x17, 0x17, 0x17, 0xBB, 0x17, 0x17, 0x17, 0x17, 0xBB, 0x17, 0x17, 0x17, 0x17, 0x8, 0x17, 0xB2, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xB0, 0x17, 0xB2, 0xA1, 0x8, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0xBB, 0x17, 0x17, 0xBB, 0x17, 0x17, 0x8, 0x17, 0xB2, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xB0, 0x17, 0xB2, 0xA1, 0x8, 0x17, 0x17, 0x17, 0x17, 0xBB, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x8, 0x17, 0xB2, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xB0, 0x17, 0xB2, 0xA1, 0x8, 0x17, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0x17, 0xBB, 0xBB, 0x8},
+ .unk3A0 = {0x381, 0x381, 0x7FF7, 0x1, 0x7FF7, 0x1, 0x7FF7, 0x1, 0x7FF7, 0x1, 0x7FF7, 0x1, 0x7FF7, 0x1, 0x7FF7, 0x1},
+ .coords = {25, 30},
+ .direction = 0x23,
+ .range = 0x44,
+ }
},
- [3] =
+ [3] =
{
.unk0 = 0x2F,
.unk1 = 0x30,
.trainers =
- {
- [0] =
- {
- .name = _("KIMBERLY"),
- .facilityClass = FACILITY_CLASS_POKEFAN_F,
- .unused = 0,
- .speechBefore = {EC_WORD_I, EC_WORD_LIKE, EC_WORD_WORKING, EC_WORD_AT, EC_WORD_MY, EC_WORD_OWN_TEMPO},
- .speechWin = {EC_WORD_I_AM, EC_WORD_NOT, EC_WORD_BAD, EC_WORD_YOU, EC_WORD_THINK, EC_WORD_QUES},
- .speechLose = {EC_WORD_YOU_RE, EC_WORD_A, EC_WORD_MEAN, EC_WORD_KID, EC_WORD_IT, EC_WORD_SEEMS},
- .speechAfter = {EC_WORD_MY, EC_WORD_OWN_TEMPO, EC_WORD_IS, EC_WORD_RIGHT, EC_WORD_FOR, EC_WORD_ME},
- .mons =
- {
- [0] =
- {
- .species = SPECIES_UNOWN,
- .heldItem = ITEM_MIRACLE_SEED,
- .moves = {MOVE_HIDDEN_POWER, MOVE_NONE, MOVE_NONE, MOVE_NONE},
- .level = 0,
- .ppBonuses = 0,
- .hpEV = 255,
- .spAttackEV = 255,
- .otId = TRAINER_HILL_OTID,
- .hpIV = 30,
- .attackIV = 31,
- .defenseIV = 30,
- .speedIV = 31,
- .spAttackIV = 30,
- .spDefenseIV = 31,
- .abilityNum = 0,
- .personality = 0x202,
- .nickname = _("UNOWN"),
- .friendship = 255,
- },
- [1] =
- {
- .species = SPECIES_UNOWN,
- .heldItem = ITEM_MYSTIC_WATER,
- .moves = {MOVE_HIDDEN_POWER, MOVE_NONE, MOVE_NONE, MOVE_NONE},
- .level = 0,
- .ppBonuses = 0,
- .hpEV = 255,
- .spAttackEV = 255,
- .otId = TRAINER_HILL_OTID,
- .hpIV = 30,
- .attackIV = 31,
- .defenseIV = 31,
- .speedIV = 30,
- .spAttackIV = 30,
- .spDefenseIV = 31,
- .abilityNum = 0,
- .personality = 0x10001,
- .nickname = _("UNOWN"),
- .friendship = 255,
- },
- [2] =
- {
- .species = SPECIES_UNOWN,
- .heldItem = ITEM_BLACK_BELT,
- .moves = {MOVE_HIDDEN_POWER, MOVE_NONE, MOVE_NONE, MOVE_NONE},
- .level = 0,
- .ppBonuses = 0,
- .hpEV = 255,
- .spAttackEV = 255,
- .otId = TRAINER_HILL_OTID,
- .hpIV = 30,
- .attackIV = 30,
- .defenseIV = 30,
- .speedIV = 30,
- .spAttackIV = 30,
- .spDefenseIV = 30,
- .abilityNum = 0,
- .personality = 0x102,
- .nickname = _("UNOWN"),
- .friendship = 255,
- },
- [3] =
- {
- .species = SPECIES_SPINDA,
- .heldItem = ITEM_LUM_BERRY,
- .moves = {MOVE_TEETER_DANCE, MOVE_DIZZY_PUNCH, MOVE_CALM_MIND, MOVE_BATON_PASS},
- .level = 0,
- .ppBonuses = 0,
- .hpEV = 110,
- .defenseEV = 200,
- .spDefenseEV = 200,
- .otId = TRAINER_HILL_OTID,
- .hpIV = 15,
- .attackIV = 15,
- .defenseIV = 15,
- .speedIV = 15,
- .spAttackIV = 15,
- .spDefenseIV = 15,
- .abilityNum = 0,
- .personality = 0x88FE980F,
- .nickname = _("SPINDA"),
- .friendship = 255,
- },
- [4] =
- {
- .species = SPECIES_PLUSLE,
- .heldItem = ITEM_BRIGHT_POWDER,
- .moves = {MOVE_HELPING_HAND, MOVE_THUNDERBOLT, MOVE_AGILITY, MOVE_BATON_PASS},
- .level = 0,
- .ppBonuses = 0,
- .speedEV = 255,
- .spAttackEV = 255,
- .otId = TRAINER_HILL_OTID,
- .hpIV = 15,
- .attackIV = 15,
- .defenseIV = 15,
- .speedIV = 15,
- .spAttackIV = 15,
- .spDefenseIV = 15,
- .abilityNum = 0,
- .personality = 0xF,
- .nickname = _("PLUSLE"),
- .friendship = 255,
- },
- [5] =
- {
- .species = SPECIES_VOLBEAT,
- .heldItem = ITEM_SITRUS_BERRY,
- .moves = {MOVE_HELPING_HAND, MOVE_SIGNAL_BEAM, MOVE_SOLAR_BEAM, MOVE_MOONLIGHT},
- .level = 0,
- .ppBonuses = 0,
- .speedEV = 255,
- .spAttackEV = 255,
- .otId = TRAINER_HILL_OTID,
- .hpIV = 15,
- .attackIV = 15,
- .defenseIV = 15,
- .speedIV = 15,
- .spAttackIV = 15,
- .spDefenseIV = 15,
- .abilityNum = 1,
- .personality = 0xF,
- .nickname = _("VOLBEAT"),
- .friendship = 255,
- },
- },
- },
- [1] =
{
- .name = _("FRANCISCO"),
- .facilityClass = FACILITY_CLASS_POKEFAN_M,
- .unused = 0,
- .speechBefore = {EC_WORD_I, EC_WORD_STUDY, EC_WORD_EVERY, EC_WORD_DAY, EC_WORD_TOO, 0xFFFF},
- .speechWin = {EC_WORD_SO, EC_WORD_THAT_S, EC_WORD_HOW, EC_WORD_YOU, EC_WORD_LOSE, 0xFFFF},
- .speechLose = {EC_WORD_NO, EC_WORD_WONDER, EC_WORD_I, EC_WORD_COULDN_T, EC_WORD_BEAT, EC_WORD_YOU},
- .speechAfter = {EC_WORD_YES, EC_WORD_ELLIPSIS, 0xFFFF, EC_WORD_THANK_YOU, 0xFFFF, 0xFFFF},
- .mons =
- {
- [0] =
- {
- .species = SPECIES_SPINDA,
- .heldItem = ITEM_LUM_BERRY,
- .moves = {MOVE_TEETER_DANCE, MOVE_DIZZY_PUNCH, MOVE_CALM_MIND, MOVE_BATON_PASS},
- .level = 0,
- .ppBonuses = 0,
- .hpEV = 110,
- .defenseEV = 200,
- .spDefenseEV = 200,
- .otId = TRAINER_HILL_OTID,
- .hpIV = 15,
- .attackIV = 15,
- .defenseIV = 15,
- .speedIV = 15,
- .spAttackIV = 15,
- .spDefenseIV = 15,
- .abilityNum = 0,
- .personality = 0xE2880098,
- .nickname = _("SPINDA"),
- .friendship = 255,
- },
- [1] =
- {
- .species = SPECIES_MINUN,
- .heldItem = ITEM_BRIGHT_POWDER,
- .moves = {MOVE_HELPING_HAND, MOVE_THUNDERBOLT, MOVE_AGILITY, MOVE_BATON_PASS},
- .level = 0,
- .ppBonuses = 0,
- .speedEV = 255,
- .spAttackEV = 255,
- .otId = TRAINER_HILL_OTID,
- .hpIV = 15,
- .attackIV = 15,
- .defenseIV = 15,
- .speedIV = 15,
- .spAttackIV = 15,
- .spDefenseIV = 15,
- .abilityNum = 0,
- .personality = 0x8C,
- .nickname = _("MINUN"),
- .friendship = 255,
- },
- [2] =
- {
- .species = SPECIES_ILLUMISE,
- .heldItem = ITEM_SITRUS_BERRY,
- .moves = {MOVE_HELPING_HAND, MOVE_WISH, MOVE_THUNDERBOLT, MOVE_MOONLIGHT},
- .level = 0,
- .ppBonuses = 0,
- .speedEV = 255,
- .spAttackEV = 255,
- .otId = TRAINER_HILL_OTID,
- .hpIV = 15,
- .attackIV = 15,
- .defenseIV = 15,
- .speedIV = 15,
- .spAttackIV = 15,
- .spDefenseIV = 15,
- .abilityNum = 0,
- .personality = 0xF,
- .nickname = _("ILLUMISE"),
- .friendship = 255,
- },
- [3] =
- {
- .species = SPECIES_UNOWN,
- .heldItem = ITEM_CHARCOAL,
- .moves = {MOVE_HIDDEN_POWER, MOVE_NONE, MOVE_NONE, MOVE_NONE},
- .level = 0,
- .ppBonuses = 0,
- .hpEV = 255,
- .spAttackEV = 255,
- .otId = TRAINER_HILL_OTID,
- .hpIV = 30,
- .attackIV = 31,
- .defenseIV = 30,
- .speedIV = 30,
- .spAttackIV = 30,
- .spDefenseIV = 31,
- .abilityNum = 0,
- .personality = 0x302,
- .nickname = _("UNOWN"),
- .friendship = 255,
- },
- [4] =
- {
- .species = SPECIES_UNOWN,
- .heldItem = ITEM_SOFT_SAND,
- .moves = {MOVE_HIDDEN_POWER, MOVE_NONE, MOVE_NONE, MOVE_NONE},
- .level = 0,
- .ppBonuses = 0,
- .hpEV = 255,
- .attackEV = 255,
- .otId = TRAINER_HILL_OTID,
- .hpIV = 31,
- .attackIV = 30,
- .defenseIV = 31,
- .speedIV = 31,
- .spAttackIV = 30,
- .spDefenseIV = 30,
- .abilityNum = 0,
- .personality = 0x203,
- .nickname = _("UNOWN"),
- .friendship = 255,
- },
- [5] =
- {
- .species = SPECIES_UNOWN,
- .heldItem = ITEM_TWISTED_SPOON,
- .moves = {MOVE_HIDDEN_POWER, MOVE_NONE, MOVE_NONE, MOVE_NONE},
- .level = 0,
- .ppBonuses = 0,
- .hpEV = 255,
- .spAttackEV = 255,
- .otId = TRAINER_HILL_OTID,
- .hpIV = 31,
- .attackIV = 31,
- .defenseIV = 30,
- .speedIV = 30,
- .spAttackIV = 31,
- .spDefenseIV = 31,
- .abilityNum = 0,
- .personality = 0x301,
- .nickname = _("UNOWN"),
- .friendship = 255,
+ [0] =
+ {
+ .name = _("KIMBERLY"),
+ .facilityClass = FACILITY_CLASS_POKEFAN_F,
+ .unused = 0,
+ .speechBefore = {EC_WORD_I, EC_WORD_LIKE, EC_WORD_WORKING, EC_WORD_AT, EC_WORD_MY, EC_WORD_OWN_TEMPO},
+ .speechWin = {EC_WORD_I_AM, EC_WORD_NOT, EC_WORD_BAD, EC_WORD_YOU, EC_WORD_THINK, EC_WORD_QUES},
+ .speechLose = {EC_WORD_YOU_RE, EC_WORD_A, EC_WORD_MEAN, EC_WORD_KID, EC_WORD_IT, EC_WORD_SEEMS},
+ .speechAfter = {EC_WORD_MY, EC_WORD_OWN_TEMPO, EC_WORD_IS, EC_WORD_RIGHT, EC_WORD_FOR, EC_WORD_ME},
+ .mons =
+ {
+ [0] =
+ {
+ .species = SPECIES_UNOWN,
+ .heldItem = ITEM_MIRACLE_SEED,
+ .moves = {MOVE_HIDDEN_POWER, MOVE_NONE, MOVE_NONE, MOVE_NONE},
+ .level = 0,
+ .ppBonuses = 0,
+ .hpEV = 255,
+ .spAttackEV = 255,
+ .otId = TRAINER_HILL_OTID,
+ .hpIV = 30,
+ .attackIV = 31,
+ .defenseIV = 30,
+ .speedIV = 31,
+ .spAttackIV = 30,
+ .spDefenseIV = 31,
+ .abilityNum = 0,
+ .personality = 0x202,
+ .nickname = _("UNOWN"),
+ .friendship = 255,
+ },
+ [1] =
+ {
+ .species = SPECIES_UNOWN,
+ .heldItem = ITEM_MYSTIC_WATER,
+ .moves = {MOVE_HIDDEN_POWER, MOVE_NONE, MOVE_NONE, MOVE_NONE},
+ .level = 0,
+ .ppBonuses = 0,
+ .hpEV = 255,
+ .spAttackEV = 255,
+ .otId = TRAINER_HILL_OTID,
+ .hpIV = 30,
+ .attackIV = 31,
+ .defenseIV = 31,
+ .speedIV = 30,
+ .spAttackIV = 30,
+ .spDefenseIV = 31,
+ .abilityNum = 0,
+ .personality = 0x10001,
+ .nickname = _("UNOWN"),
+ .friendship = 255,
+ },
+ [2] =
+ {
+ .species = SPECIES_UNOWN,
+ .heldItem = ITEM_BLACK_BELT,
+ .moves = {MOVE_HIDDEN_POWER, MOVE_NONE, MOVE_NONE, MOVE_NONE},
+ .level = 0,
+ .ppBonuses = 0,
+ .hpEV = 255,
+ .spAttackEV = 255,
+ .otId = TRAINER_HILL_OTID,
+ .hpIV = 30,
+ .attackIV = 30,
+ .defenseIV = 30,
+ .speedIV = 30,
+ .spAttackIV = 30,
+ .spDefenseIV = 30,
+ .abilityNum = 0,
+ .personality = 0x102,
+ .nickname = _("UNOWN"),
+ .friendship = 255,
+ },
+ [3] =
+ {
+ .species = SPECIES_SPINDA,
+ .heldItem = ITEM_LUM_BERRY,
+ .moves = {MOVE_TEETER_DANCE, MOVE_DIZZY_PUNCH, MOVE_CALM_MIND, MOVE_BATON_PASS},
+ .level = 0,
+ .ppBonuses = 0,
+ .hpEV = 110,
+ .defenseEV = 200,
+ .spDefenseEV = 200,
+ .otId = TRAINER_HILL_OTID,
+ .hpIV = 15,
+ .attackIV = 15,
+ .defenseIV = 15,
+ .speedIV = 15,
+ .spAttackIV = 15,
+ .spDefenseIV = 15,
+ .abilityNum = 0,
+ .personality = 0x88FE980F,
+ .nickname = _("SPINDA"),
+ .friendship = 255,
+ },
+ [4] =
+ {
+ .species = SPECIES_PLUSLE,
+ .heldItem = ITEM_BRIGHT_POWDER,
+ .moves = {MOVE_HELPING_HAND, MOVE_THUNDERBOLT, MOVE_AGILITY, MOVE_BATON_PASS},
+ .level = 0,
+ .ppBonuses = 0,
+ .speedEV = 255,
+ .spAttackEV = 255,
+ .otId = TRAINER_HILL_OTID,
+ .hpIV = 15,
+ .attackIV = 15,
+ .defenseIV = 15,
+ .speedIV = 15,
+ .spAttackIV = 15,
+ .spDefenseIV = 15,
+ .abilityNum = 0,
+ .personality = 0xF,
+ .nickname = _("PLUSLE"),
+ .friendship = 255,
+ },
+ [5] =
+ {
+ .species = SPECIES_VOLBEAT,
+ .heldItem = ITEM_SITRUS_BERRY,
+ .moves = {MOVE_HELPING_HAND, MOVE_SIGNAL_BEAM, MOVE_SOLAR_BEAM, MOVE_MOONLIGHT},
+ .level = 0,
+ .ppBonuses = 0,
+ .speedEV = 255,
+ .spAttackEV = 255,
+ .otId = TRAINER_HILL_OTID,
+ .hpIV = 15,
+ .attackIV = 15,
+ .defenseIV = 15,
+ .speedIV = 15,
+ .spAttackIV = 15,
+ .spDefenseIV = 15,
+ .abilityNum = 1,
+ .personality = 0xF,
+ .nickname = _("VOLBEAT"),
+ .friendship = 255,
+ },
+ },
+ },
+ [1] =
+ {
+ .name = _("FRANCISCO"),
+ .facilityClass = FACILITY_CLASS_POKEFAN_M,
+ .unused = 0,
+ .speechBefore = {EC_WORD_I, EC_WORD_STUDY, EC_WORD_EVERY, EC_WORD_DAY, EC_WORD_TOO, 0xFFFF},
+ .speechWin = {EC_WORD_SO, EC_WORD_THAT_S, EC_WORD_HOW, EC_WORD_YOU, EC_WORD_LOSE, 0xFFFF},
+ .speechLose = {EC_WORD_NO, EC_WORD_WONDER, EC_WORD_I, EC_WORD_COULDN_T, EC_WORD_BEAT, EC_WORD_YOU},
+ .speechAfter = {EC_WORD_YES, EC_WORD_ELLIPSIS, 0xFFFF, EC_WORD_THANK_YOU, 0xFFFF, 0xFFFF},
+ .mons =
+ {
+ [0] =
+ {
+ .species = SPECIES_SPINDA,
+ .heldItem = ITEM_LUM_BERRY,
+ .moves = {MOVE_TEETER_DANCE, MOVE_DIZZY_PUNCH, MOVE_CALM_MIND, MOVE_BATON_PASS},
+ .level = 0,
+ .ppBonuses = 0,
+ .hpEV = 110,
+ .defenseEV = 200,
+ .spDefenseEV = 200,
+ .otId = TRAINER_HILL_OTID,
+ .hpIV = 15,
+ .attackIV = 15,
+ .defenseIV = 15,
+ .speedIV = 15,
+ .spAttackIV = 15,
+ .spDefenseIV = 15,
+ .abilityNum = 0,
+ .personality = 0xE2880098,
+ .nickname = _("SPINDA"),
+ .friendship = 255,
+ },
+ [1] =
+ {
+ .species = SPECIES_MINUN,
+ .heldItem = ITEM_BRIGHT_POWDER,
+ .moves = {MOVE_HELPING_HAND, MOVE_THUNDERBOLT, MOVE_AGILITY, MOVE_BATON_PASS},
+ .level = 0,
+ .ppBonuses = 0,
+ .speedEV = 255,
+ .spAttackEV = 255,
+ .otId = TRAINER_HILL_OTID,
+ .hpIV = 15,
+ .attackIV = 15,
+ .defenseIV = 15,
+ .speedIV = 15,
+ .spAttackIV = 15,
+ .spDefenseIV = 15,
+ .abilityNum = 0,
+ .personality = 0x8C,
+ .nickname = _("MINUN"),
+ .friendship = 255,
+ },
+ [2] =
+ {
+ .species = SPECIES_ILLUMISE,
+ .heldItem = ITEM_SITRUS_BERRY,
+ .moves = {MOVE_HELPING_HAND, MOVE_WISH, MOVE_THUNDERBOLT, MOVE_MOONLIGHT},
+ .level = 0,
+ .ppBonuses = 0,
+ .speedEV = 255,
+ .spAttackEV = 255,
+ .otId = TRAINER_HILL_OTID,
+ .hpIV = 15,
+ .attackIV = 15,
+ .defenseIV = 15,
+ .speedIV = 15,
+ .spAttackIV = 15,
+ .spDefenseIV = 15,
+ .abilityNum = 0,
+ .personality = 0xF,
+ .nickname = _("ILLUMISE"),
+ .friendship = 255,
+ },
+ [3] =
+ {
+ .species = SPECIES_UNOWN,
+ .heldItem = ITEM_CHARCOAL,
+ .moves = {MOVE_HIDDEN_POWER, MOVE_NONE, MOVE_NONE, MOVE_NONE},
+ .level = 0,
+ .ppBonuses = 0,
+ .hpEV = 255,
+ .spAttackEV = 255,
+ .otId = TRAINER_HILL_OTID,
+ .hpIV = 30,
+ .attackIV = 31,
+ .defenseIV = 30,
+ .speedIV = 30,
+ .spAttackIV = 30,
+ .spDefenseIV = 31,
+ .abilityNum = 0,
+ .personality = 0x302,
+ .nickname = _("UNOWN"),
+ .friendship = 255,
+ },
+ [4] =
+ {
+ .species = SPECIES_UNOWN,
+ .heldItem = ITEM_SOFT_SAND,
+ .moves = {MOVE_HIDDEN_POWER, MOVE_NONE, MOVE_NONE, MOVE_NONE},
+ .level = 0,
+ .ppBonuses = 0,
+ .hpEV = 255,
+ .attackEV = 255,
+ .otId = TRAINER_HILL_OTID,
+ .hpIV = 31,
+ .attackIV = 30,
+ .defenseIV = 31,
+ .speedIV = 31,
+ .spAttackIV = 30,
+ .spDefenseIV = 30,
+ .abilityNum = 0,
+ .personality = 0x203,
+ .nickname = _("UNOWN"),
+ .friendship = 255,
+ },
+ [5] =
+ {
+ .species = SPECIES_UNOWN,
+ .heldItem = ITEM_TWISTED_SPOON,
+ .moves = {MOVE_HIDDEN_POWER, MOVE_NONE, MOVE_NONE, MOVE_NONE},
+ .level = 0,
+ .ppBonuses = 0,
+ .hpEV = 255,
+ .spAttackEV = 255,
+ .otId = TRAINER_HILL_OTID,
+ .hpIV = 31,
+ .attackIV = 31,
+ .defenseIV = 30,
+ .speedIV = 30,
+ .spAttackIV = 31,
+ .spDefenseIV = 31,
+ .abilityNum = 0,
+ .personality = 0x301,
+ .nickname = _("UNOWN"),
+ .friendship = 255,
+ },
+ },
},
- },
},
- },
- .data = {0x31, 0x3B, 0x3B, 0x3B, 0x39, 0x39, 0x13, 0x14, 0x15, 0x38, 0x39, 0x3A, 0x3B, 0x3B, 0x3B, 0x8, 0x69, 0x40, 0x6D, 0x41, 0x73, 0x41, 0x5E, 0x41, 0x71, 0x42, 0x45, 0x45, 0x45, 0x45, 0x45, 0x8, 0x43, 0x73, 0x64, 0x73, 0x43, 0x73, 0x64, 0x73, 0x41, 0x73, 0x45, 0x45, 0x45, 0x45, 0x45, 0x8, 0x65, 0x40, 0x73, 0x42, 0x6D, 0x42, 0x73, 0x42, 0x6D, 0x42, 0x45, 0x45, 0x45, 0x45, 0x45, 0x8, 0x6C, 0x73, 0x41, 0x73, 0x64, 0x73, 0x40, 0x73, 0x64, 0x73, 0x40, 0x73, 0x42, 0x73, 0x41, 0x8, 0x69, 0x40, 0x6D, 0x41, 0x73, 0x40, 0x6D, 0x43, 0x73, 0x43, 0x6D, 0x42, 0x73, 0x42, 0x6D, 0x8, 0x40, 0x73, 0x64, 0x73, 0x43, 0x73, 0x64, 0x73, 0x41, 0x73, 0x64, 0x73, 0x41, 0x73, 0x64, 0x8, 0x65, 0x42, 0x73, 0x42, 0x6D, 0x41, 0x73, 0x40, 0x6D, 0x42, 0x73, 0x41, 0x6D, 0x42, 0x73, 0x8, 0x6C, 0x73, 0x41, 0x73, 0x64, 0x73, 0x42, 0x73, 0x64, 0x73, 0x42, 0x73, 0x64, 0x73, 0x42, 0x8, 0x69, 0x40, 0x6D, 0x41, 0x73, 0x41, 0x6D, 0x42, 0x73, 0x43, 0x6D, 0x41, 0x73, 0x43, 0x6D, 0x8, 0x40, 0x73, 0x64, 0x73, 0x43, 0x73, 0x64, 0x73, 0x43, 0x73, 0x64, 0x73, 0x42, 0x73, 0x64, 0x8, 0x65, 0x42, 0x73, 0x42, 0x6D, 0x43, 0x73, 0x42, 0x6D, 0x42, 0x73, 0x41, 0x6D, 0x40, 0x73, 0x8, 0x6C, 0x73, 0x40, 0x73, 0x64, 0x73, 0x41, 0x73, 0x64, 0x73, 0x42, 0x73, 0x64, 0x73, 0x42, 0x8, 0x69, 0x40, 0x6D, 0x42, 0x73, 0x42, 0x6D, 0x43, 0x73, 0x40, 0x6D, 0x41, 0x73, 0x40, 0x6D, 0x8, 0x40, 0x73, 0x64, 0x73, 0x40, 0x73, 0x64, 0x73, 0x40, 0x73, 0x64, 0x73, 0x43, 0x73, 0x64, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8},
- .unk3A0 = {0x381, 0x1, 0x2201, 0x1, 0x8881, 0x1, 0x2223, 0x1, 0x8889, 0x1, 0x2223, 0x1, 0x8889, 0x1, 0x2223, 0xFFFF},
- .coords = {42, 46},
- .direction = 0x23,
- .range = 0x33,
+ .display = {
+ .data = {0x31, 0x3B, 0x3B, 0x3B, 0x39, 0x39, 0x13, 0x14, 0x15, 0x38, 0x39, 0x3A, 0x3B, 0x3B, 0x3B, 0x8, 0x69, 0x40, 0x6D, 0x41, 0x73, 0x41, 0x5E, 0x41, 0x71, 0x42, 0x45, 0x45, 0x45, 0x45, 0x45, 0x8, 0x43, 0x73, 0x64, 0x73, 0x43, 0x73, 0x64, 0x73, 0x41, 0x73, 0x45, 0x45, 0x45, 0x45, 0x45, 0x8, 0x65, 0x40, 0x73, 0x42, 0x6D, 0x42, 0x73, 0x42, 0x6D, 0x42, 0x45, 0x45, 0x45, 0x45, 0x45, 0x8, 0x6C, 0x73, 0x41, 0x73, 0x64, 0x73, 0x40, 0x73, 0x64, 0x73, 0x40, 0x73, 0x42, 0x73, 0x41, 0x8, 0x69, 0x40, 0x6D, 0x41, 0x73, 0x40, 0x6D, 0x43, 0x73, 0x43, 0x6D, 0x42, 0x73, 0x42, 0x6D, 0x8, 0x40, 0x73, 0x64, 0x73, 0x43, 0x73, 0x64, 0x73, 0x41, 0x73, 0x64, 0x73, 0x41, 0x73, 0x64, 0x8, 0x65, 0x42, 0x73, 0x42, 0x6D, 0x41, 0x73, 0x40, 0x6D, 0x42, 0x73, 0x41, 0x6D, 0x42, 0x73, 0x8, 0x6C, 0x73, 0x41, 0x73, 0x64, 0x73, 0x42, 0x73, 0x64, 0x73, 0x42, 0x73, 0x64, 0x73, 0x42, 0x8, 0x69, 0x40, 0x6D, 0x41, 0x73, 0x41, 0x6D, 0x42, 0x73, 0x43, 0x6D, 0x41, 0x73, 0x43, 0x6D, 0x8, 0x40, 0x73, 0x64, 0x73, 0x43, 0x73, 0x64, 0x73, 0x43, 0x73, 0x64, 0x73, 0x42, 0x73, 0x64, 0x8, 0x65, 0x42, 0x73, 0x42, 0x6D, 0x43, 0x73, 0x42, 0x6D, 0x42, 0x73, 0x41, 0x6D, 0x40, 0x73, 0x8, 0x6C, 0x73, 0x40, 0x73, 0x64, 0x73, 0x41, 0x73, 0x64, 0x73, 0x42, 0x73, 0x64, 0x73, 0x42, 0x8, 0x69, 0x40, 0x6D, 0x42, 0x73, 0x42, 0x6D, 0x43, 0x73, 0x40, 0x6D, 0x41, 0x73, 0x40, 0x6D, 0x8, 0x40, 0x73, 0x64, 0x73, 0x40, 0x73, 0x64, 0x73, 0x40, 0x73, 0x64, 0x73, 0x43, 0x73, 0x64, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8},
+ .unk3A0 = {0x381, 0x1, 0x2201, 0x1, 0x8881, 0x1, 0x2223, 0x1, 0x8889, 0x1, 0x2223, 0x1, 0x8889, 0x1, 0x2223, 0xFFFF},
+ .coords = {42, 46},
+ .direction = 0x23,
+ .range = 0x33,
+ }
},
- },
};
+
static const struct TrHillTag sDataTagUnique =
{
.unkField_0 = 8,
.unused1 = 3,
- .unkField_2 = 4,
- .unused3 = 0,
- .unused4 = 243,
- .unused5 = 82,
- .unused6 = 6,
- .floors =
- {
- [0] =
+ .numFloors = 4,
+ .checksum = 0x000652F3
+};
+
+static const struct TrHillFloor sDataTagUnique_floors[] = {
+ [0] =
{
.unk0 = 0x31,
.unk1 = 0x32,
.trainers =
- {
- [0] =
- {
- .name = _("MEREDITH"),
- .facilityClass = FACILITY_CLASS_PKMN_RANGER_F,
- .unused = 0,
- .speechBefore = {EC_WORD_UM, EC_WORD_ELLIPSIS, 0xFFFF, EC_WORD_I, EC_WORD_ELLIPSIS, 0xFFFF},
- .speechWin = {EC_WORD_OH, EC_WORD_EXCL, 0xFFFF, EC_WORD_UM, EC_WORD_ELLIPSIS, EC_WORD_YAY},
- .speechLose = {EC_WORD_UM, EC_WORD_ELLIPSIS, 0xFFFF, EC_WORD_WAAAH, EC_WORD_ELLIPSIS, 0xFFFF},
- .speechAfter = {EC_WORD_UM, EC_WORD_ELLIPSIS, 0xFFFF, EC_WORD_I_AM, EC_WORD_SAD, EC_WORD_ELLIPSIS},
- .mons =
- {
- [0] =
- {
- .species = SPECIES_SUNFLORA,
- .heldItem = ITEM_PERSIM_BERRY,
- .moves = {MOVE_PETAL_DANCE, MOVE_GRASS_WHISTLE, MOVE_LIGHT_SCREEN, MOVE_SUNNY_DAY},
- .level = 0,
- .ppBonuses = 0,
- .hpEV = 255,
- .defenseEV = 155,
- .spDefenseEV = 100,
- .otId = TRAINER_HILL_OTID,
- .hpIV = 15,
- .attackIV = 15,
- .defenseIV = 15,
- .speedIV = 15,
- .spAttackIV = 15,
- .spDefenseIV = 15,
- .abilityNum = 0,
- .personality = 0x0,
- .nickname = _("SUNFLORA"),
- .friendship = 255,
- },
- [1] =
- {
- .species = SPECIES_TANGELA,
- .heldItem = ITEM_QUICK_CLAW,
- .moves = {MOVE_GIGA_DRAIN, MOVE_SLEEP_POWDER, MOVE_AMNESIA, MOVE_SUNNY_DAY},
- .level = 0,
- .ppBonuses = 0,
- .hpEV = 255,
- .spDefenseEV = 255,
- .otId = TRAINER_HILL_OTID,
- .hpIV = 15,
- .attackIV = 15,
- .defenseIV = 15,
- .speedIV = 15,
- .spAttackIV = 15,
- .spDefenseIV = 15,
- .abilityNum = 0,
- .personality = 0x91,
- .nickname = _("TANGELA"),
- .friendship = 255,
- },
- [2] =
- {
- .species = SPECIES_VENUSAUR,
- .heldItem = ITEM_LEFTOVERS,
- .moves = {MOVE_SOLAR_BEAM, MOVE_EARTHQUAKE, MOVE_SYNTHESIS, MOVE_SUNNY_DAY},
- .level = 0,
- .ppBonuses = 0,
- .hpEV = 100,
- .attackEV = 110,
- .defenseEV = 100,
- .spAttackEV = 100,
- .spDefenseEV = 100,
- .otId = TRAINER_HILL_OTID,
- .hpIV = 15,
- .attackIV = 15,
- .defenseIV = 15,
- .speedIV = 15,
- .spAttackIV = 15,
- .spDefenseIV = 15,
- .abilityNum = 0,
- .personality = 0x1F,
- .nickname = _("VENUSAUR"),
- .friendship = 255,
- },
- [3] =
- {
- .species = SPECIES_LANTURN,
- .heldItem = ITEM_PERSIM_BERRY,
- .moves = {MOVE_SPARK, MOVE_WATER_PULSE, MOVE_CONFUSE_RAY, MOVE_RAIN_DANCE},
- .level = 0,
- .ppBonuses = 0,
- .speedEV = 255,
- .spAttackEV = 255,
- .otId = TRAINER_HILL_OTID,
- .hpIV = 15,
- .attackIV = 15,
- .defenseIV = 15,
- .speedIV = 15,
- .spAttackIV = 15,
- .spDefenseIV = 15,
- .abilityNum = 0,
- .personality = 0xF,
- .nickname = _("LANTURN"),
- .friendship = 255,
- },
- [4] =
- {
- .species = SPECIES_MANECTRIC,
- .heldItem = ITEM_FOCUS_BAND,
- .moves = {MOVE_THUNDERBOLT, MOVE_HEADBUTT, MOVE_BITE, MOVE_RAIN_DANCE},
- .level = 0,
- .ppBonuses = 0,
- .speedEV = 255,
- .spAttackEV = 255,
- .otId = TRAINER_HILL_OTID,
- .hpIV = 15,
- .attackIV = 15,
- .defenseIV = 15,
- .speedIV = 15,
- .spAttackIV = 15,
- .spDefenseIV = 15,
- .abilityNum = 1,
- .personality = 0xF,
- .nickname = _("MANECTRIC"),
- .friendship = 255,
- },
- [5] =
- {
- .species = SPECIES_RAIKOU,
- .heldItem = ITEM_BRIGHT_POWDER,
- .moves = {MOVE_THUNDER, MOVE_CRUNCH, MOVE_ROAR, MOVE_RAIN_DANCE},
- .level = 0,
- .ppBonuses = 0,
- .speedEV = 255,
- .spAttackEV = 255,
- .otId = TRAINER_HILL_OTID,
- .hpIV = 15,
- .attackIV = 15,
- .defenseIV = 15,
- .speedIV = 15,
- .spAttackIV = 15,
- .spDefenseIV = 15,
- .abilityNum = 0,
- .personality = 0xF,
- .nickname = _("RAIKOU"),
- .friendship = 255,
- },
- },
- },
- [1] =
{
- .name = _("BERNARD"),
- .facilityClass = FACILITY_CLASS_KINDLER,
- .unused = 0,
- .speechBefore = {EC_WORD_I, EC_WORD_CAN_T, EC_WORD_LOSE, EC_WORD_THIS, EC_WORD_HOT, EC_WORD_BATTLE},
- .speechWin = {EC_WORD_DID, EC_WORD_I, EC_WORD_COOL, EC_WORD_YOU, EC_WORD_DOWN, EC_WORD_QUES},
- .speechLose = {EC_WORD_AIYEEH, EC_WORD_EXCL, EC_WORD_YOU_RE, EC_WORD_A, EC_WORD_TERRIBLE, EC_WORD_PERSON},
- .speechAfter = {EC_WORD_YOUR, EC_WORD_HEART, EC_WORD_MUST_BE, EC_WORD_ICE, EC_WORD_COLD, EC_WORD_ELLIPSIS},
- .mons =
- {
- [0] =
- {
- .species = SPECIES_RELICANTH,
- .heldItem = ITEM_QUICK_CLAW,
- .moves = {MOVE_ANCIENT_POWER, MOVE_WATER_PULSE, MOVE_MUD_SPORT, MOVE_RAIN_DANCE},
- .level = 0,
- .ppBonuses = 0,
- .hpEV = 155,
- .defenseEV = 100,
- .spDefenseEV = 255,
- .otId = TRAINER_HILL_OTID,
- .hpIV = 15,
- .attackIV = 15,
- .defenseIV = 15,
- .speedIV = 15,
- .spAttackIV = 15,
- .spDefenseIV = 15,
- .abilityNum = 0,
- .personality = 0x2F,
- .nickname = _("RELICANTH"),
- .friendship = 255,
- },
- [1] =
- {
- .species = SPECIES_GOLDUCK,
- .heldItem = ITEM_LAX_INCENSE,
- .moves = {MOVE_SURF, MOVE_PSYBEAM, MOVE_BRICK_BREAK, MOVE_RAIN_DANCE},
- .level = 0,
- .ppBonuses = 0,
- .speedEV = 255,
- .spAttackEV = 255,
- .otId = TRAINER_HILL_OTID,
- .hpIV = 15,
- .attackIV = 15,
- .defenseIV = 15,
- .speedIV = 15,
- .spAttackIV = 15,
- .spDefenseIV = 15,
- .abilityNum = 0,
- .personality = 0xF,
- .nickname = _("GOLDUCK"),
- .friendship = 255,
- },
- [2] =
- {
- .species = SPECIES_BLASTOISE,
- .heldItem = ITEM_SHELL_BELL,
- .moves = {MOVE_HYDRO_PUMP, MOVE_BITE, MOVE_MIRROR_COAT, MOVE_RAIN_DANCE},
- .level = 0,
- .ppBonuses = 0,
- .speedEV = 255,
- .spAttackEV = 255,
- .otId = TRAINER_HILL_OTID,
- .hpIV = 15,
- .attackIV = 15,
- .defenseIV = 15,
- .speedIV = 15,
- .spAttackIV = 15,
- .spDefenseIV = 15,
- .abilityNum = 0,
- .personality = 0x28,
- .nickname = _("BLASTOISE"),
- .friendship = 255,
- },
- [3] =
- {
- .species = SPECIES_MAGCARGO,
- .heldItem = ITEM_QUICK_CLAW,
- .moves = {MOVE_HEAT_WAVE, MOVE_ROCK_SLIDE, MOVE_PROTECT, MOVE_SUNNY_DAY},
- .level = 0,
- .ppBonuses = 0,
- .hpEV = 255,
- .spDefenseEV = 255,
- .otId = TRAINER_HILL_OTID,
- .hpIV = 15,
- .attackIV = 15,
- .defenseIV = 15,
- .speedIV = 15,
- .spAttackIV = 15,
- .spDefenseIV = 15,
- .abilityNum = 1,
- .personality = 0x93,
- .nickname = _("MAGCARGO"),
- .friendship = 255,
- },
- [4] =
- {
- .species = SPECIES_RAPIDASH,
- .heldItem = ITEM_KINGS_ROCK,
- .moves = {MOVE_FIRE_BLAST, MOVE_BOUNCE, MOVE_QUICK_ATTACK, MOVE_SUNNY_DAY},
- .level = 0,
- .ppBonuses = 0,
- .speedEV = 255,
- .spAttackEV = 255,
- .otId = TRAINER_HILL_OTID,
- .hpIV = 15,
- .attackIV = 15,
- .defenseIV = 15,
- .speedIV = 15,
- .spAttackIV = 15,
- .spDefenseIV = 15,
- .abilityNum = 1,
- .personality = 0xF,
- .nickname = _("RAPIDASH"),
- .friendship = 255,
- },
- [5] =
- {
- .species = SPECIES_MOLTRES,
- .heldItem = ITEM_BRIGHT_POWDER,
- .moves = {MOVE_SKY_ATTACK, MOVE_AERIAL_ACE, MOVE_ROAR, MOVE_SUNNY_DAY},
- .level = 0,
- .ppBonuses = 0,
- .speedEV = 255,
- .spAttackEV = 255,
- .otId = TRAINER_HILL_OTID,
- .hpIV = 15,
- .attackIV = 15,
- .defenseIV = 15,
- .speedIV = 15,
- .spAttackIV = 15,
- .spDefenseIV = 15,
- .abilityNum = 0,
- .personality = 0xF,
- .nickname = _("MOLTRES"),
- .friendship = 255,
+ [0] =
+ {
+ .name = _("MEREDITH"),
+ .facilityClass = FACILITY_CLASS_PKMN_RANGER_F,
+ .unused = 0,
+ .speechBefore = {EC_WORD_UM, EC_WORD_ELLIPSIS, 0xFFFF, EC_WORD_I, EC_WORD_ELLIPSIS, 0xFFFF},
+ .speechWin = {EC_WORD_OH, EC_WORD_EXCL, 0xFFFF, EC_WORD_UM, EC_WORD_ELLIPSIS, EC_WORD_YAY},
+ .speechLose = {EC_WORD_UM, EC_WORD_ELLIPSIS, 0xFFFF, EC_WORD_WAAAH, EC_WORD_ELLIPSIS, 0xFFFF},
+ .speechAfter = {EC_WORD_UM, EC_WORD_ELLIPSIS, 0xFFFF, EC_WORD_I_AM, EC_WORD_SAD, EC_WORD_ELLIPSIS},
+ .mons =
+ {
+ [0] =
+ {
+ .species = SPECIES_SUNFLORA,
+ .heldItem = ITEM_PERSIM_BERRY,
+ .moves = {MOVE_PETAL_DANCE, MOVE_GRASS_WHISTLE, MOVE_LIGHT_SCREEN, MOVE_SUNNY_DAY},
+ .level = 0,
+ .ppBonuses = 0,
+ .hpEV = 255,
+ .defenseEV = 155,
+ .spDefenseEV = 100,
+ .otId = TRAINER_HILL_OTID,
+ .hpIV = 15,
+ .attackIV = 15,
+ .defenseIV = 15,
+ .speedIV = 15,
+ .spAttackIV = 15,
+ .spDefenseIV = 15,
+ .abilityNum = 0,
+ .personality = 0x0,
+ .nickname = _("SUNFLORA"),
+ .friendship = 255,
+ },
+ [1] =
+ {
+ .species = SPECIES_TANGELA,
+ .heldItem = ITEM_QUICK_CLAW,
+ .moves = {MOVE_GIGA_DRAIN, MOVE_SLEEP_POWDER, MOVE_AMNESIA, MOVE_SUNNY_DAY},
+ .level = 0,
+ .ppBonuses = 0,
+ .hpEV = 255,
+ .spDefenseEV = 255,
+ .otId = TRAINER_HILL_OTID,
+ .hpIV = 15,
+ .attackIV = 15,
+ .defenseIV = 15,
+ .speedIV = 15,
+ .spAttackIV = 15,
+ .spDefenseIV = 15,
+ .abilityNum = 0,
+ .personality = 0x91,
+ .nickname = _("TANGELA"),
+ .friendship = 255,
+ },
+ [2] =
+ {
+ .species = SPECIES_VENUSAUR,
+ .heldItem = ITEM_LEFTOVERS,
+ .moves = {MOVE_SOLAR_BEAM, MOVE_EARTHQUAKE, MOVE_SYNTHESIS, MOVE_SUNNY_DAY},
+ .level = 0,
+ .ppBonuses = 0,
+ .hpEV = 100,
+ .attackEV = 110,
+ .defenseEV = 100,
+ .spAttackEV = 100,
+ .spDefenseEV = 100,
+ .otId = TRAINER_HILL_OTID,
+ .hpIV = 15,
+ .attackIV = 15,
+ .defenseIV = 15,
+ .speedIV = 15,
+ .spAttackIV = 15,
+ .spDefenseIV = 15,
+ .abilityNum = 0,
+ .personality = 0x1F,
+ .nickname = _("VENUSAUR"),
+ .friendship = 255,
+ },
+ [3] =
+ {
+ .species = SPECIES_LANTURN,
+ .heldItem = ITEM_PERSIM_BERRY,
+ .moves = {MOVE_SPARK, MOVE_WATER_PULSE, MOVE_CONFUSE_RAY, MOVE_RAIN_DANCE},
+ .level = 0,
+ .ppBonuses = 0,
+ .speedEV = 255,
+ .spAttackEV = 255,
+ .otId = TRAINER_HILL_OTID,
+ .hpIV = 15,
+ .attackIV = 15,
+ .defenseIV = 15,
+ .speedIV = 15,
+ .spAttackIV = 15,
+ .spDefenseIV = 15,
+ .abilityNum = 0,
+ .personality = 0xF,
+ .nickname = _("LANTURN"),
+ .friendship = 255,
+ },
+ [4] =
+ {
+ .species = SPECIES_MANECTRIC,
+ .heldItem = ITEM_FOCUS_BAND,
+ .moves = {MOVE_THUNDERBOLT, MOVE_HEADBUTT, MOVE_BITE, MOVE_RAIN_DANCE},
+ .level = 0,
+ .ppBonuses = 0,
+ .speedEV = 255,
+ .spAttackEV = 255,
+ .otId = TRAINER_HILL_OTID,
+ .hpIV = 15,
+ .attackIV = 15,
+ .defenseIV = 15,
+ .speedIV = 15,
+ .spAttackIV = 15,
+ .spDefenseIV = 15,
+ .abilityNum = 1,
+ .personality = 0xF,
+ .nickname = _("MANECTRIC"),
+ .friendship = 255,
+ },
+ [5] =
+ {
+ .species = SPECIES_RAIKOU,
+ .heldItem = ITEM_BRIGHT_POWDER,
+ .moves = {MOVE_THUNDER, MOVE_CRUNCH, MOVE_ROAR, MOVE_RAIN_DANCE},
+ .level = 0,
+ .ppBonuses = 0,
+ .speedEV = 255,
+ .spAttackEV = 255,
+ .otId = TRAINER_HILL_OTID,
+ .hpIV = 15,
+ .attackIV = 15,
+ .defenseIV = 15,
+ .speedIV = 15,
+ .spAttackIV = 15,
+ .spDefenseIV = 15,
+ .abilityNum = 0,
+ .personality = 0xF,
+ .nickname = _("RAIKOU"),
+ .friendship = 255,
+ },
+ },
+ },
+ [1] =
+ {
+ .name = _("BERNARD"),
+ .facilityClass = FACILITY_CLASS_KINDLER,
+ .unused = 0,
+ .speechBefore = {EC_WORD_I, EC_WORD_CAN_T, EC_WORD_LOSE, EC_WORD_THIS, EC_WORD_HOT, EC_WORD_BATTLE},
+ .speechWin = {EC_WORD_DID, EC_WORD_I, EC_WORD_COOL, EC_WORD_YOU, EC_WORD_DOWN, EC_WORD_QUES},
+ .speechLose = {EC_WORD_AIYEEH, EC_WORD_EXCL, EC_WORD_YOU_RE, EC_WORD_A, EC_WORD_TERRIBLE, EC_WORD_PERSON},
+ .speechAfter = {EC_WORD_YOUR, EC_WORD_HEART, EC_WORD_MUST_BE, EC_WORD_ICE, EC_WORD_COLD, EC_WORD_ELLIPSIS},
+ .mons =
+ {
+ [0] =
+ {
+ .species = SPECIES_RELICANTH,
+ .heldItem = ITEM_QUICK_CLAW,
+ .moves = {MOVE_ANCIENT_POWER, MOVE_WATER_PULSE, MOVE_MUD_SPORT, MOVE_RAIN_DANCE},
+ .level = 0,
+ .ppBonuses = 0,
+ .hpEV = 155,
+ .defenseEV = 100,
+ .spDefenseEV = 255,
+ .otId = TRAINER_HILL_OTID,
+ .hpIV = 15,
+ .attackIV = 15,
+ .defenseIV = 15,
+ .speedIV = 15,
+ .spAttackIV = 15,
+ .spDefenseIV = 15,
+ .abilityNum = 0,
+ .personality = 0x2F,
+ .nickname = _("RELICANTH"),
+ .friendship = 255,
+ },
+ [1] =
+ {
+ .species = SPECIES_GOLDUCK,
+ .heldItem = ITEM_LAX_INCENSE,
+ .moves = {MOVE_SURF, MOVE_PSYBEAM, MOVE_BRICK_BREAK, MOVE_RAIN_DANCE},
+ .level = 0,
+ .ppBonuses = 0,
+ .speedEV = 255,
+ .spAttackEV = 255,
+ .otId = TRAINER_HILL_OTID,
+ .hpIV = 15,
+ .attackIV = 15,
+ .defenseIV = 15,
+ .speedIV = 15,
+ .spAttackIV = 15,
+ .spDefenseIV = 15,
+ .abilityNum = 0,
+ .personality = 0xF,
+ .nickname = _("GOLDUCK"),
+ .friendship = 255,
+ },
+ [2] =
+ {
+ .species = SPECIES_BLASTOISE,
+ .heldItem = ITEM_SHELL_BELL,
+ .moves = {MOVE_HYDRO_PUMP, MOVE_BITE, MOVE_MIRROR_COAT, MOVE_RAIN_DANCE},
+ .level = 0,
+ .ppBonuses = 0,
+ .speedEV = 255,
+ .spAttackEV = 255,
+ .otId = TRAINER_HILL_OTID,
+ .hpIV = 15,
+ .attackIV = 15,
+ .defenseIV = 15,
+ .speedIV = 15,
+ .spAttackIV = 15,
+ .spDefenseIV = 15,
+ .abilityNum = 0,
+ .personality = 0x28,
+ .nickname = _("BLASTOISE"),
+ .friendship = 255,
+ },
+ [3] =
+ {
+ .species = SPECIES_MAGCARGO,
+ .heldItem = ITEM_QUICK_CLAW,
+ .moves = {MOVE_HEAT_WAVE, MOVE_ROCK_SLIDE, MOVE_PROTECT, MOVE_SUNNY_DAY},
+ .level = 0,
+ .ppBonuses = 0,
+ .hpEV = 255,
+ .spDefenseEV = 255,
+ .otId = TRAINER_HILL_OTID,
+ .hpIV = 15,
+ .attackIV = 15,
+ .defenseIV = 15,
+ .speedIV = 15,
+ .spAttackIV = 15,
+ .spDefenseIV = 15,
+ .abilityNum = 1,
+ .personality = 0x93,
+ .nickname = _("MAGCARGO"),
+ .friendship = 255,
+ },
+ [4] =
+ {
+ .species = SPECIES_RAPIDASH,
+ .heldItem = ITEM_KINGS_ROCK,
+ .moves = {MOVE_FIRE_BLAST, MOVE_BOUNCE, MOVE_QUICK_ATTACK, MOVE_SUNNY_DAY},
+ .level = 0,
+ .ppBonuses = 0,
+ .speedEV = 255,
+ .spAttackEV = 255,
+ .otId = TRAINER_HILL_OTID,
+ .hpIV = 15,
+ .attackIV = 15,
+ .defenseIV = 15,
+ .speedIV = 15,
+ .spAttackIV = 15,
+ .spDefenseIV = 15,
+ .abilityNum = 1,
+ .personality = 0xF,
+ .nickname = _("RAPIDASH"),
+ .friendship = 255,
+ },
+ [5] =
+ {
+ .species = SPECIES_MOLTRES,
+ .heldItem = ITEM_BRIGHT_POWDER,
+ .moves = {MOVE_SKY_ATTACK, MOVE_AERIAL_ACE, MOVE_ROAR, MOVE_SUNNY_DAY},
+ .level = 0,
+ .ppBonuses = 0,
+ .speedEV = 255,
+ .spAttackEV = 255,
+ .otId = TRAINER_HILL_OTID,
+ .hpIV = 15,
+ .attackIV = 15,
+ .defenseIV = 15,
+ .speedIV = 15,
+ .spAttackIV = 15,
+ .spDefenseIV = 15,
+ .abilityNum = 0,
+ .personality = 0xF,
+ .nickname = _("MOLTRES"),
+ .friendship = 255,
+ },
+ },
},
- },
},
- },
- .data = {0xF1, 0xF5, 0xFB, 0xF5, 0xE6, 0xE6, 0x1B, 0x14, 0x15, 0xF8, 0xF9, 0xFA, 0xFB, 0xFB, 0xFB, 0x8, 0xF1, 0xEB, 0xFB, 0xEB, 0xEC, 0xEC, 0xEC, 0xF9, 0xE6, 0xEE, 0xF5, 0xF5, 0xF5, 0xF5, 0xF5, 0x8, 0xF1, 0xEB, 0xFB, 0xEB, 0xFB, 0x9B, 0x9B, 0xFB, 0xEB, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEB, 0x8, 0xF1, 0xEB, 0xFB, 0xEB, 0x9B, 0xDB, 0xDB, 0x9B, 0xEC, 0xFB, 0xF5, 0xF5, 0xF5, 0xFB, 0xEB, 0x8, 0xF1, 0xEB, 0xFB, 0xEB, 0xF5, 0x95, 0x95, 0xF5, 0xF5, 0xF5, 0xEB, 0xEC, 0xEB, 0xFB, 0xEB, 0x8, 0xED, 0xEB, 0xFB, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEB, 0xFB, 0xEB, 0xFB, 0xEB, 0x8, 0xF4, 0xEB, 0xFB, 0xF5, 0xF5, 0xF5, 0xF5, 0xF5, 0xF5, 0xF5, 0xEB, 0xFB, 0xEB, 0xFB, 0xEB, 0x8, 0xF1, 0xEB, 0xFB, 0xEB, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xFB, 0xEB, 0xFB, 0xEC, 0x8, 0xF1, 0xEB, 0xFB, 0xEB, 0xFB, 0xF5, 0xF5, 0xF5, 0xF5, 0xF5, 0xF5, 0xF5, 0xEB, 0xF5, 0xFB, 0x8, 0xF1, 0xEC, 0xFB, 0xEB, 0xFB, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEB, 0xFB, 0x8, 0xF1, 0xF5, 0xF5, 0xEB, 0xF5, 0xF5, 0xF5, 0xF5, 0xF5, 0xF5, 0xF5, 0xF5, 0xFB, 0xEB, 0xFB, 0x8, 0xF1, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEB, 0xFB, 0xEB, 0xFB, 0x8, 0xF1, 0xF5, 0xF5, 0xF5, 0xF5, 0xF5, 0xF5, 0xF5, 0xF5, 0xF5, 0xF5, 0xEB, 0xFB, 0xEB, 0xFB, 0x8, 0xF1, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xFB, 0xEC, 0xFB, 0x8, 0xF1, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8},
- .unk3A0 = {0x381, 0x5E01, 0x50FF, 0x5083, 0x503B, 0x5FEB, 0xC02B, 0x5FEB, 0x5009, 0x57FD, 0x1005, 0x7FF5, 0x15, 0x7FF5, 0x1, 0xFFFF},
- .coords = {52, 55},
- .direction = 0x23,
- .range = 0x22,
+ .display = {
+ .data = {0xF1, 0xF5, 0xFB, 0xF5, 0xE6, 0xE6, 0x1B, 0x14, 0x15, 0xF8, 0xF9, 0xFA, 0xFB, 0xFB, 0xFB, 0x8, 0xF1, 0xEB, 0xFB, 0xEB, 0xEC, 0xEC, 0xEC, 0xF9, 0xE6, 0xEE, 0xF5, 0xF5, 0xF5, 0xF5, 0xF5, 0x8, 0xF1, 0xEB, 0xFB, 0xEB, 0xFB, 0x9B, 0x9B, 0xFB, 0xEB, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEB, 0x8, 0xF1, 0xEB, 0xFB, 0xEB, 0x9B, 0xDB, 0xDB, 0x9B, 0xEC, 0xFB, 0xF5, 0xF5, 0xF5, 0xFB, 0xEB, 0x8, 0xF1, 0xEB, 0xFB, 0xEB, 0xF5, 0x95, 0x95, 0xF5, 0xF5, 0xF5, 0xEB, 0xEC, 0xEB, 0xFB, 0xEB, 0x8, 0xED, 0xEB, 0xFB, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEB, 0xFB, 0xEB, 0xFB, 0xEB, 0x8, 0xF4, 0xEB, 0xFB, 0xF5, 0xF5, 0xF5, 0xF5, 0xF5, 0xF5, 0xF5, 0xEB, 0xFB, 0xEB, 0xFB, 0xEB, 0x8, 0xF1, 0xEB, 0xFB, 0xEB, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xFB, 0xEB, 0xFB, 0xEC, 0x8, 0xF1, 0xEB, 0xFB, 0xEB, 0xFB, 0xF5, 0xF5, 0xF5, 0xF5, 0xF5, 0xF5, 0xF5, 0xEB, 0xF5, 0xFB, 0x8, 0xF1, 0xEC, 0xFB, 0xEB, 0xFB, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEB, 0xFB, 0x8, 0xF1, 0xF5, 0xF5, 0xEB, 0xF5, 0xF5, 0xF5, 0xF5, 0xF5, 0xF5, 0xF5, 0xF5, 0xFB, 0xEB, 0xFB, 0x8, 0xF1, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEB, 0xFB, 0xEB, 0xFB, 0x8, 0xF1, 0xF5, 0xF5, 0xF5, 0xF5, 0xF5, 0xF5, 0xF5, 0xF5, 0xF5, 0xF5, 0xEB, 0xFB, 0xEB, 0xFB, 0x8, 0xF1, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xFB, 0xEC, 0xFB, 0x8, 0xF1, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8},
+ .unk3A0 = {0x381, 0x5E01, 0x50FF, 0x5083, 0x503B, 0x5FEB, 0xC02B, 0x5FEB, 0x5009, 0x57FD, 0x1005, 0x7FF5, 0x15, 0x7FF5, 0x1, 0xFFFF},
+ .coords = {52, 55},
+ .direction = 0x23,
+ .range = 0x22,
+ }
},
- [1] =
+ [1] =
{
.unk0 = 0x33,
.unk1 = 0x34,
.trainers =
- {
- [0] =
- {
- .name = _("ABRAHAM"),
- .facilityClass = FACILITY_CLASS_RUIN_MANIAC,
- .unused = 0,
- .speechBefore = {EC_WORD_I, EC_WORD_LIKE, EC_WORD_THIS, EC_WORD_POKEMON, EC_WORD_THE, EC_WORD_BEST},
- .speechWin = {EC_WORD_WHAT, EC_WORD_A, EC_WORD_GREAT, EC_WORD_POKEMON, EC_WORD_IT, EC_WORD_IS},
- .speechLose = {EC_WORD_I, EC_WORD_CONFUSED, EC_WORD_A, EC_WORD_MOVE, EC_WORD_WITH, EC_WORD_ANOTHER},
- .speechAfter = {EC_WORD_I, EC_WORD_WANT, EC_WORD_A, EC_MOVE(SKETCH), EC_WORD_OF, EC_WORD_YOU},
- .mons =
- {
- [0] =
- {
- .species = SPECIES_SMEARGLE,
- .heldItem = ITEM_SCOPE_LENS,
- .moves = {MOVE_EARTHQUAKE, MOVE_SHADOW_BALL, MOVE_AERIAL_ACE, MOVE_IMPRISON},
- .level = 0,
- .ppBonuses = 0,
- .hpEV = 252,
- .attackEV = 6,
- .speedEV = 252,
- .otId = TRAINER_HILL_OTID,
- .hpIV = 15,
- .attackIV = 15,
- .defenseIV = 15,
- .speedIV = 15,
- .spAttackIV = 15,
- .spDefenseIV = 15,
- .abilityNum = 0,
- .personality = 0x8A,
- .nickname = _("SMEARGLE"),
- .friendship = 255,
- },
- [1] =
- {
- .species = SPECIES_SMEARGLE,
- .heldItem = ITEM_CHESTO_BERRY,
- .moves = {MOVE_REST, MOVE_THUNDER_WAVE, MOVE_FLAMETHROWER, MOVE_IMPRISON},
- .level = 0,
- .ppBonuses = 0,
- .hpEV = 252,
- .speedEV = 252,
- .spAttackEV = 6,
- .otId = TRAINER_HILL_OTID,
- .hpIV = 15,
- .attackIV = 15,
- .defenseIV = 15,
- .speedIV = 15,
- .spAttackIV = 15,
- .spDefenseIV = 15,
- .abilityNum = 0,
- .personality = 0x87,
- .nickname = _("SMEARGLE"),
- .friendship = 255,
- },
- [2] =
- {
- .species = SPECIES_SMEARGLE,
- .heldItem = ITEM_QUICK_CLAW,
- .moves = {MOVE_TEETER_DANCE, MOVE_LOCK_ON, MOVE_SHEER_COLD, MOVE_EXPLOSION},
- .level = 0,
- .ppBonuses = 0,
- .hpEV = 252,
- .attackEV = 6,
- .speedEV = 252,
- .otId = TRAINER_HILL_OTID,
- .hpIV = 15,
- .attackIV = 15,
- .defenseIV = 15,
- .speedIV = 15,
- .spAttackIV = 15,
- .spDefenseIV = 15,
- .abilityNum = 0,
- .personality = 0xD,
- .nickname = _("SMEARGLE"),
- .friendship = 255,
- },
- [3] =
- {
- .species = SPECIES_SMEARGLE,
- .heldItem = ITEM_SCOPE_LENS,
- .moves = {MOVE_PSYCHIC, MOVE_SURF, MOVE_THUNDERBOLT, MOVE_IMPRISON},
- .level = 0,
- .ppBonuses = 0,
- .hpEV = 252,
- .speedEV = 252,
- .spAttackEV = 6,
- .otId = TRAINER_HILL_OTID,
- .hpIV = 15,
- .attackIV = 15,
- .defenseIV = 15,
- .speedIV = 15,
- .spAttackIV = 15,
- .spDefenseIV = 15,
- .abilityNum = 0,
- .personality = 0xA,
- .nickname = _("SMEARGLE"),
- .friendship = 255,
- },
- [4] =
- {
- .species = SPECIES_SMEARGLE,
- .heldItem = ITEM_LEFTOVERS,
- .moves = {MOVE_TOXIC, MOVE_PROTECT, MOVE_WILL_O_WISP, MOVE_IMPRISON},
- .level = 0,
- .ppBonuses = 0,
- .hpEV = 252,
- .defenseEV = 6,
- .speedEV = 252,
- .otId = TRAINER_HILL_OTID,
- .hpIV = 15,
- .attackIV = 15,
- .defenseIV = 15,
- .speedIV = 15,
- .spAttackIV = 15,
- .spDefenseIV = 15,
- .abilityNum = 0,
- .personality = 0xA,
- .nickname = _("SMEARGLE"),
- .friendship = 255,
- },
- [5] =
- {
- .species = SPECIES_SMEARGLE,
- .heldItem = ITEM_QUICK_CLAW,
- .moves = {MOVE_TEETER_DANCE, MOVE_LOCK_ON, MOVE_SHEER_COLD, MOVE_DESTINY_BOND},
- .level = 0,
- .ppBonuses = 0,
- .hpEV = 252,
- .defenseEV = 6,
- .speedEV = 252,
- .otId = TRAINER_HILL_OTID,
- .hpIV = 15,
- .attackIV = 15,
- .defenseIV = 15,
- .speedIV = 15,
- .spAttackIV = 15,
- .spDefenseIV = 15,
- .abilityNum = 0,
- .personality = 0x8A,
- .nickname = _("SMEARGLE"),
- .friendship = 255,
- },
- },
- },
- [1] =
{
- .name = _("LUC"),
- .facilityClass = FACILITY_CLASS_TUBER_M,
- .unused = 0,
- .speechBefore = {EC_WORD_I, EC_WORD_HAVE, EC_WORD_A, EC_WORD_COOL, EC_WORD_RARE, EC_WORD_MOVE},
- .speechWin = {EC_WORD_MY, EC_WORD_RARE, EC_WORD_MOVE, EC_WORD_IS, EC_WORD_COOL, EC_WORD_ISN_T_IT_QUES},
- .speechLose = {EC_WORD_DIDN_T, EC_WORD_YOU, EC_WORD_SEE, EC_WORD_MY, EC_WORD_MOVE, EC_WORD_QUES},
- .speechAfter = {EC_WORD_I_AM, EC_WORD_SMART, EC_WORD_BUT, EC_WORD_ALSO, EC_WORD_WEAK, EC_WORD_ELLIPSIS},
- .mons =
- {
- [0] =
- {
- .species = SPECIES_STARYU,
- .heldItem = ITEM_LEFTOVERS,
- .moves = {MOVE_CAMOUFLAGE, MOVE_NONE, MOVE_NONE, MOVE_NONE},
- .level = 0,
- .ppBonuses = 0,
- .hpEV = 252,
- .speedEV = 252,
- .spAttackEV = 6,
- .otId = TRAINER_HILL_OTID,
- .hpIV = 5,
- .attackIV = 5,
- .defenseIV = 5,
- .speedIV = 5,
- .spAttackIV = 5,
- .spDefenseIV = 5,
- .abilityNum = 1,
- .personality = 0xA,
- .nickname = _("STARYU"),
- .friendship = 255,
- },
- [1] =
- {
- .species = SPECIES_MEOWTH,
- .heldItem = ITEM_QUICK_CLAW,
- .moves = {MOVE_PAY_DAY, MOVE_NONE, MOVE_NONE, MOVE_NONE},
- .level = 0,
- .ppBonuses = 0,
- .hpEV = 252,
- .speedEV = 252,
- .spAttackEV = 6,
- .otId = TRAINER_HILL_OTID,
- .hpIV = 5,
- .attackIV = 5,
- .defenseIV = 5,
- .speedIV = 5,
- .spAttackIV = 5,
- .spDefenseIV = 5,
- .abilityNum = 0,
- .personality = 0xD,
- .nickname = _("MEOWTH"),
- .friendship = 255,
- },
- [2] =
- {
- .species = SPECIES_BLAZIKEN,
- .heldItem = ITEM_BRIGHT_POWDER,
- .moves = {MOVE_BLAZE_KICK, MOVE_NONE, MOVE_NONE, MOVE_NONE},
- .level = 0,
- .ppBonuses = 0,
- .hpEV = 252,
- .speedEV = 252,
- .spDefenseEV = 6,
- .otId = TRAINER_HILL_OTID,
- .hpIV = 5,
- .attackIV = 5,
- .defenseIV = 5,
- .speedIV = 5,
- .spAttackIV = 5,
- .spDefenseIV = 5,
- .abilityNum = 0,
- .personality = 0x28,
- .nickname = _("BLAZIKEN"),
- .friendship = 255,
- },
- [3] =
- {
- .species = SPECIES_CUBONE,
- .heldItem = ITEM_THICK_CLUB,
- .moves = {MOVE_BONEMERANG, MOVE_NONE, MOVE_NONE, MOVE_NONE},
- .level = 0,
- .ppBonuses = 0,
- .hpEV = 252,
- .defenseEV = 6,
- .spDefenseEV = 252,
- .otId = TRAINER_HILL_OTID,
- .hpIV = 5,
- .attackIV = 5,
- .defenseIV = 5,
- .speedIV = 5,
- .spAttackIV = 5,
- .spDefenseIV = 5,
- .abilityNum = 1,
- .personality = 0x16,
- .nickname = _("CUBONE"),
- .friendship = 255,
- },
- [4] =
- {
- .species = SPECIES_BEEDRILL,
- .heldItem = ITEM_SHELL_BELL,
- .moves = {MOVE_TWINEEDLE, MOVE_NONE, MOVE_NONE, MOVE_NONE},
- .level = 0,
- .ppBonuses = 0,
- .hpEV = 252,
- .speedEV = 252,
- .otId = TRAINER_HILL_OTID,
- .hpIV = 5,
- .attackIV = 5,
- .defenseIV = 5,
- .speedIV = 5,
- .spAttackIV = 5,
- .spDefenseIV = 5,
- .abilityNum = 0,
- .personality = 0x8A,
- .nickname = _("BEEDRILL"),
- .friendship = 255,
- },
- [5] =
- {
- .species = SPECIES_RATICATE,
- .heldItem = ITEM_FOCUS_BAND,
- .moves = {MOVE_SUPER_FANG, MOVE_NONE, MOVE_NONE, MOVE_NONE},
- .level = 0,
- .ppBonuses = 0,
- .hpEV = 252,
- .defenseEV = 6,
- .speedEV = 252,
- .otId = TRAINER_HILL_OTID,
- .hpIV = 5,
- .attackIV = 5,
- .defenseIV = 5,
- .speedIV = 5,
- .spAttackIV = 5,
- .spDefenseIV = 5,
- .abilityNum = 1,
- .personality = 0xD,
- .nickname = _("RATICATE"),
- .friendship = 255,
+ [0] =
+ {
+ .name = _("ABRAHAM"),
+ .facilityClass = FACILITY_CLASS_RUIN_MANIAC,
+ .unused = 0,
+ .speechBefore = {EC_WORD_I, EC_WORD_LIKE, EC_WORD_THIS, EC_WORD_POKEMON, EC_WORD_THE, EC_WORD_BEST},
+ .speechWin = {EC_WORD_WHAT, EC_WORD_A, EC_WORD_GREAT, EC_WORD_POKEMON, EC_WORD_IT, EC_WORD_IS},
+ .speechLose = {EC_WORD_I, EC_WORD_CONFUSED, EC_WORD_A, EC_WORD_MOVE, EC_WORD_WITH, EC_WORD_ANOTHER},
+ .speechAfter = {EC_WORD_I, EC_WORD_WANT, EC_WORD_A, EC_MOVE(SKETCH), EC_WORD_OF, EC_WORD_YOU},
+ .mons =
+ {
+ [0] =
+ {
+ .species = SPECIES_SMEARGLE,
+ .heldItem = ITEM_SCOPE_LENS,
+ .moves = {MOVE_EARTHQUAKE, MOVE_SHADOW_BALL, MOVE_AERIAL_ACE, MOVE_IMPRISON},
+ .level = 0,
+ .ppBonuses = 0,
+ .hpEV = 252,
+ .attackEV = 6,
+ .speedEV = 252,
+ .otId = TRAINER_HILL_OTID,
+ .hpIV = 15,
+ .attackIV = 15,
+ .defenseIV = 15,
+ .speedIV = 15,
+ .spAttackIV = 15,
+ .spDefenseIV = 15,
+ .abilityNum = 0,
+ .personality = 0x8A,
+ .nickname = _("SMEARGLE"),
+ .friendship = 255,
+ },
+ [1] =
+ {
+ .species = SPECIES_SMEARGLE,
+ .heldItem = ITEM_CHESTO_BERRY,
+ .moves = {MOVE_REST, MOVE_THUNDER_WAVE, MOVE_FLAMETHROWER, MOVE_IMPRISON},
+ .level = 0,
+ .ppBonuses = 0,
+ .hpEV = 252,
+ .speedEV = 252,
+ .spAttackEV = 6,
+ .otId = TRAINER_HILL_OTID,
+ .hpIV = 15,
+ .attackIV = 15,
+ .defenseIV = 15,
+ .speedIV = 15,
+ .spAttackIV = 15,
+ .spDefenseIV = 15,
+ .abilityNum = 0,
+ .personality = 0x87,
+ .nickname = _("SMEARGLE"),
+ .friendship = 255,
+ },
+ [2] =
+ {
+ .species = SPECIES_SMEARGLE,
+ .heldItem = ITEM_QUICK_CLAW,
+ .moves = {MOVE_TEETER_DANCE, MOVE_LOCK_ON, MOVE_SHEER_COLD, MOVE_EXPLOSION},
+ .level = 0,
+ .ppBonuses = 0,
+ .hpEV = 252,
+ .attackEV = 6,
+ .speedEV = 252,
+ .otId = TRAINER_HILL_OTID,
+ .hpIV = 15,
+ .attackIV = 15,
+ .defenseIV = 15,
+ .speedIV = 15,
+ .spAttackIV = 15,
+ .spDefenseIV = 15,
+ .abilityNum = 0,
+ .personality = 0xD,
+ .nickname = _("SMEARGLE"),
+ .friendship = 255,
+ },
+ [3] =
+ {
+ .species = SPECIES_SMEARGLE,
+ .heldItem = ITEM_SCOPE_LENS,
+ .moves = {MOVE_PSYCHIC, MOVE_SURF, MOVE_THUNDERBOLT, MOVE_IMPRISON},
+ .level = 0,
+ .ppBonuses = 0,
+ .hpEV = 252,
+ .speedEV = 252,
+ .spAttackEV = 6,
+ .otId = TRAINER_HILL_OTID,
+ .hpIV = 15,
+ .attackIV = 15,
+ .defenseIV = 15,
+ .speedIV = 15,
+ .spAttackIV = 15,
+ .spDefenseIV = 15,
+ .abilityNum = 0,
+ .personality = 0xA,
+ .nickname = _("SMEARGLE"),
+ .friendship = 255,
+ },
+ [4] =
+ {
+ .species = SPECIES_SMEARGLE,
+ .heldItem = ITEM_LEFTOVERS,
+ .moves = {MOVE_TOXIC, MOVE_PROTECT, MOVE_WILL_O_WISP, MOVE_IMPRISON},
+ .level = 0,
+ .ppBonuses = 0,
+ .hpEV = 252,
+ .defenseEV = 6,
+ .speedEV = 252,
+ .otId = TRAINER_HILL_OTID,
+ .hpIV = 15,
+ .attackIV = 15,
+ .defenseIV = 15,
+ .speedIV = 15,
+ .spAttackIV = 15,
+ .spDefenseIV = 15,
+ .abilityNum = 0,
+ .personality = 0xA,
+ .nickname = _("SMEARGLE"),
+ .friendship = 255,
+ },
+ [5] =
+ {
+ .species = SPECIES_SMEARGLE,
+ .heldItem = ITEM_QUICK_CLAW,
+ .moves = {MOVE_TEETER_DANCE, MOVE_LOCK_ON, MOVE_SHEER_COLD, MOVE_DESTINY_BOND},
+ .level = 0,
+ .ppBonuses = 0,
+ .hpEV = 252,
+ .defenseEV = 6,
+ .speedEV = 252,
+ .otId = TRAINER_HILL_OTID,
+ .hpIV = 15,
+ .attackIV = 15,
+ .defenseIV = 15,
+ .speedIV = 15,
+ .spAttackIV = 15,
+ .spDefenseIV = 15,
+ .abilityNum = 0,
+ .personality = 0x8A,
+ .nickname = _("SMEARGLE"),
+ .friendship = 255,
+ },
+ },
+ },
+ [1] =
+ {
+ .name = _("LUC"),
+ .facilityClass = FACILITY_CLASS_TUBER_M,
+ .unused = 0,
+ .speechBefore = {EC_WORD_I, EC_WORD_HAVE, EC_WORD_A, EC_WORD_COOL, EC_WORD_RARE, EC_WORD_MOVE},
+ .speechWin = {EC_WORD_MY, EC_WORD_RARE, EC_WORD_MOVE, EC_WORD_IS, EC_WORD_COOL, EC_WORD_ISN_T_IT_QUES},
+ .speechLose = {EC_WORD_DIDN_T, EC_WORD_YOU, EC_WORD_SEE, EC_WORD_MY, EC_WORD_MOVE, EC_WORD_QUES},
+ .speechAfter = {EC_WORD_I_AM, EC_WORD_SMART, EC_WORD_BUT, EC_WORD_ALSO, EC_WORD_WEAK, EC_WORD_ELLIPSIS},
+ .mons =
+ {
+ [0] =
+ {
+ .species = SPECIES_STARYU,
+ .heldItem = ITEM_LEFTOVERS,
+ .moves = {MOVE_CAMOUFLAGE, MOVE_NONE, MOVE_NONE, MOVE_NONE},
+ .level = 0,
+ .ppBonuses = 0,
+ .hpEV = 252,
+ .speedEV = 252,
+ .spAttackEV = 6,
+ .otId = TRAINER_HILL_OTID,
+ .hpIV = 5,
+ .attackIV = 5,
+ .defenseIV = 5,
+ .speedIV = 5,
+ .spAttackIV = 5,
+ .spDefenseIV = 5,
+ .abilityNum = 1,
+ .personality = 0xA,
+ .nickname = _("STARYU"),
+ .friendship = 255,
+ },
+ [1] =
+ {
+ .species = SPECIES_MEOWTH,
+ .heldItem = ITEM_QUICK_CLAW,
+ .moves = {MOVE_PAY_DAY, MOVE_NONE, MOVE_NONE, MOVE_NONE},
+ .level = 0,
+ .ppBonuses = 0,
+ .hpEV = 252,
+ .speedEV = 252,
+ .spAttackEV = 6,
+ .otId = TRAINER_HILL_OTID,
+ .hpIV = 5,
+ .attackIV = 5,
+ .defenseIV = 5,
+ .speedIV = 5,
+ .spAttackIV = 5,
+ .spDefenseIV = 5,
+ .abilityNum = 0,
+ .personality = 0xD,
+ .nickname = _("MEOWTH"),
+ .friendship = 255,
+ },
+ [2] =
+ {
+ .species = SPECIES_BLAZIKEN,
+ .heldItem = ITEM_BRIGHT_POWDER,
+ .moves = {MOVE_BLAZE_KICK, MOVE_NONE, MOVE_NONE, MOVE_NONE},
+ .level = 0,
+ .ppBonuses = 0,
+ .hpEV = 252,
+ .speedEV = 252,
+ .spDefenseEV = 6,
+ .otId = TRAINER_HILL_OTID,
+ .hpIV = 5,
+ .attackIV = 5,
+ .defenseIV = 5,
+ .speedIV = 5,
+ .spAttackIV = 5,
+ .spDefenseIV = 5,
+ .abilityNum = 0,
+ .personality = 0x28,
+ .nickname = _("BLAZIKEN"),
+ .friendship = 255,
+ },
+ [3] =
+ {
+ .species = SPECIES_CUBONE,
+ .heldItem = ITEM_THICK_CLUB,
+ .moves = {MOVE_BONEMERANG, MOVE_NONE, MOVE_NONE, MOVE_NONE},
+ .level = 0,
+ .ppBonuses = 0,
+ .hpEV = 252,
+ .defenseEV = 6,
+ .spDefenseEV = 252,
+ .otId = TRAINER_HILL_OTID,
+ .hpIV = 5,
+ .attackIV = 5,
+ .defenseIV = 5,
+ .speedIV = 5,
+ .spAttackIV = 5,
+ .spDefenseIV = 5,
+ .abilityNum = 1,
+ .personality = 0x16,
+ .nickname = _("CUBONE"),
+ .friendship = 255,
+ },
+ [4] =
+ {
+ .species = SPECIES_BEEDRILL,
+ .heldItem = ITEM_SHELL_BELL,
+ .moves = {MOVE_TWINEEDLE, MOVE_NONE, MOVE_NONE, MOVE_NONE},
+ .level = 0,
+ .ppBonuses = 0,
+ .hpEV = 252,
+ .speedEV = 252,
+ .otId = TRAINER_HILL_OTID,
+ .hpIV = 5,
+ .attackIV = 5,
+ .defenseIV = 5,
+ .speedIV = 5,
+ .spAttackIV = 5,
+ .spDefenseIV = 5,
+ .abilityNum = 0,
+ .personality = 0x8A,
+ .nickname = _("BEEDRILL"),
+ .friendship = 255,
+ },
+ [5] =
+ {
+ .species = SPECIES_RATICATE,
+ .heldItem = ITEM_FOCUS_BAND,
+ .moves = {MOVE_SUPER_FANG, MOVE_NONE, MOVE_NONE, MOVE_NONE},
+ .level = 0,
+ .ppBonuses = 0,
+ .hpEV = 252,
+ .defenseEV = 6,
+ .speedEV = 252,
+ .otId = TRAINER_HILL_OTID,
+ .hpIV = 5,
+ .attackIV = 5,
+ .defenseIV = 5,
+ .speedIV = 5,
+ .spAttackIV = 5,
+ .spDefenseIV = 5,
+ .abilityNum = 1,
+ .personality = 0xD,
+ .nickname = _("RATICATE"),
+ .friendship = 255,
+ },
+ },
},
- },
},
- },
- .data = {0x31, 0x3B, 0x3B, 0x3B, 0x39, 0x26, 0x1B, 0x1C, 0x1D, 0x25, 0x39, 0x3A, 0x3B, 0x3B, 0x3B, 0x8, 0x2D, 0x3B, 0x3B, 0x3B, 0x35, 0x2C, 0x23, 0x24, 0x23, 0x2C, 0x35, 0x3B, 0x3B, 0x3B, 0x3B, 0x8, 0x94, 0x87, 0x9B, 0x87, 0x8C, 0x87, 0x8B, 0x87, 0x8C, 0x87, 0x8C, 0x87, 0x95, 0x87, 0x9B, 0x8, 0x91, 0x8F, 0x9B, 0x8F, 0x9B, 0x8F, 0x8C, 0x8F, 0x9B, 0x8F, 0x9B, 0x8F, 0x8C, 0x8F, 0x95, 0x8, 0x8D, 0x97, 0x95, 0x97, 0x9B, 0x97, 0x95, 0x97, 0x95, 0x97, 0x9B, 0x97, 0x9B, 0x97, 0x8C, 0x8, 0x94, 0x87, 0x8C, 0x87, 0x9B, 0x87, 0x8C, 0x87, 0x8B, 0x87, 0x9B, 0x9B, 0x9B, 0x87, 0x9B, 0x8, 0x91, 0x8F, 0x9B, 0x8F, 0x95, 0x8F, 0x9B, 0x8F, 0x8C, 0x8F, 0x95, 0x9B, 0x95, 0x8F, 0x9B, 0x8, 0x91, 0x97, 0x95, 0x97, 0x8C, 0x97, 0x95, 0x97, 0x95, 0x97, 0x8C, 0x9B, 0x8C, 0x97, 0x95, 0x8, 0x91, 0x87, 0x8C, 0x87, 0x9B, 0x87, 0x8C, 0x87, 0x8B, 0x87, 0x9B, 0x87, 0x95, 0x87, 0x8C, 0x8, 0x8D, 0x8F, 0x9B, 0x8F, 0x95, 0x8F, 0x9B, 0x8F, 0x8C, 0x8F, 0x9B, 0x8F, 0x8C, 0x8F, 0x9B, 0x8, 0x94, 0x97, 0x95, 0x97, 0x8C, 0x97, 0x9B, 0x97, 0x95, 0x97, 0x95, 0x97, 0x9B, 0x97, 0x9B, 0x8, 0x91, 0x87, 0x8C, 0x87, 0x95, 0x87, 0x95, 0x87, 0x8B, 0x87, 0x8C, 0x87, 0x9B, 0x87, 0x9B, 0x8, 0x91, 0x8F, 0x95, 0x8F, 0x8B, 0x8F, 0x8C, 0x8F, 0x8C, 0x8F, 0x9B, 0x8F, 0x95, 0x8F, 0x9B, 0x8, 0x91, 0x97, 0x8C, 0x97, 0x8C, 0x97, 0x9B, 0x97, 0x9B, 0x97, 0x9B, 0x97, 0x8B, 0x97, 0x9B, 0x8, 0x91, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x8C, 0x9B, 0x9B, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8},
- .unk3A0 = {0x381, 0x7C1, 0x8AA1, 0x209, 0x5557, 0xA281, 0x81, 0x5D6D, 0x2283, 0x89, 0xDD55, 0x20A1, 0xA81, 0x7D5D, 0x9, 0xFFFF},
- .coords = {105, 109},
- .direction = 0x23,
- .range = 0x33,
+ .display = {
+ .data = {0x31, 0x3B, 0x3B, 0x3B, 0x39, 0x26, 0x1B, 0x1C, 0x1D, 0x25, 0x39, 0x3A, 0x3B, 0x3B, 0x3B, 0x8, 0x2D, 0x3B, 0x3B, 0x3B, 0x35, 0x2C, 0x23, 0x24, 0x23, 0x2C, 0x35, 0x3B, 0x3B, 0x3B, 0x3B, 0x8, 0x94, 0x87, 0x9B, 0x87, 0x8C, 0x87, 0x8B, 0x87, 0x8C, 0x87, 0x8C, 0x87, 0x95, 0x87, 0x9B, 0x8, 0x91, 0x8F, 0x9B, 0x8F, 0x9B, 0x8F, 0x8C, 0x8F, 0x9B, 0x8F, 0x9B, 0x8F, 0x8C, 0x8F, 0x95, 0x8, 0x8D, 0x97, 0x95, 0x97, 0x9B, 0x97, 0x95, 0x97, 0x95, 0x97, 0x9B, 0x97, 0x9B, 0x97, 0x8C, 0x8, 0x94, 0x87, 0x8C, 0x87, 0x9B, 0x87, 0x8C, 0x87, 0x8B, 0x87, 0x9B, 0x9B, 0x9B, 0x87, 0x9B, 0x8, 0x91, 0x8F, 0x9B, 0x8F, 0x95, 0x8F, 0x9B, 0x8F, 0x8C, 0x8F, 0x95, 0x9B, 0x95, 0x8F, 0x9B, 0x8, 0x91, 0x97, 0x95, 0x97, 0x8C, 0x97, 0x95, 0x97, 0x95, 0x97, 0x8C, 0x9B, 0x8C, 0x97, 0x95, 0x8, 0x91, 0x87, 0x8C, 0x87, 0x9B, 0x87, 0x8C, 0x87, 0x8B, 0x87, 0x9B, 0x87, 0x95, 0x87, 0x8C, 0x8, 0x8D, 0x8F, 0x9B, 0x8F, 0x95, 0x8F, 0x9B, 0x8F, 0x8C, 0x8F, 0x9B, 0x8F, 0x8C, 0x8F, 0x9B, 0x8, 0x94, 0x97, 0x95, 0x97, 0x8C, 0x97, 0x9B, 0x97, 0x95, 0x97, 0x95, 0x97, 0x9B, 0x97, 0x9B, 0x8, 0x91, 0x87, 0x8C, 0x87, 0x95, 0x87, 0x95, 0x87, 0x8B, 0x87, 0x8C, 0x87, 0x9B, 0x87, 0x9B, 0x8, 0x91, 0x8F, 0x95, 0x8F, 0x8B, 0x8F, 0x8C, 0x8F, 0x8C, 0x8F, 0x9B, 0x8F, 0x95, 0x8F, 0x9B, 0x8, 0x91, 0x97, 0x8C, 0x97, 0x8C, 0x97, 0x9B, 0x97, 0x9B, 0x97, 0x9B, 0x97, 0x8B, 0x97, 0x9B, 0x8, 0x91, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x8C, 0x9B, 0x9B, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8},
+ .unk3A0 = {0x381, 0x7C1, 0x8AA1, 0x209, 0x5557, 0xA281, 0x81, 0x5D6D, 0x2283, 0x89, 0xDD55, 0x20A1, 0xA81, 0x7D5D, 0x9, 0xFFFF},
+ .coords = {105, 109},
+ .direction = 0x23,
+ .range = 0x33,
+ }
},
- [2] =
+ [2] =
{
.unk0 = 0x35,
.unk1 = 0x36,
.trainers =
- {
- [0] =
- {
- .name = _("BREYDEN"),
- .facilityClass = FACILITY_CLASS_YOUNGSTER,
- .unused = 0,
- .speechBefore = {EC_WORD_I, EC_WORD_CARE, EC_WORD_FOR, EC_WORD_MY, EC_WORD_POKEMON, EC_WORD_A_LOT},
- .speechWin = {EC_WORD_MY, EC_WORD_POKEMON, EC_WORD_CAN, EC_WORD_DO, EC_WORD_IT, EC_WORD_ALL},
- .speechLose = {EC_WORD_IT_S, EC_WORD_NOT, EC_WORD_LIKE, EC_WORD_WE, EC_WORD_ALWAYS, EC_WORD_WIN},
- .speechAfter = {EC_WORD_I, EC_WORD_LIKE, EC_WORD_THE, EC_WORD_BEGINNING, EC_WORD_POKEMON, EC_WORD_BEST},
- .mons =
- {
- [0] =
- {
- .species = SPECIES_CHARMELEON,
- .heldItem = ITEM_CHARCOAL,
- .moves = {MOVE_FIRE_SPIN, MOVE_DRAGON_RAGE, MOVE_FLAMETHROWER, MOVE_SLASH},
- .level = 0,
- .ppBonuses = 0,
- .hpEV = 252,
- .speedEV = 252,
- .spAttackEV = 6,
- .otId = TRAINER_HILL_OTID,
- .hpIV = 25,
- .attackIV = 25,
- .defenseIV = 25,
- .speedIV = 25,
- .spAttackIV = 25,
- .spDefenseIV = 25,
- .abilityNum = 0,
- .personality = 0x32,
- .nickname = _("CHARMELEON"),
- .friendship = 100,
- },
- [1] =
- {
- .species = SPECIES_WARTORTLE,
- .heldItem = ITEM_MYSTIC_WATER,
- .moves = {MOVE_HYDRO_PUMP, MOVE_SKULL_BASH, MOVE_RAIN_DANCE, MOVE_PROTECT},
- .level = 0,
- .ppBonuses = 0,
- .hpEV = 250,
- .defenseEV = 130,
- .otId = TRAINER_HILL_OTID,
- .hpIV = 25,
- .attackIV = 25,
- .defenseIV = 25,
- .speedIV = 25,
- .spAttackIV = 25,
- .spDefenseIV = 25,
- .abilityNum = 0,
- .personality = 0x0,
- .nickname = _("WARTORTLE"),
- .friendship = 100,
- },
- [2] =
- {
- .species = SPECIES_IVYSAUR,
- .heldItem = ITEM_MIRACLE_SEED,
- .moves = {MOVE_SOLAR_BEAM, MOVE_SYNTHESIS, MOVE_GROWTH, MOVE_SWEET_SCENT},
- .level = 0,
- .ppBonuses = 0,
- .hpEV = 252,
- .speedEV = 6,
- .spAttackEV = 252,
- .otId = TRAINER_HILL_OTID,
- .hpIV = 25,
- .attackIV = 25,
- .defenseIV = 25,
- .speedIV = 25,
- .spAttackIV = 25,
- .spDefenseIV = 25,
- .abilityNum = 0,
- .personality = 0x0,
- .nickname = _("IVYSAUR"),
- .friendship = 100,
- },
- [3] =
- {
- .species = SPECIES_BAYLEEF,
- .heldItem = ITEM_MIRACLE_SEED,
- .moves = {MOVE_SOLAR_BEAM, MOVE_SAFEGUARD, MOVE_LIGHT_SCREEN, MOVE_BODY_SLAM},
- .level = 0,
- .ppBonuses = 0,
- .hpEV = 250,
- .attackEV = 130,
- .spAttackEV = 130,
- .otId = TRAINER_HILL_OTID,
- .hpIV = 25,
- .attackIV = 25,
- .defenseIV = 25,
- .speedIV = 25,
- .spAttackIV = 25,
- .spDefenseIV = 25,
- .abilityNum = 0,
- .personality = 0x32,
- .nickname = _("BAYLEEF"),
- .friendship = 100,
- },
- [4] =
- {
- .species = SPECIES_CROCONAW,
- .heldItem = ITEM_MYSTIC_WATER,
- .moves = {MOVE_SCARY_FACE, MOVE_SLASH, MOVE_HYDRO_PUMP, MOVE_SCREECH},
- .level = 0,
- .ppBonuses = 0,
- .hpEV = 252,
- .attackEV = 252,
- .speedEV = 6,
- .otId = TRAINER_HILL_OTID,
- .hpIV = 25,
- .attackIV = 25,
- .defenseIV = 25,
- .speedIV = 25,
- .spAttackIV = 25,
- .spDefenseIV = 25,
- .abilityNum = 0,
- .personality = 0x3,
- .nickname = _("CROCONAW"),
- .friendship = 100,
- },
- [5] =
- {
- .species = SPECIES_QUILAVA,
- .heldItem = ITEM_CHARCOAL,
- .moves = {MOVE_QUICK_ATTACK, MOVE_FLAMETHROWER, MOVE_FLAME_WHEEL, MOVE_SWIFT},
- .level = 0,
- .ppBonuses = 0,
- .hpEV = 6,
- .speedEV = 252,
- .spAttackEV = 252,
- .otId = TRAINER_HILL_OTID,
- .hpIV = 15,
- .attackIV = 15,
- .defenseIV = 15,
- .speedIV = 15,
- .spAttackIV = 15,
- .spDefenseIV = 15,
- .abilityNum = 0,
- .personality = 0x28,
- .nickname = _("QUILAVA"),
- .friendship = 100,
- },
- },
- },
- [1] =
{
- .name = _("ANIYA"),
- .facilityClass = FACILITY_CLASS_TUBER_F,
- .unused = 0,
- .speechBefore = {EC_WORD_SOMEONE, EC_WORD_GOT, EC_WORD_ME, EC_WORD_A_LITTLE, EC_WORD_POKEMON, EC_WORD_EGG},
- .speechWin = {EC_WORD_I_AM, EC_WORD_NOT, EC_WORD_NEW, EC_WORD_AT, EC_WORD_THIS, EC_WORD_EXCL},
- .speechLose = {EC_WORD_OH, EC_WORD_BUT, EC_WORD_ELLIPSIS, EC_WORD_WHY, EC_WORD_WHY, EC_WORD_QUES_EXCL},
- .speechAfter = {EC_WORD_YOU_RE, EC_WORD_BUSY, EC_WORD_QUES, EC_WORD_DON_T, EC_WORD_GIVE_UP, EC_WORD_EXCL},
- .mons =
- {
- [0] =
- {
- .species = SPECIES_SMOOCHUM,
- .heldItem = ITEM_PETAYA_BERRY,
- .moves = {MOVE_ICE_BEAM, MOVE_PSYCHIC, MOVE_SWEET_KISS, MOVE_FAKE_TEARS},
- .level = 0,
- .ppBonuses = 0,
- .hpEV = 6,
- .speedEV = 252,
- .spAttackEV = 252,
- .otId = TRAINER_HILL_OTID,
- .hpIV = 31,
- .attackIV = 31,
- .defenseIV = 31,
- .speedIV = 31,
- .spAttackIV = 31,
- .spDefenseIV = 31,
- .abilityNum = 0,
- .personality = 0x32,
- .nickname = _("SMOOCHUM"),
- .friendship = 50,
- },
- [1] =
- {
- .species = SPECIES_AZURILL,
- .heldItem = ITEM_FOCUS_BAND,
- .moves = {MOVE_SURF, MOVE_SING, MOVE_RAIN_DANCE, MOVE_BLIZZARD},
- .level = 0,
- .ppBonuses = 0,
- .hpEV = 6,
- .speedEV = 252,
- .spAttackEV = 252,
- .otId = TRAINER_HILL_OTID,
- .hpIV = 31,
- .attackIV = 31,
- .defenseIV = 31,
- .speedIV = 31,
- .spAttackIV = 31,
- .spDefenseIV = 31,
- .abilityNum = 0,
- .personality = 0xC8,
- .nickname = _("AZURILL"),
- .friendship = 50,
- },
- [2] =
- {
- .species = SPECIES_ELEKID,
- .heldItem = ITEM_KINGS_ROCK,
- .moves = {MOVE_FIRE_PUNCH, MOVE_THUNDER, MOVE_ICE_PUNCH, MOVE_THUNDER_WAVE},
- .level = 0,
- .ppBonuses = 0,
- .hpEV = 6,
- .speedEV = 252,
- .spAttackEV = 252,
- .otId = TRAINER_HILL_OTID,
- .hpIV = 31,
- .attackIV = 31,
- .defenseIV = 31,
- .speedIV = 31,
- .spAttackIV = 31,
- .spDefenseIV = 31,
- .abilityNum = 0,
- .personality = 0x0,
- .nickname = _("ELEKID"),
- .friendship = 50,
+ [0] =
+ {
+ .name = _("BREYDEN"),
+ .facilityClass = FACILITY_CLASS_YOUNGSTER,
+ .unused = 0,
+ .speechBefore = {EC_WORD_I, EC_WORD_CARE, EC_WORD_FOR, EC_WORD_MY, EC_WORD_POKEMON, EC_WORD_A_LOT},
+ .speechWin = {EC_WORD_MY, EC_WORD_POKEMON, EC_WORD_CAN, EC_WORD_DO, EC_WORD_IT, EC_WORD_ALL},
+ .speechLose = {EC_WORD_IT_S, EC_WORD_NOT, EC_WORD_LIKE, EC_WORD_WE, EC_WORD_ALWAYS, EC_WORD_WIN},
+ .speechAfter = {EC_WORD_I, EC_WORD_LIKE, EC_WORD_THE, EC_WORD_BEGINNING, EC_WORD_POKEMON, EC_WORD_BEST},
+ .mons =
+ {
+ [0] =
+ {
+ .species = SPECIES_CHARMELEON,
+ .heldItem = ITEM_CHARCOAL,
+ .moves = {MOVE_FIRE_SPIN, MOVE_DRAGON_RAGE, MOVE_FLAMETHROWER, MOVE_SLASH},
+ .level = 0,
+ .ppBonuses = 0,
+ .hpEV = 252,
+ .speedEV = 252,
+ .spAttackEV = 6,
+ .otId = TRAINER_HILL_OTID,
+ .hpIV = 25,
+ .attackIV = 25,
+ .defenseIV = 25,
+ .speedIV = 25,
+ .spAttackIV = 25,
+ .spDefenseIV = 25,
+ .abilityNum = 0,
+ .personality = 0x32,
+ .nickname = _("CHARMELEON"),
+ .friendship = 100,
+ },
+ [1] =
+ {
+ .species = SPECIES_WARTORTLE,
+ .heldItem = ITEM_MYSTIC_WATER,
+ .moves = {MOVE_HYDRO_PUMP, MOVE_SKULL_BASH, MOVE_RAIN_DANCE, MOVE_PROTECT},
+ .level = 0,
+ .ppBonuses = 0,
+ .hpEV = 250,
+ .defenseEV = 130,
+ .otId = TRAINER_HILL_OTID,
+ .hpIV = 25,
+ .attackIV = 25,
+ .defenseIV = 25,
+ .speedIV = 25,
+ .spAttackIV = 25,
+ .spDefenseIV = 25,
+ .abilityNum = 0,
+ .personality = 0x0,
+ .nickname = _("WARTORTLE"),
+ .friendship = 100,
+ },
+ [2] =
+ {
+ .species = SPECIES_IVYSAUR,
+ .heldItem = ITEM_MIRACLE_SEED,
+ .moves = {MOVE_SOLAR_BEAM, MOVE_SYNTHESIS, MOVE_GROWTH, MOVE_SWEET_SCENT},
+ .level = 0,
+ .ppBonuses = 0,
+ .hpEV = 252,
+ .speedEV = 6,
+ .spAttackEV = 252,
+ .otId = TRAINER_HILL_OTID,
+ .hpIV = 25,
+ .attackIV = 25,
+ .defenseIV = 25,
+ .speedIV = 25,
+ .spAttackIV = 25,
+ .spDefenseIV = 25,
+ .abilityNum = 0,
+ .personality = 0x0,
+ .nickname = _("IVYSAUR"),
+ .friendship = 100,
+ },
+ [3] =
+ {
+ .species = SPECIES_BAYLEEF,
+ .heldItem = ITEM_MIRACLE_SEED,
+ .moves = {MOVE_SOLAR_BEAM, MOVE_SAFEGUARD, MOVE_LIGHT_SCREEN, MOVE_BODY_SLAM},
+ .level = 0,
+ .ppBonuses = 0,
+ .hpEV = 250,
+ .attackEV = 130,
+ .spAttackEV = 130,
+ .otId = TRAINER_HILL_OTID,
+ .hpIV = 25,
+ .attackIV = 25,
+ .defenseIV = 25,
+ .speedIV = 25,
+ .spAttackIV = 25,
+ .spDefenseIV = 25,
+ .abilityNum = 0,
+ .personality = 0x32,
+ .nickname = _("BAYLEEF"),
+ .friendship = 100,
+ },
+ [4] =
+ {
+ .species = SPECIES_CROCONAW,
+ .heldItem = ITEM_MYSTIC_WATER,
+ .moves = {MOVE_SCARY_FACE, MOVE_SLASH, MOVE_HYDRO_PUMP, MOVE_SCREECH},
+ .level = 0,
+ .ppBonuses = 0,
+ .hpEV = 252,
+ .attackEV = 252,
+ .speedEV = 6,
+ .otId = TRAINER_HILL_OTID,
+ .hpIV = 25,
+ .attackIV = 25,
+ .defenseIV = 25,
+ .speedIV = 25,
+ .spAttackIV = 25,
+ .spDefenseIV = 25,
+ .abilityNum = 0,
+ .personality = 0x3,
+ .nickname = _("CROCONAW"),
+ .friendship = 100,
+ },
+ [5] =
+ {
+ .species = SPECIES_QUILAVA,
+ .heldItem = ITEM_CHARCOAL,
+ .moves = {MOVE_QUICK_ATTACK, MOVE_FLAMETHROWER, MOVE_FLAME_WHEEL, MOVE_SWIFT},
+ .level = 0,
+ .ppBonuses = 0,
+ .hpEV = 6,
+ .speedEV = 252,
+ .spAttackEV = 252,
+ .otId = TRAINER_HILL_OTID,
+ .hpIV = 15,
+ .attackIV = 15,
+ .defenseIV = 15,
+ .speedIV = 15,
+ .spAttackIV = 15,
+ .spDefenseIV = 15,
+ .abilityNum = 0,
+ .personality = 0x28,
+ .nickname = _("QUILAVA"),
+ .friendship = 100,
+ },
+ },
+ },
+ [1] =
+ {
+ .name = _("ANIYA"),
+ .facilityClass = FACILITY_CLASS_TUBER_F,
+ .unused = 0,
+ .speechBefore = {EC_WORD_SOMEONE, EC_WORD_GOT, EC_WORD_ME, EC_WORD_A_LITTLE, EC_WORD_POKEMON, EC_WORD_EGG},
+ .speechWin = {EC_WORD_I_AM, EC_WORD_NOT, EC_WORD_NEW, EC_WORD_AT, EC_WORD_THIS, EC_WORD_EXCL},
+ .speechLose = {EC_WORD_OH, EC_WORD_BUT, EC_WORD_ELLIPSIS, EC_WORD_WHY, EC_WORD_WHY, EC_WORD_QUES_EXCL},
+ .speechAfter = {EC_WORD_YOU_RE, EC_WORD_BUSY, EC_WORD_QUES, EC_WORD_DON_T, EC_WORD_GIVE_UP, EC_WORD_EXCL},
+ .mons =
+ {
+ [0] =
+ {
+ .species = SPECIES_SMOOCHUM,
+ .heldItem = ITEM_PETAYA_BERRY,
+ .moves = {MOVE_ICE_BEAM, MOVE_PSYCHIC, MOVE_SWEET_KISS, MOVE_FAKE_TEARS},
+ .level = 0,
+ .ppBonuses = 0,
+ .hpEV = 6,
+ .speedEV = 252,
+ .spAttackEV = 252,
+ .otId = TRAINER_HILL_OTID,
+ .hpIV = 31,
+ .attackIV = 31,
+ .defenseIV = 31,
+ .speedIV = 31,
+ .spAttackIV = 31,
+ .spDefenseIV = 31,
+ .abilityNum = 0,
+ .personality = 0x32,
+ .nickname = _("SMOOCHUM"),
+ .friendship = 50,
+ },
+ [1] =
+ {
+ .species = SPECIES_AZURILL,
+ .heldItem = ITEM_FOCUS_BAND,
+ .moves = {MOVE_SURF, MOVE_SING, MOVE_RAIN_DANCE, MOVE_BLIZZARD},
+ .level = 0,
+ .ppBonuses = 0,
+ .hpEV = 6,
+ .speedEV = 252,
+ .spAttackEV = 252,
+ .otId = TRAINER_HILL_OTID,
+ .hpIV = 31,
+ .attackIV = 31,
+ .defenseIV = 31,
+ .speedIV = 31,
+ .spAttackIV = 31,
+ .spDefenseIV = 31,
+ .abilityNum = 0,
+ .personality = 0xC8,
+ .nickname = _("AZURILL"),
+ .friendship = 50,
+ },
+ [2] =
+ {
+ .species = SPECIES_ELEKID,
+ .heldItem = ITEM_KINGS_ROCK,
+ .moves = {MOVE_FIRE_PUNCH, MOVE_THUNDER, MOVE_ICE_PUNCH, MOVE_THUNDER_WAVE},
+ .level = 0,
+ .ppBonuses = 0,
+ .hpEV = 6,
+ .speedEV = 252,
+ .spAttackEV = 252,
+ .otId = TRAINER_HILL_OTID,
+ .hpIV = 31,
+ .attackIV = 31,
+ .defenseIV = 31,
+ .speedIV = 31,
+ .spAttackIV = 31,
+ .spDefenseIV = 31,
+ .abilityNum = 0,
+ .personality = 0x0,
+ .nickname = _("ELEKID"),
+ .friendship = 50,
+ },
+ [3] =
+ {
+ .species = SPECIES_CLEFFA,
+ .heldItem = ITEM_QUICK_CLAW,
+ .moves = {MOVE_MEGA_KICK, MOVE_SWEET_KISS, MOVE_SING, MOVE_METRONOME},
+ .level = 0,
+ .ppBonuses = 0,
+ .hpEV = 6,
+ .attackEV = 252,
+ .speedEV = 252,
+ .otId = TRAINER_HILL_OTID,
+ .hpIV = 31,
+ .attackIV = 31,
+ .defenseIV = 31,
+ .speedIV = 31,
+ .spAttackIV = 31,
+ .spDefenseIV = 31,
+ .abilityNum = 0,
+ .personality = 0x0,
+ .nickname = _("CLEFFA"),
+ .friendship = 50,
+ },
+ [4] =
+ {
+ .species = SPECIES_WYNAUT,
+ .heldItem = ITEM_LEFTOVERS,
+ .moves = {MOVE_ENCORE, MOVE_COUNTER, MOVE_MIRROR_COAT, MOVE_DESTINY_BOND},
+ .level = 0,
+ .ppBonuses = 0,
+ .hpEV = 250,
+ .defenseEV = 130,
+ .spDefenseEV = 130,
+ .otId = TRAINER_HILL_OTID,
+ .hpIV = 31,
+ .attackIV = 31,
+ .defenseIV = 31,
+ .speedIV = 31,
+ .spAttackIV = 31,
+ .spDefenseIV = 31,
+ .abilityNum = 0,
+ .personality = 0x84,
+ .nickname = _("WYNAUT"),
+ .friendship = 50,
+ },
+ [5] =
+ {
+ .species = SPECIES_MAGBY,
+ .heldItem = ITEM_SCOPE_LENS,
+ .moves = {MOVE_FIRE_BLAST, MOVE_CONFUSE_RAY, MOVE_THUNDER_PUNCH, MOVE_BARRIER},
+ .level = 0,
+ .ppBonuses = 0,
+ .hpEV = 6,
+ .speedEV = 252,
+ .spAttackEV = 252,
+ .otId = TRAINER_HILL_OTID,
+ .hpIV = 31,
+ .attackIV = 31,
+ .defenseIV = 31,
+ .speedIV = 31,
+ .spAttackIV = 31,
+ .spDefenseIV = 31,
+ .abilityNum = 0,
+ .personality = 0xF,
+ .nickname = _("MAGBY"),
+ .friendship = 50,
+ },
+ },
},
- [3] =
- {
- .species = SPECIES_CLEFFA,
- .heldItem = ITEM_QUICK_CLAW,
- .moves = {MOVE_MEGA_KICK, MOVE_SWEET_KISS, MOVE_SING, MOVE_METRONOME},
- .level = 0,
- .ppBonuses = 0,
- .hpEV = 6,
- .attackEV = 252,
- .speedEV = 252,
- .otId = TRAINER_HILL_OTID,
- .hpIV = 31,
- .attackIV = 31,
- .defenseIV = 31,
- .speedIV = 31,
- .spAttackIV = 31,
- .spDefenseIV = 31,
- .abilityNum = 0,
- .personality = 0x0,
- .nickname = _("CLEFFA"),
- .friendship = 50,
- },
- [4] =
- {
- .species = SPECIES_WYNAUT,
- .heldItem = ITEM_LEFTOVERS,
- .moves = {MOVE_ENCORE, MOVE_COUNTER, MOVE_MIRROR_COAT, MOVE_DESTINY_BOND},
- .level = 0,
- .ppBonuses = 0,
- .hpEV = 250,
- .defenseEV = 130,
- .spDefenseEV = 130,
- .otId = TRAINER_HILL_OTID,
- .hpIV = 31,
- .attackIV = 31,
- .defenseIV = 31,
- .speedIV = 31,
- .spAttackIV = 31,
- .spDefenseIV = 31,
- .abilityNum = 0,
- .personality = 0x84,
- .nickname = _("WYNAUT"),
- .friendship = 50,
- },
- [5] =
- {
- .species = SPECIES_MAGBY,
- .heldItem = ITEM_SCOPE_LENS,
- .moves = {MOVE_FIRE_BLAST, MOVE_CONFUSE_RAY, MOVE_THUNDER_PUNCH, MOVE_BARRIER},
- .level = 0,
- .ppBonuses = 0,
- .hpEV = 6,
- .speedEV = 252,
- .spAttackEV = 252,
- .otId = TRAINER_HILL_OTID,
- .hpIV = 31,
- .attackIV = 31,
- .defenseIV = 31,
- .speedIV = 31,
- .spAttackIV = 31,
- .spDefenseIV = 31,
- .abilityNum = 0,
- .personality = 0xF,
- .nickname = _("MAGBY"),
- .friendship = 50,
- },
- },
},
- },
- .data = {0x31, 0x3B, 0x3B, 0x3B, 0x39, 0x39, 0x13, 0x14, 0x15, 0x38, 0x39, 0x3A, 0x3B, 0x3B, 0x3B, 0x8, 0x69, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x7C, 0x46, 0x8, 0x69, 0x46, 0x7A, 0x73, 0x73, 0x73, 0x79, 0x73, 0x73, 0x73, 0x7D, 0x73, 0x73, 0x73, 0x46, 0x8, 0x69, 0x46, 0x73, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x8, 0x69, 0x46, 0x73, 0x73, 0x7B, 0x73, 0x7C, 0x73, 0x7B, 0x73, 0x7A, 0x73, 0x73, 0x73, 0x46, 0x8, 0x69, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x7A, 0x46, 0x8, 0x69, 0x46, 0x73, 0x73, 0x73, 0x73, 0x73, 0x7D, 0x7C, 0x73, 0x7C, 0x73, 0x7B, 0x73, 0x46, 0x8, 0x69, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x7C, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x8, 0x91, 0x46, 0x9B, 0x9B, 0x9B, 0x46, 0x3B, 0x3B, 0x3B, 0x46, 0x9B, 0x9B, 0x9B, 0x9B, 0x46, 0x8, 0x91, 0x46, 0x9B, 0x9B, 0x9B, 0x46, 0x3B, 0x3B, 0x3B, 0x46, 0x9B, 0x9B, 0x9B, 0x9B, 0x46, 0x8, 0x91, 0x46, 0x9B, 0x9B, 0x9B, 0x46, 0x3B, 0x3B, 0x3B, 0x46, 0x9B, 0x9B, 0x9B, 0x9B, 0x46, 0x8, 0xF1, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x78, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x8, 0xF1, 0x46, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0x7A, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0x7C, 0x8, 0xF1, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0xFB, 0x8, 0x7C, 0xFB, 0x7B, 0xFB, 0x7A, 0xFB, 0x79, 0xFB, 0xB3, 0xFB, 0x7D, 0xFB, 0x7E, 0xFB, 0x7D, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8},
- .unk3A0 = {0x381, 0x7FFB, 0x4003, 0x5FFF, 0x4003, 0x7FFB, 0x4003, 0x7EFF, 0x4443, 0x4443, 0x4443, 0x7EFF, 0x4001, 0x7FFD, 0x1, 0xFFFF},
- .coords = {150, 152},
- .direction = 0x23,
- .range = 0x11,
+ .display = {
+ .data = {0x31, 0x3B, 0x3B, 0x3B, 0x39, 0x39, 0x13, 0x14, 0x15, 0x38, 0x39, 0x3A, 0x3B, 0x3B, 0x3B, 0x8, 0x69, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x7C, 0x46, 0x8, 0x69, 0x46, 0x7A, 0x73, 0x73, 0x73, 0x79, 0x73, 0x73, 0x73, 0x7D, 0x73, 0x73, 0x73, 0x46, 0x8, 0x69, 0x46, 0x73, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x8, 0x69, 0x46, 0x73, 0x73, 0x7B, 0x73, 0x7C, 0x73, 0x7B, 0x73, 0x7A, 0x73, 0x73, 0x73, 0x46, 0x8, 0x69, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x7A, 0x46, 0x8, 0x69, 0x46, 0x73, 0x73, 0x73, 0x73, 0x73, 0x7D, 0x7C, 0x73, 0x7C, 0x73, 0x7B, 0x73, 0x46, 0x8, 0x69, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x7C, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x8, 0x91, 0x46, 0x9B, 0x9B, 0x9B, 0x46, 0x3B, 0x3B, 0x3B, 0x46, 0x9B, 0x9B, 0x9B, 0x9B, 0x46, 0x8, 0x91, 0x46, 0x9B, 0x9B, 0x9B, 0x46, 0x3B, 0x3B, 0x3B, 0x46, 0x9B, 0x9B, 0x9B, 0x9B, 0x46, 0x8, 0x91, 0x46, 0x9B, 0x9B, 0x9B, 0x46, 0x3B, 0x3B, 0x3B, 0x46, 0x9B, 0x9B, 0x9B, 0x9B, 0x46, 0x8, 0xF1, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x78, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x8, 0xF1, 0x46, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0x7A, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0x7C, 0x8, 0xF1, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0xFB, 0x8, 0x7C, 0xFB, 0x7B, 0xFB, 0x7A, 0xFB, 0x79, 0xFB, 0xB3, 0xFB, 0x7D, 0xFB, 0x7E, 0xFB, 0x7D, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8},
+ .unk3A0 = {0x381, 0x7FFB, 0x4003, 0x5FFF, 0x4003, 0x7FFB, 0x4003, 0x7EFF, 0x4443, 0x4443, 0x4443, 0x7EFF, 0x4001, 0x7FFD, 0x1, 0xFFFF},
+ .coords = {150, 152},
+ .direction = 0x23,
+ .range = 0x11,
+ }
},
- [3] =
+ [3] =
{
.unk0 = 0x38,
.unk1 = 0x37,
.trainers =
- {
- [0] =
{
- .name = _("DANE"),
- .facilityClass = FACILITY_CLASS_BIRD_KEEPER,
- .unused = 0,
- .speechBefore = {EC_WORD_I, EC_WORD_GOT, EC_WORD_MY, EC_WORD_POKEMON, EC_WORD_ON, EC_WORD_VACATION},
- .speechWin = {EC_WORD_IT_S, EC_WORD_GREAT, EC_WORD_TO, EC_WORD_TRAVEL, EC_WORD_AND, EC_WORD_BATTLE},
- .speechLose = {EC_WORD_WAAAH, EC_WORD_EXCL, EC_WORD_MY, EC_WORD_RARE, EC_WORD_POKEMON, EC_WORD_EXCL},
- .speechAfter = {EC_WORD_OFF, EC_WORD_ON, EC_WORD_ANOTHER, EC_WORD_VACATION, EC_WORD_I, EC_WORD_GO},
- .mons =
- {
- [0] =
- {
- .species = SPECIES_SUDOWOODO,
- .heldItem = ITEM_SITRUS_BERRY,
- .moves = {MOVE_ROCK_SLIDE, MOVE_BLOCK, MOVE_TOXIC, MOVE_EXPLOSION},
- .level = 0,
- .ppBonuses = 0,
- .hpEV = 100,
- .attackEV = 255,
- .spDefenseEV = 155,
- .otId = TRAINER_HILL_OTID,
- .hpIV = 15,
- .attackIV = 15,
- .defenseIV = 15,
- .speedIV = 15,
- .spAttackIV = 15,
- .spDefenseIV = 15,
- .abilityNum = 0,
- .personality = 0x80,
- .nickname = _("SUDOWOODO"),
- .friendship = 255,
- },
- [1] =
- {
- .species = SPECIES_SLOWKING,
- .heldItem = ITEM_SCOPE_LENS,
- .moves = {MOVE_SURF, MOVE_PSYCHIC, MOVE_BLIZZARD, MOVE_DISABLE},
- .level = 0,
- .ppBonuses = 0,
- .hpEV = 255,
- .defenseEV = 255,
- .otId = TRAINER_HILL_OTID,
- .hpIV = 15,
- .attackIV = 15,
- .defenseIV = 15,
- .speedIV = 15,
- .spAttackIV = 15,
- .spDefenseIV = 15,
- .abilityNum = 1,
- .personality = 0x8C,
- .nickname = _("SLOWKING"),
- .friendship = 255,
- },
- [2] =
- {
- .species = SPECIES_ENTEI,
- .heldItem = ITEM_PETAYA_BERRY,
- .moves = {MOVE_FLAMETHROWER, MOVE_CALM_MIND, MOVE_FIRE_SPIN, MOVE_ROAR},
- .level = 0,
- .ppBonuses = 0,
- .speedEV = 255,
- .spAttackEV = 255,
- .otId = TRAINER_HILL_OTID,
- .hpIV = 15,
- .attackIV = 15,
- .defenseIV = 15,
- .speedIV = 15,
- .spAttackIV = 15,
- .spDefenseIV = 15,
- .abilityNum = 0,
- .personality = 0xF,
- .nickname = _("ENTEI"),
- .friendship = 255,
- },
- [3] =
- {
- .species = SPECIES_HITMONCHAN,
- .heldItem = ITEM_FOCUS_BAND,
- .moves = {MOVE_MEGA_PUNCH, MOVE_DETECT, MOVE_COUNTER, MOVE_SKY_UPPERCUT},
- .level = 0,
- .ppBonuses = 0,
- .attackEV = 255,
- .speedEV = 255,
- .otId = TRAINER_HILL_OTID,
- .hpIV = 15,
- .attackIV = 15,
- .defenseIV = 15,
- .speedIV = 15,
- .spAttackIV = 15,
- .spDefenseIV = 15,
- .abilityNum = 0,
- .personality = 0x3,
- .nickname = _("HITMONCHAN"),
- .friendship = 255,
- },
- [4] =
- {
- .species = SPECIES_MANTINE,
- .heldItem = ITEM_LEFTOVERS,
- .moves = {MOVE_SURF, MOVE_CONFUSE_RAY, MOVE_ATTRACT, MOVE_AERIAL_ACE},
- .level = 0,
- .ppBonuses = 0,
- .hpEV = 255,
- .defenseEV = 255,
- .otId = TRAINER_HILL_OTID,
- .hpIV = 15,
- .attackIV = 15,
- .defenseIV = 15,
- .speedIV = 15,
- .spAttackIV = 15,
- .spDefenseIV = 15,
- .abilityNum = 1,
- .personality = 0x6,
- .nickname = _("MANTINE"),
- .friendship = 255,
+ [0] =
+ {
+ .name = _("DANE"),
+ .facilityClass = FACILITY_CLASS_BIRD_KEEPER,
+ .unused = 0,
+ .speechBefore = {EC_WORD_I, EC_WORD_GOT, EC_WORD_MY, EC_WORD_POKEMON, EC_WORD_ON, EC_WORD_VACATION},
+ .speechWin = {EC_WORD_IT_S, EC_WORD_GREAT, EC_WORD_TO, EC_WORD_TRAVEL, EC_WORD_AND, EC_WORD_BATTLE},
+ .speechLose = {EC_WORD_WAAAH, EC_WORD_EXCL, EC_WORD_MY, EC_WORD_RARE, EC_WORD_POKEMON, EC_WORD_EXCL},
+ .speechAfter = {EC_WORD_OFF, EC_WORD_ON, EC_WORD_ANOTHER, EC_WORD_VACATION, EC_WORD_I, EC_WORD_GO},
+ .mons =
+ {
+ [0] =
+ {
+ .species = SPECIES_SUDOWOODO,
+ .heldItem = ITEM_SITRUS_BERRY,
+ .moves = {MOVE_ROCK_SLIDE, MOVE_BLOCK, MOVE_TOXIC, MOVE_EXPLOSION},
+ .level = 0,
+ .ppBonuses = 0,
+ .hpEV = 100,
+ .attackEV = 255,
+ .spDefenseEV = 155,
+ .otId = TRAINER_HILL_OTID,
+ .hpIV = 15,
+ .attackIV = 15,
+ .defenseIV = 15,
+ .speedIV = 15,
+ .spAttackIV = 15,
+ .spDefenseIV = 15,
+ .abilityNum = 0,
+ .personality = 0x80,
+ .nickname = _("SUDOWOODO"),
+ .friendship = 255,
+ },
+ [1] =
+ {
+ .species = SPECIES_SLOWKING,
+ .heldItem = ITEM_SCOPE_LENS,
+ .moves = {MOVE_SURF, MOVE_PSYCHIC, MOVE_BLIZZARD, MOVE_DISABLE},
+ .level = 0,
+ .ppBonuses = 0,
+ .hpEV = 255,
+ .defenseEV = 255,
+ .otId = TRAINER_HILL_OTID,
+ .hpIV = 15,
+ .attackIV = 15,
+ .defenseIV = 15,
+ .speedIV = 15,
+ .spAttackIV = 15,
+ .spDefenseIV = 15,
+ .abilityNum = 1,
+ .personality = 0x8C,
+ .nickname = _("SLOWKING"),
+ .friendship = 255,
+ },
+ [2] =
+ {
+ .species = SPECIES_ENTEI,
+ .heldItem = ITEM_PETAYA_BERRY,
+ .moves = {MOVE_FLAMETHROWER, MOVE_CALM_MIND, MOVE_FIRE_SPIN, MOVE_ROAR},
+ .level = 0,
+ .ppBonuses = 0,
+ .speedEV = 255,
+ .spAttackEV = 255,
+ .otId = TRAINER_HILL_OTID,
+ .hpIV = 15,
+ .attackIV = 15,
+ .defenseIV = 15,
+ .speedIV = 15,
+ .spAttackIV = 15,
+ .spDefenseIV = 15,
+ .abilityNum = 0,
+ .personality = 0xF,
+ .nickname = _("ENTEI"),
+ .friendship = 255,
+ },
+ [3] =
+ {
+ .species = SPECIES_HITMONCHAN,
+ .heldItem = ITEM_FOCUS_BAND,
+ .moves = {MOVE_MEGA_PUNCH, MOVE_DETECT, MOVE_COUNTER, MOVE_SKY_UPPERCUT},
+ .level = 0,
+ .ppBonuses = 0,
+ .attackEV = 255,
+ .speedEV = 255,
+ .otId = TRAINER_HILL_OTID,
+ .hpIV = 15,
+ .attackIV = 15,
+ .defenseIV = 15,
+ .speedIV = 15,
+ .spAttackIV = 15,
+ .spDefenseIV = 15,
+ .abilityNum = 0,
+ .personality = 0x3,
+ .nickname = _("HITMONCHAN"),
+ .friendship = 255,
+ },
+ [4] =
+ {
+ .species = SPECIES_MANTINE,
+ .heldItem = ITEM_LEFTOVERS,
+ .moves = {MOVE_SURF, MOVE_CONFUSE_RAY, MOVE_ATTRACT, MOVE_AERIAL_ACE},
+ .level = 0,
+ .ppBonuses = 0,
+ .hpEV = 255,
+ .defenseEV = 255,
+ .otId = TRAINER_HILL_OTID,
+ .hpIV = 15,
+ .attackIV = 15,
+ .defenseIV = 15,
+ .speedIV = 15,
+ .spAttackIV = 15,
+ .spDefenseIV = 15,
+ .abilityNum = 1,
+ .personality = 0x6,
+ .nickname = _("MANTINE"),
+ .friendship = 255,
+ },
+ [5] =
+ {
+ .species = SPECIES_ZAPDOS,
+ .heldItem = ITEM_BRIGHT_POWDER,
+ .moves = {MOVE_THUNDERBOLT, MOVE_DRILL_PECK, MOVE_THUNDER_WAVE, MOVE_AGILITY},
+ .level = 0,
+ .ppBonuses = 0,
+ .speedEV = 255,
+ .spAttackEV = 255,
+ .otId = TRAINER_HILL_OTID,
+ .hpIV = 15,
+ .attackIV = 15,
+ .defenseIV = 15,
+ .speedIV = 15,
+ .spAttackIV = 15,
+ .spDefenseIV = 15,
+ .abilityNum = 0,
+ .personality = 0x18,
+ .nickname = _("ZAPDOS"),
+ .friendship = 255,
+ },
+ },
+ },
+ [1] =
+ {
+ .name = _("STEPHANIE"),
+ .facilityClass = FACILITY_CLASS_SWIMMING_TRIATHLETE_F,
+ .unused = 0,
+ .speechBefore = {EC_WORD_THIS, EC_WORD_IS, EC_WORD_HOW, EC_WORD_YOU, EC_WORD_WIN, EC_WORD_EXCL},
+ .speechWin = {EC_WORD_DO, EC_WORD_YOU, EC_WORD_UNDERSTAND, EC_WORD_HOW, EC_WORD_NOW, EC_WORD_QUES},
+ .speechLose = {EC_WORD_YES, EC_WORD_THAT_S, EC_WORD_HOW, EC_WORD_YOU, EC_WORD_DO, EC_WORD_IT},
+ .speechAfter = {EC_WORD_YOU, EC_WORD_BEAT, EC_WORD_ME, EC_WORD_GOOD, EC_WORD_FOR, EC_WORD_YOU},
+ .mons =
+ {
+ [0] =
+ {
+ .species = SPECIES_HITMONLEE,
+ .heldItem = ITEM_FOCUS_BAND,
+ .moves = {MOVE_MEGA_KICK, MOVE_MIND_READER, MOVE_FOCUS_ENERGY, MOVE_HI_JUMP_KICK},
+ .level = 0,
+ .ppBonuses = 0,
+ .hpEV = 255,
+ .attackEV = 255,
+ .otId = TRAINER_HILL_OTID,
+ .hpIV = 15,
+ .attackIV = 15,
+ .defenseIV = 15,
+ .speedIV = 15,
+ .spAttackIV = 15,
+ .spDefenseIV = 15,
+ .abilityNum = 0,
+ .personality = 0x3,
+ .nickname = _("HITMONLEE"),
+ .friendship = 255,
+ },
+ [1] =
+ {
+ .species = SPECIES_PORYGON2,
+ .heldItem = ITEM_SCOPE_LENS,
+ .moves = {MOVE_LOCK_ON, MOVE_BLIZZARD, MOVE_CONVERSION_2, MOVE_PSYCHIC},
+ .level = 0,
+ .ppBonuses = 0,
+ .hpEV = 255,
+ .spAttackEV = 255,
+ .otId = TRAINER_HILL_OTID,
+ .hpIV = 15,
+ .attackIV = 15,
+ .defenseIV = 15,
+ .speedIV = 15,
+ .spAttackIV = 15,
+ .spDefenseIV = 15,
+ .abilityNum = 0,
+ .personality = 0xF,
+ .nickname = _("PORYGON2"),
+ .friendship = 255,
+ },
+ [2] =
+ {
+ .species = SPECIES_SUICUNE,
+ .heldItem = ITEM_PETAYA_BERRY,
+ .moves = {MOVE_SURF, MOVE_CALM_MIND, MOVE_MIRROR_COAT, MOVE_MIST},
+ .level = 0,
+ .ppBonuses = 0,
+ .speedEV = 255,
+ .spAttackEV = 255,
+ .otId = TRAINER_HILL_OTID,
+ .hpIV = 15,
+ .attackIV = 15,
+ .defenseIV = 15,
+ .speedIV = 15,
+ .spAttackIV = 15,
+ .spDefenseIV = 15,
+ .abilityNum = 0,
+ .personality = 0xF,
+ .nickname = _("SUICUNE"),
+ .friendship = 255,
+ },
+ [3] =
+ {
+ .species = SPECIES_HOUNDOOM,
+ .heldItem = ITEM_QUICK_CLAW,
+ .moves = {MOVE_FLAMETHROWER, MOVE_CRUNCH, MOVE_ROAR, MOVE_WILL_O_WISP},
+ .level = 0,
+ .ppBonuses = 0,
+ .speedEV = 255,
+ .spAttackEV = 255,
+ .otId = TRAINER_HILL_OTID,
+ .hpIV = 15,
+ .attackIV = 15,
+ .defenseIV = 15,
+ .speedIV = 15,
+ .spAttackIV = 15,
+ .spDefenseIV = 15,
+ .abilityNum = 1,
+ .personality = 0xF,
+ .nickname = _("HOUNDOOM"),
+ .friendship = 255,
+ },
+ [4] =
+ {
+ .species = SPECIES_STANTLER,
+ .heldItem = ITEM_LEFTOVERS,
+ .moves = {MOVE_CONFUSE_RAY, MOVE_SWAGGER, MOVE_PSYCH_UP, MOVE_TAKE_DOWN},
+ .level = 0,
+ .ppBonuses = 0,
+ .attackEV = 255,
+ .speedEV = 255,
+ .otId = TRAINER_HILL_OTID,
+ .hpIV = 15,
+ .attackIV = 15,
+ .defenseIV = 15,
+ .speedIV = 15,
+ .spAttackIV = 15,
+ .spDefenseIV = 15,
+ .abilityNum = 0,
+ .personality = 0x3,
+ .nickname = _("STANTLER"),
+ .friendship = 255,
+ },
+ [5] =
+ {
+ .species = SPECIES_ARTICUNO,
+ .heldItem = ITEM_NEVER_MELT_ICE,
+ .moves = {MOVE_BLIZZARD, MOVE_SHEER_COLD, MOVE_MIST, MOVE_AERIAL_ACE},
+ .level = 0,
+ .ppBonuses = 0,
+ .hpEV = 255,
+ .spAttackEV = 255,
+ .otId = TRAINER_HILL_OTID,
+ .hpIV = 15,
+ .attackIV = 15,
+ .defenseIV = 15,
+ .speedIV = 15,
+ .spAttackIV = 15,
+ .spDefenseIV = 15,
+ .abilityNum = 0,
+ .personality = 0xF,
+ .nickname = _("ARTICUNO"),
+ .friendship = 255,
+ },
+ },
},
- [5] =
- {
- .species = SPECIES_ZAPDOS,
- .heldItem = ITEM_BRIGHT_POWDER,
- .moves = {MOVE_THUNDERBOLT, MOVE_DRILL_PECK, MOVE_THUNDER_WAVE, MOVE_AGILITY},
- .level = 0,
- .ppBonuses = 0,
- .speedEV = 255,
- .spAttackEV = 255,
- .otId = TRAINER_HILL_OTID,
- .hpIV = 15,
- .attackIV = 15,
- .defenseIV = 15,
- .speedIV = 15,
- .spAttackIV = 15,
- .spDefenseIV = 15,
- .abilityNum = 0,
- .personality = 0x18,
- .nickname = _("ZAPDOS"),
- .friendship = 255,
- },
- },
- },
- [1] =
- {
- .name = _("STEPHANIE"),
- .facilityClass = FACILITY_CLASS_SWIMMING_TRIATHLETE_F,
- .unused = 0,
- .speechBefore = {EC_WORD_THIS, EC_WORD_IS, EC_WORD_HOW, EC_WORD_YOU, EC_WORD_WIN, EC_WORD_EXCL},
- .speechWin = {EC_WORD_DO, EC_WORD_YOU, EC_WORD_UNDERSTAND, EC_WORD_HOW, EC_WORD_NOW, EC_WORD_QUES},
- .speechLose = {EC_WORD_YES, EC_WORD_THAT_S, EC_WORD_HOW, EC_WORD_YOU, EC_WORD_DO, EC_WORD_IT},
- .speechAfter = {EC_WORD_YOU, EC_WORD_BEAT, EC_WORD_ME, EC_WORD_GOOD, EC_WORD_FOR, EC_WORD_YOU},
- .mons =
- {
- [0] =
- {
- .species = SPECIES_HITMONLEE,
- .heldItem = ITEM_FOCUS_BAND,
- .moves = {MOVE_MEGA_KICK, MOVE_MIND_READER, MOVE_FOCUS_ENERGY, MOVE_HI_JUMP_KICK},
- .level = 0,
- .ppBonuses = 0,
- .hpEV = 255,
- .attackEV = 255,
- .otId = TRAINER_HILL_OTID,
- .hpIV = 15,
- .attackIV = 15,
- .defenseIV = 15,
- .speedIV = 15,
- .spAttackIV = 15,
- .spDefenseIV = 15,
- .abilityNum = 0,
- .personality = 0x3,
- .nickname = _("HITMONLEE"),
- .friendship = 255,
- },
- [1] =
- {
- .species = SPECIES_PORYGON2,
- .heldItem = ITEM_SCOPE_LENS,
- .moves = {MOVE_LOCK_ON, MOVE_BLIZZARD, MOVE_CONVERSION_2, MOVE_PSYCHIC},
- .level = 0,
- .ppBonuses = 0,
- .hpEV = 255,
- .spAttackEV = 255,
- .otId = TRAINER_HILL_OTID,
- .hpIV = 15,
- .attackIV = 15,
- .defenseIV = 15,
- .speedIV = 15,
- .spAttackIV = 15,
- .spDefenseIV = 15,
- .abilityNum = 0,
- .personality = 0xF,
- .nickname = _("PORYGON2"),
- .friendship = 255,
- },
- [2] =
- {
- .species = SPECIES_SUICUNE,
- .heldItem = ITEM_PETAYA_BERRY,
- .moves = {MOVE_SURF, MOVE_CALM_MIND, MOVE_MIRROR_COAT, MOVE_MIST},
- .level = 0,
- .ppBonuses = 0,
- .speedEV = 255,
- .spAttackEV = 255,
- .otId = TRAINER_HILL_OTID,
- .hpIV = 15,
- .attackIV = 15,
- .defenseIV = 15,
- .speedIV = 15,
- .spAttackIV = 15,
- .spDefenseIV = 15,
- .abilityNum = 0,
- .personality = 0xF,
- .nickname = _("SUICUNE"),
- .friendship = 255,
- },
- [3] =
- {
- .species = SPECIES_HOUNDOOM,
- .heldItem = ITEM_QUICK_CLAW,
- .moves = {MOVE_FLAMETHROWER, MOVE_CRUNCH, MOVE_ROAR, MOVE_WILL_O_WISP},
- .level = 0,
- .ppBonuses = 0,
- .speedEV = 255,
- .spAttackEV = 255,
- .otId = TRAINER_HILL_OTID,
- .hpIV = 15,
- .attackIV = 15,
- .defenseIV = 15,
- .speedIV = 15,
- .spAttackIV = 15,
- .spDefenseIV = 15,
- .abilityNum = 1,
- .personality = 0xF,
- .nickname = _("HOUNDOOM"),
- .friendship = 255,
- },
- [4] =
- {
- .species = SPECIES_STANTLER,
- .heldItem = ITEM_LEFTOVERS,
- .moves = {MOVE_CONFUSE_RAY, MOVE_SWAGGER, MOVE_PSYCH_UP, MOVE_TAKE_DOWN},
- .level = 0,
- .ppBonuses = 0,
- .attackEV = 255,
- .speedEV = 255,
- .otId = TRAINER_HILL_OTID,
- .hpIV = 15,
- .attackIV = 15,
- .defenseIV = 15,
- .speedIV = 15,
- .spAttackIV = 15,
- .spDefenseIV = 15,
- .abilityNum = 0,
- .personality = 0x3,
- .nickname = _("STANTLER"),
- .friendship = 255,
- },
- [5] =
- {
- .species = SPECIES_ARTICUNO,
- .heldItem = ITEM_NEVER_MELT_ICE,
- .moves = {MOVE_BLIZZARD, MOVE_SHEER_COLD, MOVE_MIST, MOVE_AERIAL_ACE},
- .level = 0,
- .ppBonuses = 0,
- .hpEV = 255,
- .spAttackEV = 255,
- .otId = TRAINER_HILL_OTID,
- .hpIV = 15,
- .attackIV = 15,
- .defenseIV = 15,
- .speedIV = 15,
- .spAttackIV = 15,
- .spDefenseIV = 15,
- .abilityNum = 0,
- .personality = 0xF,
- .nickname = _("ARTICUNO"),
- .friendship = 255,
- },
- },
},
- },
- .data = {0xF1, 0xFB, 0xFB, 0xFB, 0xF9, 0xF9, 0x1B, 0x1C, 0x1D, 0xE5, 0xE6, 0xEE, 0xF5, 0xFB, 0xFB, 0x8, 0xED, 0xF5, 0xF5, 0xF5, 0xFB, 0xFB, 0xEC, 0xEC, 0xEC, 0xEB, 0xEC, 0xEC, 0xEC, 0xFB, 0xFB, 0x8, 0xF4, 0xEC, 0xEC, 0xEC, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0xEB, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0x8, 0xF1, 0xF5, 0xF5, 0xF5, 0xF5, 0xF5, 0xF5, 0xF5, 0xFB, 0xEB, 0xFB, 0xF5, 0xF5, 0xF5, 0xF5, 0x8, 0xF1, 0xEB, 0xEC, 0xEC, 0xEC, 0xEB, 0xEC, 0xEC, 0xFB, 0xEC, 0xFB, 0xEC, 0xEC, 0xEC, 0xEC, 0x8, 0xF1, 0xEB, 0xFB, 0xFB, 0xFB, 0xEB, 0xFB, 0xF5, 0xFB, 0xF5, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0x8, 0xF1, 0xEB, 0xFB, 0xF5, 0xFB, 0xEB, 0xFB, 0xEB, 0xFB, 0xEB, 0xF5, 0xF5, 0xF5, 0xFB, 0xFB, 0x8, 0xF1, 0xEB, 0xFB, 0xEB, 0xFB, 0xEB, 0xFB, 0xEB, 0xFB, 0xEB, 0xEC, 0xEC, 0xEC, 0xFB, 0xFB, 0x8, 0xF1, 0xEB, 0xFB, 0xEB, 0xFB, 0xEB, 0xFB, 0xEB, 0xFB, 0xEB, 0xFB, 0xF5, 0xF5, 0xF5, 0xF5, 0x8, 0xF1, 0xEB, 0xFB, 0xEB, 0xFB, 0xEB, 0xFB, 0xEB, 0xFB, 0xEB, 0xFB, 0xEC, 0xEC, 0xEC, 0xEC, 0x8, 0xF1, 0xEB, 0xFB, 0xEB, 0xFB, 0xEB, 0xFB, 0xEB, 0xFB, 0xEB, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0x8, 0xF1, 0xEB, 0xFB, 0xEB, 0xFB, 0xEB, 0xFB, 0xEB, 0xFB, 0xEB, 0xF5, 0xF5, 0xF5, 0xF5, 0xFB, 0x8, 0xF1, 0xEC, 0xFB, 0xEB, 0xFB, 0xEC, 0xFB, 0xEB, 0xFB, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xFB, 0x8, 0xF1, 0xFB, 0xFB, 0xEB, 0xFB, 0xFB, 0xFB, 0xEB, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0x8, 0xF1, 0xFB, 0xFB, 0xEC, 0xFB, 0xFB, 0xFB, 0xEC, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8},
- .unk3A0 = {0x381, 0x3F9, 0xF041, 0x41, 0x7F5F, 0x4401, 0x4541, 0x5579, 0x5541, 0x555F, 0x5541, 0x5541, 0x557D, 0x1101, 0x1101, 0xFFFF},
- .coords = {40, 91},
- .direction = 0x21,
- .range = 0x33,
+ .display = {
+ .data = {0xF1, 0xFB, 0xFB, 0xFB, 0xF9, 0xF9, 0x1B, 0x1C, 0x1D, 0xE5, 0xE6, 0xEE, 0xF5, 0xFB, 0xFB, 0x8, 0xED, 0xF5, 0xF5, 0xF5, 0xFB, 0xFB, 0xEC, 0xEC, 0xEC, 0xEB, 0xEC, 0xEC, 0xEC, 0xFB, 0xFB, 0x8, 0xF4, 0xEC, 0xEC, 0xEC, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0xEB, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0x8, 0xF1, 0xF5, 0xF5, 0xF5, 0xF5, 0xF5, 0xF5, 0xF5, 0xFB, 0xEB, 0xFB, 0xF5, 0xF5, 0xF5, 0xF5, 0x8, 0xF1, 0xEB, 0xEC, 0xEC, 0xEC, 0xEB, 0xEC, 0xEC, 0xFB, 0xEC, 0xFB, 0xEC, 0xEC, 0xEC, 0xEC, 0x8, 0xF1, 0xEB, 0xFB, 0xFB, 0xFB, 0xEB, 0xFB, 0xF5, 0xFB, 0xF5, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0x8, 0xF1, 0xEB, 0xFB, 0xF5, 0xFB, 0xEB, 0xFB, 0xEB, 0xFB, 0xEB, 0xF5, 0xF5, 0xF5, 0xFB, 0xFB, 0x8, 0xF1, 0xEB, 0xFB, 0xEB, 0xFB, 0xEB, 0xFB, 0xEB, 0xFB, 0xEB, 0xEC, 0xEC, 0xEC, 0xFB, 0xFB, 0x8, 0xF1, 0xEB, 0xFB, 0xEB, 0xFB, 0xEB, 0xFB, 0xEB, 0xFB, 0xEB, 0xFB, 0xF5, 0xF5, 0xF5, 0xF5, 0x8, 0xF1, 0xEB, 0xFB, 0xEB, 0xFB, 0xEB, 0xFB, 0xEB, 0xFB, 0xEB, 0xFB, 0xEC, 0xEC, 0xEC, 0xEC, 0x8, 0xF1, 0xEB, 0xFB, 0xEB, 0xFB, 0xEB, 0xFB, 0xEB, 0xFB, 0xEB, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0x8, 0xF1, 0xEB, 0xFB, 0xEB, 0xFB, 0xEB, 0xFB, 0xEB, 0xFB, 0xEB, 0xF5, 0xF5, 0xF5, 0xF5, 0xFB, 0x8, 0xF1, 0xEC, 0xFB, 0xEB, 0xFB, 0xEC, 0xFB, 0xEB, 0xFB, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xFB, 0x8, 0xF1, 0xFB, 0xFB, 0xEB, 0xFB, 0xFB, 0xFB, 0xEB, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0x8, 0xF1, 0xFB, 0xFB, 0xEC, 0xFB, 0xFB, 0xFB, 0xEC, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8},
+ .unk3A0 = {0x381, 0x3F9, 0xF041, 0x41, 0x7F5F, 0x4401, 0x4541, 0x5579, 0x5541, 0x555F, 0x5541, 0x5541, 0x557D, 0x1101, 0x1101, 0xFFFF},
+ .coords = {40, 91},
+ .direction = 0x21,
+ .range = 0x33,
+ }
},
- },
};
+
static const struct TrHillTag sDataTagExpert =
{
.unkField_0 = 8,
.unused1 = 1,
- .unkField_2 = 4,
- .unused3 = 0,
- .unused4 = 63,
- .unused5 = 31,
- .unused6 = 6,
- .floors =
- {
- [0] =
+ .numFloors = 4,
+ .checksum = 0x00061F3F
+};
+
+static const struct TrHillFloor sDataTagExpert_floors[] = {
+ [0] =
{
.unk0 = 0x39,
.unk1 = 0x3A,
.trainers =
- {
- [0] =
- {
- .name = _("ALFRED"),
- .facilityClass = FACILITY_CLASS_COOLTRAINER_M,
- .unused = 0,
- .speechBefore = {EC_WORD_WE, EC_WORD_CAN, EC_WORD_TAKE, EC_WORD_ON, EC_WORD_ANY, EC_WORD_TYPE},
- .speechWin = {EC_WORD_WE, EC_WORD_DID, EC_WORD_BETTER, EC_WORD_THAN, EC_WORD_OKAY, EC_WORD_EXCL},
- .speechLose = {EC_WORD_OUR, EC_WORD_STRATEGY, EC_WORD_ISN_T, EC_WORD_ANY, EC_WORD_GOOD, EC_WORD_ELLIPSIS},
- .speechAfter = {EC_WORD_WE, EC_WORD_NEED, EC_WORD_TO, EC_WORD_TRAIN, EC_WORD_A_LOT, EC_WORD_MORE},
- .mons =
- {
- [0] =
- {
- .species = SPECIES_SNORLAX,
- .heldItem = ITEM_QUICK_CLAW,
- .moves = {MOVE_MEGA_KICK, MOVE_SHADOW_BALL, MOVE_BRICK_BREAK, MOVE_EARTHQUAKE},
- .level = 0,
- .ppBonuses = 0,
- .hpEV = 6,
- .attackEV = 252,
- .defenseEV = 252,
- .otId = TRAINER_HILL_OTID,
- .hpIV = 31,
- .attackIV = 31,
- .defenseIV = 31,
- .speedIV = 31,
- .spAttackIV = 31,
- .spDefenseIV = 31,
- .abilityNum = 0,
- .personality = 0x35,
- .nickname = _("SNORLAX"),
- .friendship = 255,
- },
- [1] =
- {
- .species = SPECIES_MILTANK,
- .heldItem = ITEM_LEFTOVERS,
- .moves = {MOVE_DOUBLE_EDGE, MOVE_SHADOW_BALL, MOVE_ATTRACT, MOVE_MILK_DRINK},
- .level = 0,
- .ppBonuses = 0,
- .hpEV = 6,
- .attackEV = 252,
- .speedEV = 252,
- .otId = TRAINER_HILL_OTID,
- .hpIV = 31,
- .attackIV = 31,
- .defenseIV = 31,
- .speedIV = 31,
- .spAttackIV = 31,
- .spDefenseIV = 31,
- .abilityNum = 0,
- .personality = 0x3,
- .nickname = _("MILTANK"),
- .friendship = 255,
- },
- [2] =
- {
- .species = SPECIES_URSARING,
- .heldItem = ITEM_QUICK_CLAW,
- .moves = {MOVE_DOUBLE_EDGE, MOVE_CRUNCH, MOVE_BRICK_BREAK, MOVE_AERIAL_ACE},
- .level = 0,
- .ppBonuses = 0,
- .hpEV = 252,
- .attackEV = 252,
- .spAttackEV = 6,
- .otId = TRAINER_HILL_OTID,
- .hpIV = 31,
- .attackIV = 31,
- .defenseIV = 31,
- .speedIV = 31,
- .spAttackIV = 31,
- .spDefenseIV = 31,
- .abilityNum = 0,
- .personality = 0x7F,
- .nickname = _("URSARING"),
- .friendship = 255,
- },
- [3] =
- {
- .species = SPECIES_SLAKING,
- .heldItem = ITEM_CHESTO_BERRY,
- .moves = {MOVE_HYPER_BEAM, MOVE_SHADOW_BALL, MOVE_BRICK_BREAK, MOVE_REST},
- .level = 0,
- .ppBonuses = 0,
- .hpEV = 6,
- .attackEV = 252,
- .spDefenseEV = 252,
- .otId = TRAINER_HILL_OTID,
- .hpIV = 31,
- .attackIV = 31,
- .defenseIV = 31,
- .speedIV = 31,
- .spAttackIV = 31,
- .spDefenseIV = 31,
- .abilityNum = 0,
- .personality = 0x80,
- .nickname = _("SLAKING"),
- .friendship = 255,
- },
- [4] =
- {
- .species = SPECIES_KANGASKHAN,
- .heldItem = ITEM_LEFTOVERS,
- .moves = {MOVE_MEGA_KICK, MOVE_SHADOW_BALL, MOVE_ATTRACT, MOVE_FAKE_OUT},
- .level = 0,
- .ppBonuses = 0,
- .hpEV = 6,
- .attackEV = 252,
- .speedEV = 252,
- .otId = TRAINER_HILL_OTID,
- .hpIV = 31,
- .attackIV = 31,
- .defenseIV = 31,
- .speedIV = 31,
- .spAttackIV = 31,
- .spDefenseIV = 31,
- .abilityNum = 0,
- .personality = 0x3,
- .nickname = _("KANGASKHAN"),
- .friendship = 255,
- },
- [5] =
- {
- .species = SPECIES_ZANGOOSE,
- .heldItem = ITEM_SCOPE_LENS,
- .moves = {MOVE_CRUSH_CLAW, MOVE_SHADOW_BALL, MOVE_BRICK_BREAK, MOVE_ROAR},
- .level = 0,
- .ppBonuses = 0,
- .hpEV = 6,
- .attackEV = 252,
- .speedEV = 252,
- .otId = TRAINER_HILL_OTID,
- .hpIV = 31,
- .attackIV = 31,
- .defenseIV = 31,
- .speedIV = 31,
- .spAttackIV = 31,
- .spDefenseIV = 31,
- .abilityNum = 0,
- .personality = 0x80,
- .nickname = _("ZANGOOSE"),
- .friendship = 255,
- },
- },
- },
- [1] =
{
- .name = _("EDIE"),
- .facilityClass = FACILITY_CLASS_PSYCHIC_F,
- .unused = 0,
- .speechBefore = {EC_WORD_WE, EC_WORD_WILL_BE_HERE, EC_WORD_FOR, EC_WORD_ANY, EC_WORD_TRAINER, EC_WORD_CHALLENGE},
- .speechWin = {EC_WORD_MY, EC_WORD_STRATEGY, EC_WORD_WORKS, EC_WORD_TO, EC_WORD_PERFECTION, EC_WORD_EXCL},
- .speechLose = {EC_WORD_NO, EC_WORD_NO, EC_WORD_ELLIPSIS, EC_WORD_THAT, EC_WORD_WON_T, EC_WORD_DO},
- .speechAfter = {EC_WORD_THERE, EC_WORD_SHOULD, EC_WORD_BE, EC_WORD_A, EC_WORD_TRAINER, EC_WORD_SCHOOL},
- .mons =
- {
- [0] =
- {
- .species = SPECIES_SLOWKING,
- .heldItem = ITEM_LEFTOVERS,
- .moves = {MOVE_PSYCHIC, MOVE_SURF, MOVE_ICE_BEAM, MOVE_SKILL_SWAP},
- .level = 0,
- .ppBonuses = 0,
- .hpEV = 200,
- .defenseEV = 110,
- .spAttackEV = 200,
- .otId = TRAINER_HILL_OTID,
- .hpIV = 31,
- .attackIV = 31,
- .defenseIV = 31,
- .speedIV = 31,
- .spAttackIV = 31,
- .spDefenseIV = 31,
- .abilityNum = 1,
- .personality = 0xF,
- .nickname = _("SLOWKING"),
- .friendship = 255,
- },
- [1] =
- {
- .species = SPECIES_ESPEON,
- .heldItem = ITEM_LUM_BERRY,
- .moves = {MOVE_PSYCHIC, MOVE_BITE, MOVE_CALM_MIND, MOVE_REFLECT},
- .level = 0,
- .ppBonuses = 0,
- .hpEV = 6,
- .speedEV = 252,
- .spAttackEV = 252,
- .otId = TRAINER_HILL_OTID,
- .hpIV = 31,
- .attackIV = 31,
- .defenseIV = 31,
- .speedIV = 31,
- .spAttackIV = 31,
- .spDefenseIV = 31,
- .abilityNum = 0,
- .personality = 0x28,
- .nickname = _("ESPEON"),
- .friendship = 255,
- },
- [2] =
- {
- .species = SPECIES_STARMIE,
- .heldItem = ITEM_SHELL_BELL,
- .moves = {MOVE_PSYCHIC, MOVE_SURF, MOVE_THUNDERBOLT, MOVE_ICE_BEAM},
- .level = 0,
- .ppBonuses = 0,
- .hpEV = 6,
- .speedEV = 252,
- .spAttackEV = 252,
- .otId = TRAINER_HILL_OTID,
- .hpIV = 31,
- .attackIV = 31,
- .defenseIV = 31,
- .speedIV = 31,
- .spAttackIV = 31,
- .spDefenseIV = 31,
- .abilityNum = 1,
- .personality = 0xF,
- .nickname = _("STARMIE"),
- .friendship = 255,
+ [0] =
+ {
+ .name = _("ALFRED"),
+ .facilityClass = FACILITY_CLASS_COOLTRAINER_M,
+ .unused = 0,
+ .speechBefore = {EC_WORD_WE, EC_WORD_CAN, EC_WORD_TAKE, EC_WORD_ON, EC_WORD_ANY, EC_WORD_TYPE},
+ .speechWin = {EC_WORD_WE, EC_WORD_DID, EC_WORD_BETTER, EC_WORD_THAN, EC_WORD_OKAY, EC_WORD_EXCL},
+ .speechLose = {EC_WORD_OUR, EC_WORD_STRATEGY, EC_WORD_ISN_T, EC_WORD_ANY, EC_WORD_GOOD, EC_WORD_ELLIPSIS},
+ .speechAfter = {EC_WORD_WE, EC_WORD_NEED, EC_WORD_TO, EC_WORD_TRAIN, EC_WORD_A_LOT, EC_WORD_MORE},
+ .mons =
+ {
+ [0] =
+ {
+ .species = SPECIES_SNORLAX,
+ .heldItem = ITEM_QUICK_CLAW,
+ .moves = {MOVE_MEGA_KICK, MOVE_SHADOW_BALL, MOVE_BRICK_BREAK, MOVE_EARTHQUAKE},
+ .level = 0,
+ .ppBonuses = 0,
+ .hpEV = 6,
+ .attackEV = 252,
+ .defenseEV = 252,
+ .otId = TRAINER_HILL_OTID,
+ .hpIV = 31,
+ .attackIV = 31,
+ .defenseIV = 31,
+ .speedIV = 31,
+ .spAttackIV = 31,
+ .spDefenseIV = 31,
+ .abilityNum = 0,
+ .personality = 0x35,
+ .nickname = _("SNORLAX"),
+ .friendship = 255,
+ },
+ [1] =
+ {
+ .species = SPECIES_MILTANK,
+ .heldItem = ITEM_LEFTOVERS,
+ .moves = {MOVE_DOUBLE_EDGE, MOVE_SHADOW_BALL, MOVE_ATTRACT, MOVE_MILK_DRINK},
+ .level = 0,
+ .ppBonuses = 0,
+ .hpEV = 6,
+ .attackEV = 252,
+ .speedEV = 252,
+ .otId = TRAINER_HILL_OTID,
+ .hpIV = 31,
+ .attackIV = 31,
+ .defenseIV = 31,
+ .speedIV = 31,
+ .spAttackIV = 31,
+ .spDefenseIV = 31,
+ .abilityNum = 0,
+ .personality = 0x3,
+ .nickname = _("MILTANK"),
+ .friendship = 255,
+ },
+ [2] =
+ {
+ .species = SPECIES_URSARING,
+ .heldItem = ITEM_QUICK_CLAW,
+ .moves = {MOVE_DOUBLE_EDGE, MOVE_CRUNCH, MOVE_BRICK_BREAK, MOVE_AERIAL_ACE},
+ .level = 0,
+ .ppBonuses = 0,
+ .hpEV = 252,
+ .attackEV = 252,
+ .spAttackEV = 6,
+ .otId = TRAINER_HILL_OTID,
+ .hpIV = 31,
+ .attackIV = 31,
+ .defenseIV = 31,
+ .speedIV = 31,
+ .spAttackIV = 31,
+ .spDefenseIV = 31,
+ .abilityNum = 0,
+ .personality = 0x7F,
+ .nickname = _("URSARING"),
+ .friendship = 255,
+ },
+ [3] =
+ {
+ .species = SPECIES_SLAKING,
+ .heldItem = ITEM_CHESTO_BERRY,
+ .moves = {MOVE_HYPER_BEAM, MOVE_SHADOW_BALL, MOVE_BRICK_BREAK, MOVE_REST},
+ .level = 0,
+ .ppBonuses = 0,
+ .hpEV = 6,
+ .attackEV = 252,
+ .spDefenseEV = 252,
+ .otId = TRAINER_HILL_OTID,
+ .hpIV = 31,
+ .attackIV = 31,
+ .defenseIV = 31,
+ .speedIV = 31,
+ .spAttackIV = 31,
+ .spDefenseIV = 31,
+ .abilityNum = 0,
+ .personality = 0x80,
+ .nickname = _("SLAKING"),
+ .friendship = 255,
+ },
+ [4] =
+ {
+ .species = SPECIES_KANGASKHAN,
+ .heldItem = ITEM_LEFTOVERS,
+ .moves = {MOVE_MEGA_KICK, MOVE_SHADOW_BALL, MOVE_ATTRACT, MOVE_FAKE_OUT},
+ .level = 0,
+ .ppBonuses = 0,
+ .hpEV = 6,
+ .attackEV = 252,
+ .speedEV = 252,
+ .otId = TRAINER_HILL_OTID,
+ .hpIV = 31,
+ .attackIV = 31,
+ .defenseIV = 31,
+ .speedIV = 31,
+ .spAttackIV = 31,
+ .spDefenseIV = 31,
+ .abilityNum = 0,
+ .personality = 0x3,
+ .nickname = _("KANGASKHAN"),
+ .friendship = 255,
+ },
+ [5] =
+ {
+ .species = SPECIES_ZANGOOSE,
+ .heldItem = ITEM_SCOPE_LENS,
+ .moves = {MOVE_CRUSH_CLAW, MOVE_SHADOW_BALL, MOVE_BRICK_BREAK, MOVE_ROAR},
+ .level = 0,
+ .ppBonuses = 0,
+ .hpEV = 6,
+ .attackEV = 252,
+ .speedEV = 252,
+ .otId = TRAINER_HILL_OTID,
+ .hpIV = 31,
+ .attackIV = 31,
+ .defenseIV = 31,
+ .speedIV = 31,
+ .spAttackIV = 31,
+ .spDefenseIV = 31,
+ .abilityNum = 0,
+ .personality = 0x80,
+ .nickname = _("ZANGOOSE"),
+ .friendship = 255,
+ },
+ },
+ },
+ [1] =
+ {
+ .name = _("EDIE"),
+ .facilityClass = FACILITY_CLASS_PSYCHIC_F,
+ .unused = 0,
+ .speechBefore = {EC_WORD_WE, EC_WORD_WILL_BE_HERE, EC_WORD_FOR, EC_WORD_ANY, EC_WORD_TRAINER, EC_WORD_CHALLENGE},
+ .speechWin = {EC_WORD_MY, EC_WORD_STRATEGY, EC_WORD_WORKS, EC_WORD_TO, EC_WORD_PERFECTION, EC_WORD_EXCL},
+ .speechLose = {EC_WORD_NO, EC_WORD_NO, EC_WORD_ELLIPSIS, EC_WORD_THAT, EC_WORD_WON_T, EC_WORD_DO},
+ .speechAfter = {EC_WORD_THERE, EC_WORD_SHOULD, EC_WORD_BE, EC_WORD_A, EC_WORD_TRAINER, EC_WORD_SCHOOL},
+ .mons =
+ {
+ [0] =
+ {
+ .species = SPECIES_SLOWKING,
+ .heldItem = ITEM_LEFTOVERS,
+ .moves = {MOVE_PSYCHIC, MOVE_SURF, MOVE_ICE_BEAM, MOVE_SKILL_SWAP},
+ .level = 0,
+ .ppBonuses = 0,
+ .hpEV = 200,
+ .defenseEV = 110,
+ .spAttackEV = 200,
+ .otId = TRAINER_HILL_OTID,
+ .hpIV = 31,
+ .attackIV = 31,
+ .defenseIV = 31,
+ .speedIV = 31,
+ .spAttackIV = 31,
+ .spDefenseIV = 31,
+ .abilityNum = 1,
+ .personality = 0xF,
+ .nickname = _("SLOWKING"),
+ .friendship = 255,
+ },
+ [1] =
+ {
+ .species = SPECIES_ESPEON,
+ .heldItem = ITEM_LUM_BERRY,
+ .moves = {MOVE_PSYCHIC, MOVE_BITE, MOVE_CALM_MIND, MOVE_REFLECT},
+ .level = 0,
+ .ppBonuses = 0,
+ .hpEV = 6,
+ .speedEV = 252,
+ .spAttackEV = 252,
+ .otId = TRAINER_HILL_OTID,
+ .hpIV = 31,
+ .attackIV = 31,
+ .defenseIV = 31,
+ .speedIV = 31,
+ .spAttackIV = 31,
+ .spDefenseIV = 31,
+ .abilityNum = 0,
+ .personality = 0x28,
+ .nickname = _("ESPEON"),
+ .friendship = 255,
+ },
+ [2] =
+ {
+ .species = SPECIES_STARMIE,
+ .heldItem = ITEM_SHELL_BELL,
+ .moves = {MOVE_PSYCHIC, MOVE_SURF, MOVE_THUNDERBOLT, MOVE_ICE_BEAM},
+ .level = 0,
+ .ppBonuses = 0,
+ .hpEV = 6,
+ .speedEV = 252,
+ .spAttackEV = 252,
+ .otId = TRAINER_HILL_OTID,
+ .hpIV = 31,
+ .attackIV = 31,
+ .defenseIV = 31,
+ .speedIV = 31,
+ .spAttackIV = 31,
+ .spDefenseIV = 31,
+ .abilityNum = 1,
+ .personality = 0xF,
+ .nickname = _("STARMIE"),
+ .friendship = 255,
+ },
+ [3] =
+ {
+ .species = SPECIES_GENGAR,
+ .heldItem = ITEM_LUM_BERRY,
+ .moves = {MOVE_PSYCHIC, MOVE_THUNDERBOLT, MOVE_FIRE_PUNCH, MOVE_ICE_PUNCH},
+ .level = 0,
+ .ppBonuses = 0,
+ .hpEV = 6,
+ .speedEV = 252,
+ .spAttackEV = 252,
+ .otId = TRAINER_HILL_OTID,
+ .hpIV = 31,
+ .attackIV = 31,
+ .defenseIV = 31,
+ .speedIV = 31,
+ .spAttackIV = 31,
+ .spDefenseIV = 31,
+ .abilityNum = 0,
+ .personality = 0xF,
+ .nickname = _("GENGAR"),
+ .friendship = 255,
+ },
+ [4] =
+ {
+ .species = SPECIES_GARDEVOIR,
+ .heldItem = ITEM_SALAC_BERRY,
+ .moves = {MOVE_PSYCHIC, MOVE_THUNDERBOLT, MOVE_MAGICAL_LEAF, MOVE_DESTINY_BOND},
+ .level = 0,
+ .ppBonuses = 0,
+ .hpEV = 6,
+ .speedEV = 252,
+ .spAttackEV = 252,
+ .otId = TRAINER_HILL_OTID,
+ .hpIV = 31,
+ .attackIV = 31,
+ .defenseIV = 31,
+ .speedIV = 31,
+ .spAttackIV = 31,
+ .spDefenseIV = 31,
+ .abilityNum = 0,
+ .personality = 0xF,
+ .nickname = _("GARDEVOIR"),
+ .friendship = 255,
+ },
+ [5] =
+ {
+ .species = SPECIES_ALAKAZAM,
+ .heldItem = ITEM_LUM_BERRY,
+ .moves = {MOVE_PSYCHIC, MOVE_RECOVER, MOVE_THUNDER_WAVE, MOVE_ATTRACT},
+ .level = 0,
+ .ppBonuses = 0,
+ .hpEV = 6,
+ .speedEV = 252,
+ .spAttackEV = 252,
+ .otId = TRAINER_HILL_OTID,
+ .hpIV = 31,
+ .attackIV = 31,
+ .defenseIV = 31,
+ .speedIV = 31,
+ .spAttackIV = 31,
+ .spDefenseIV = 31,
+ .abilityNum = 0,
+ .personality = 0xF,
+ .nickname = _("ALAKAZAM"),
+ .friendship = 255,
+ },
+ },
},
- [3] =
- {
- .species = SPECIES_GENGAR,
- .heldItem = ITEM_LUM_BERRY,
- .moves = {MOVE_PSYCHIC, MOVE_THUNDERBOLT, MOVE_FIRE_PUNCH, MOVE_ICE_PUNCH},
- .level = 0,
- .ppBonuses = 0,
- .hpEV = 6,
- .speedEV = 252,
- .spAttackEV = 252,
- .otId = TRAINER_HILL_OTID,
- .hpIV = 31,
- .attackIV = 31,
- .defenseIV = 31,
- .speedIV = 31,
- .spAttackIV = 31,
- .spDefenseIV = 31,
- .abilityNum = 0,
- .personality = 0xF,
- .nickname = _("GENGAR"),
- .friendship = 255,
- },
- [4] =
- {
- .species = SPECIES_GARDEVOIR,
- .heldItem = ITEM_SALAC_BERRY,
- .moves = {MOVE_PSYCHIC, MOVE_THUNDERBOLT, MOVE_MAGICAL_LEAF, MOVE_DESTINY_BOND},
- .level = 0,
- .ppBonuses = 0,
- .hpEV = 6,
- .speedEV = 252,
- .spAttackEV = 252,
- .otId = TRAINER_HILL_OTID,
- .hpIV = 31,
- .attackIV = 31,
- .defenseIV = 31,
- .speedIV = 31,
- .spAttackIV = 31,
- .spDefenseIV = 31,
- .abilityNum = 0,
- .personality = 0xF,
- .nickname = _("GARDEVOIR"),
- .friendship = 255,
- },
- [5] =
- {
- .species = SPECIES_ALAKAZAM,
- .heldItem = ITEM_LUM_BERRY,
- .moves = {MOVE_PSYCHIC, MOVE_RECOVER, MOVE_THUNDER_WAVE, MOVE_ATTRACT},
- .level = 0,
- .ppBonuses = 0,
- .hpEV = 6,
- .speedEV = 252,
- .spAttackEV = 252,
- .otId = TRAINER_HILL_OTID,
- .hpIV = 31,
- .attackIV = 31,
- .defenseIV = 31,
- .speedIV = 31,
- .spAttackIV = 31,
- .spDefenseIV = 31,
- .abilityNum = 0,
- .personality = 0xF,
- .nickname = _("ALAKAZAM"),
- .friendship = 255,
- },
- },
},
- },
- .data = {0x31, 0x3B, 0x3B, 0x3B, 0x39, 0x39, 0x1B, 0x14, 0x15, 0x38, 0x39, 0x3A, 0x3B, 0x3B, 0x3B, 0x8, 0x31, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x2C, 0x39, 0x39, 0x3A, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x8, 0x31, 0x3B, 0x8, 0x8, 0x8, 0x8, 0x8, 0x3B, 0x8, 0x8, 0x8, 0x8, 0x8, 0x3B, 0x3B, 0x8, 0x69, 0x73, 0x8, 0x4D, 0x4D, 0x4D, 0x4D, 0xD1, 0x4D, 0x4D, 0x4D, 0x4D, 0x8, 0x69, 0x73, 0x8, 0x40, 0x3B, 0x8, 0x55, 0x55, 0x55, 0x55, 0xD1, 0x55, 0x55, 0x55, 0x55, 0x8, 0x31, 0x41, 0x8, 0x69, 0x41, 0x8, 0xC5, 0xD9, 0xD9, 0xD9, 0x9A, 0xD9, 0xD9, 0xD9, 0xC6, 0x8, 0x41, 0x73, 0x8, 0x69, 0x3B, 0x8, 0xD4, 0xDB, 0x9B, 0x73, 0x73, 0x73, 0x9B, 0xDB, 0xCC, 0x8, 0x31, 0x73, 0x8, 0x69, 0x3B, 0x8, 0xCD, 0x9B, 0x73, 0x73, 0x44, 0x73, 0x73, 0x9B, 0xD5, 0x8, 0x31, 0x73, 0x8, 0x69, 0x3B, 0x8, 0xD4, 0xDB, 0x9B, 0x73, 0x73, 0x73, 0x9B, 0xDB, 0xCC, 0x8, 0x31, 0x73, 0x8, 0x69, 0x41, 0x8, 0xD1, 0xDB, 0xDB, 0xDB, 0x9B, 0xDB, 0xDB, 0xDB, 0xDB, 0x8, 0x41, 0x73, 0x8, 0x40, 0x3B, 0x8, 0x8, 0xC7, 0xC7, 0xDB, 0xDB, 0xDB, 0xC7, 0xC7, 0x8, 0x8, 0x31, 0x41, 0x8, 0x69, 0x3B, 0x4D, 0x4D, 0x67, 0x67, 0xDB, 0xDB, 0xDB, 0x67, 0x67, 0x4D, 0x4D, 0x31, 0x73, 0x8, 0x69, 0x3B, 0x55, 0x55, 0xD7, 0xD7, 0xD1, 0xDB, 0xDB, 0xD7, 0xD7, 0x55, 0x55, 0x31, 0x73, 0x8, 0x69, 0x3B, 0x39, 0x39, 0x39, 0x39, 0x3A, 0x3B, 0x3B, 0x39, 0x39, 0x39, 0x39, 0x3A, 0x73, 0x8, 0x69, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8},
- .unk3A0 = {0x381, 0x201, 0x3EF9, 0x3EF9, 0x3EF9, 0x2009, 0x3019, 0x2009, 0x3019, 0x2009, 0x3019, 0x3019, 0x3C79, 0x1, 0x1, 0xFFFF},
- .coords = {116, 122},
- .direction = 0x23,
- .range = 0x55,
+ .display = {
+ .data = {0x31, 0x3B, 0x3B, 0x3B, 0x39, 0x39, 0x1B, 0x14, 0x15, 0x38, 0x39, 0x3A, 0x3B, 0x3B, 0x3B, 0x8, 0x31, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x2C, 0x39, 0x39, 0x3A, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x8, 0x31, 0x3B, 0x8, 0x8, 0x8, 0x8, 0x8, 0x3B, 0x8, 0x8, 0x8, 0x8, 0x8, 0x3B, 0x3B, 0x8, 0x69, 0x73, 0x8, 0x4D, 0x4D, 0x4D, 0x4D, 0xD1, 0x4D, 0x4D, 0x4D, 0x4D, 0x8, 0x69, 0x73, 0x8, 0x40, 0x3B, 0x8, 0x55, 0x55, 0x55, 0x55, 0xD1, 0x55, 0x55, 0x55, 0x55, 0x8, 0x31, 0x41, 0x8, 0x69, 0x41, 0x8, 0xC5, 0xD9, 0xD9, 0xD9, 0x9A, 0xD9, 0xD9, 0xD9, 0xC6, 0x8, 0x41, 0x73, 0x8, 0x69, 0x3B, 0x8, 0xD4, 0xDB, 0x9B, 0x73, 0x73, 0x73, 0x9B, 0xDB, 0xCC, 0x8, 0x31, 0x73, 0x8, 0x69, 0x3B, 0x8, 0xCD, 0x9B, 0x73, 0x73, 0x44, 0x73, 0x73, 0x9B, 0xD5, 0x8, 0x31, 0x73, 0x8, 0x69, 0x3B, 0x8, 0xD4, 0xDB, 0x9B, 0x73, 0x73, 0x73, 0x9B, 0xDB, 0xCC, 0x8, 0x31, 0x73, 0x8, 0x69, 0x41, 0x8, 0xD1, 0xDB, 0xDB, 0xDB, 0x9B, 0xDB, 0xDB, 0xDB, 0xDB, 0x8, 0x41, 0x73, 0x8, 0x40, 0x3B, 0x8, 0x8, 0xC7, 0xC7, 0xDB, 0xDB, 0xDB, 0xC7, 0xC7, 0x8, 0x8, 0x31, 0x41, 0x8, 0x69, 0x3B, 0x4D, 0x4D, 0x67, 0x67, 0xDB, 0xDB, 0xDB, 0x67, 0x67, 0x4D, 0x4D, 0x31, 0x73, 0x8, 0x69, 0x3B, 0x55, 0x55, 0xD7, 0xD7, 0xD1, 0xDB, 0xDB, 0xD7, 0xD7, 0x55, 0x55, 0x31, 0x73, 0x8, 0x69, 0x3B, 0x39, 0x39, 0x39, 0x39, 0x3A, 0x3B, 0x3B, 0x39, 0x39, 0x39, 0x39, 0x3A, 0x73, 0x8, 0x69, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8},
+ .unk3A0 = {0x381, 0x201, 0x3EF9, 0x3EF9, 0x3EF9, 0x2009, 0x3019, 0x2009, 0x3019, 0x2009, 0x3019, 0x3019, 0x3C79, 0x1, 0x1, 0xFFFF},
+ .coords = {116, 122},
+ .direction = 0x23,
+ .range = 0x55,
+ }
},
- [1] =
+ [1] =
{
.unk0 = 0x3B,
.unk1 = 0x3C,
.trainers =
- {
- [0] =
{
- .name = _("RODERICK"),
- .facilityClass = FACILITY_CLASS_COOLTRAINER_M,
- .unused = 0,
- .speechBefore = {EC_WORD_I, EC_WORD_CAN, EC_WORD_WIN, EC_WORD_WITHOUT, EC_WORD_A, EC_MOVE2(HELPING_HAND)},
- .speechWin = {EC_WORD_IT_S, EC_WORD_ONLY, EC_WORD_NATURAL, EC_WORD_THAT, EC_WORD_I, EC_WORD_WIN},
- .speechLose = {EC_WORD_LOSING, EC_WORD_HAS, EC_WORD_ME, EC_WORD_FEELING, EC_WORD_SMALL, EC_WORD_ELLIPSIS},
- .speechAfter = {EC_WORD_YOU, EC_WORD_HAVE, EC_WORD_A, EC_WORD_GOOD, EC_WORD_TEACHER, EC_WORD_QUES},
- .mons =
- {
- [0] =
- {
- .species = SPECIES_SWELLOW,
- .heldItem = ITEM_LEFTOVERS,
- .moves = {MOVE_AERIAL_ACE, MOVE_AGILITY, MOVE_FACADE, MOVE_ATTRACT},
- .level = 0,
- .ppBonuses = 0,
- .hpEV = 252,
- .attackEV = 252,
- .spDefenseEV = 6,
- .otId = TRAINER_HILL_OTID,
- .hpIV = 31,
- .attackIV = 31,
- .defenseIV = 31,
- .speedIV = 31,
- .spAttackIV = 31,
- .spDefenseIV = 31,
- .abilityNum = 0,
- .personality = 0x3,
- .nickname = _("SWELLOW"),
- .friendship = 255,
- },
- [1] =
- {
- .species = SPECIES_MACHAMP,
- .heldItem = ITEM_LEFTOVERS,
- .moves = {MOVE_LOW_KICK, MOVE_ROCK_SLIDE, MOVE_FACADE, MOVE_ATTRACT},
- .level = 0,
- .ppBonuses = 0,
- .hpEV = 252,
- .attackEV = 252,
- .spDefenseEV = 6,
- .otId = TRAINER_HILL_OTID,
- .hpIV = 31,
- .attackIV = 31,
- .defenseIV = 31,
- .speedIV = 31,
- .spAttackIV = 31,
- .spDefenseIV = 31,
- .abilityNum = 0,
- .personality = 0x3,
- .nickname = _("MACHAMP"),
- .friendship = 255,
- },
- [2] =
- {
- .species = SPECIES_URSARING,
- .heldItem = ITEM_LEFTOVERS,
- .moves = {MOVE_PROTECT, MOVE_ROCK_SLIDE, MOVE_FACADE, MOVE_ATTRACT},
- .level = 0,
- .ppBonuses = 0,
- .hpEV = 252,
- .attackEV = 252,
- .spDefenseEV = 6,
- .otId = TRAINER_HILL_OTID,
- .hpIV = 31,
- .attackIV = 31,
- .defenseIV = 31,
- .speedIV = 31,
- .spAttackIV = 31,
- .spDefenseIV = 31,
- .abilityNum = 0,
- .personality = 0x3,
- .nickname = _("URSARING"),
- .friendship = 255,
- },
- [3] =
- {
- .species = SPECIES_KINGLER,
- .heldItem = ITEM_PERSIM_BERRY,
- .moves = {MOVE_RETURN, MOVE_PROTECT, MOVE_CRABHAMMER, MOVE_ATTRACT},
- .level = 0,
- .ppBonuses = 0,
- .hpEV = 252,
- .attackEV = 252,
- .spDefenseEV = 6,
- .otId = TRAINER_HILL_OTID,
- .hpIV = 31,
- .attackIV = 31,
- .defenseIV = 31,
- .speedIV = 31,
- .spAttackIV = 31,
- .spDefenseIV = 31,
- .abilityNum = 0,
- .personality = 0x80,
- .nickname = _("KINGLER"),
- .friendship = 255,
- },
- [4] =
- {
- .species = SPECIES_TYRANITAR,
- .heldItem = ITEM_PERSIM_BERRY,
- .moves = {MOVE_ROCK_SLIDE, MOVE_CRUNCH, MOVE_EARTHQUAKE, MOVE_ATTRACT},
- .level = 0,
- .ppBonuses = 0,
- .hpEV = 252,
- .attackEV = 252,
- .defenseEV = 6,
- .otId = TRAINER_HILL_OTID,
- .hpIV = 31,
- .attackIV = 31,
- .defenseIV = 31,
- .speedIV = 31,
- .spAttackIV = 31,
- .spDefenseIV = 31,
- .abilityNum = 0,
- .personality = 0x80,
- .nickname = _("TYRANITAR"),
- .friendship = 255,
+ [0] =
+ {
+ .name = _("RODERICK"),
+ .facilityClass = FACILITY_CLASS_COOLTRAINER_M,
+ .unused = 0,
+ .speechBefore = {EC_WORD_I, EC_WORD_CAN, EC_WORD_WIN, EC_WORD_WITHOUT, EC_WORD_A, EC_MOVE2(HELPING_HAND)},
+ .speechWin = {EC_WORD_IT_S, EC_WORD_ONLY, EC_WORD_NATURAL, EC_WORD_THAT, EC_WORD_I, EC_WORD_WIN},
+ .speechLose = {EC_WORD_LOSING, EC_WORD_HAS, EC_WORD_ME, EC_WORD_FEELING, EC_WORD_SMALL, EC_WORD_ELLIPSIS},
+ .speechAfter = {EC_WORD_YOU, EC_WORD_HAVE, EC_WORD_A, EC_WORD_GOOD, EC_WORD_TEACHER, EC_WORD_QUES},
+ .mons =
+ {
+ [0] =
+ {
+ .species = SPECIES_SWELLOW,
+ .heldItem = ITEM_LEFTOVERS,
+ .moves = {MOVE_AERIAL_ACE, MOVE_AGILITY, MOVE_FACADE, MOVE_ATTRACT},
+ .level = 0,
+ .ppBonuses = 0,
+ .hpEV = 252,
+ .attackEV = 252,
+ .spDefenseEV = 6,
+ .otId = TRAINER_HILL_OTID,
+ .hpIV = 31,
+ .attackIV = 31,
+ .defenseIV = 31,
+ .speedIV = 31,
+ .spAttackIV = 31,
+ .spDefenseIV = 31,
+ .abilityNum = 0,
+ .personality = 0x3,
+ .nickname = _("SWELLOW"),
+ .friendship = 255,
+ },
+ [1] =
+ {
+ .species = SPECIES_MACHAMP,
+ .heldItem = ITEM_LEFTOVERS,
+ .moves = {MOVE_LOW_KICK, MOVE_ROCK_SLIDE, MOVE_FACADE, MOVE_ATTRACT},
+ .level = 0,
+ .ppBonuses = 0,
+ .hpEV = 252,
+ .attackEV = 252,
+ .spDefenseEV = 6,
+ .otId = TRAINER_HILL_OTID,
+ .hpIV = 31,
+ .attackIV = 31,
+ .defenseIV = 31,
+ .speedIV = 31,
+ .spAttackIV = 31,
+ .spDefenseIV = 31,
+ .abilityNum = 0,
+ .personality = 0x3,
+ .nickname = _("MACHAMP"),
+ .friendship = 255,
+ },
+ [2] =
+ {
+ .species = SPECIES_URSARING,
+ .heldItem = ITEM_LEFTOVERS,
+ .moves = {MOVE_PROTECT, MOVE_ROCK_SLIDE, MOVE_FACADE, MOVE_ATTRACT},
+ .level = 0,
+ .ppBonuses = 0,
+ .hpEV = 252,
+ .attackEV = 252,
+ .spDefenseEV = 6,
+ .otId = TRAINER_HILL_OTID,
+ .hpIV = 31,
+ .attackIV = 31,
+ .defenseIV = 31,
+ .speedIV = 31,
+ .spAttackIV = 31,
+ .spDefenseIV = 31,
+ .abilityNum = 0,
+ .personality = 0x3,
+ .nickname = _("URSARING"),
+ .friendship = 255,
+ },
+ [3] =
+ {
+ .species = SPECIES_KINGLER,
+ .heldItem = ITEM_PERSIM_BERRY,
+ .moves = {MOVE_RETURN, MOVE_PROTECT, MOVE_CRABHAMMER, MOVE_ATTRACT},
+ .level = 0,
+ .ppBonuses = 0,
+ .hpEV = 252,
+ .attackEV = 252,
+ .spDefenseEV = 6,
+ .otId = TRAINER_HILL_OTID,
+ .hpIV = 31,
+ .attackIV = 31,
+ .defenseIV = 31,
+ .speedIV = 31,
+ .spAttackIV = 31,
+ .spDefenseIV = 31,
+ .abilityNum = 0,
+ .personality = 0x80,
+ .nickname = _("KINGLER"),
+ .friendship = 255,
+ },
+ [4] =
+ {
+ .species = SPECIES_TYRANITAR,
+ .heldItem = ITEM_PERSIM_BERRY,
+ .moves = {MOVE_ROCK_SLIDE, MOVE_CRUNCH, MOVE_EARTHQUAKE, MOVE_ATTRACT},
+ .level = 0,
+ .ppBonuses = 0,
+ .hpEV = 252,
+ .attackEV = 252,
+ .defenseEV = 6,
+ .otId = TRAINER_HILL_OTID,
+ .hpIV = 31,
+ .attackIV = 31,
+ .defenseIV = 31,
+ .speedIV = 31,
+ .spAttackIV = 31,
+ .spDefenseIV = 31,
+ .abilityNum = 0,
+ .personality = 0x80,
+ .nickname = _("TYRANITAR"),
+ .friendship = 255,
+ },
+ [5] =
+ {
+ .species = SPECIES_DRAGONITE,
+ .heldItem = ITEM_PERSIM_BERRY,
+ .moves = {MOVE_BODY_SLAM, MOVE_THUNDER_WAVE, MOVE_EARTHQUAKE, MOVE_ATTRACT},
+ .level = 0,
+ .ppBonuses = 0,
+ .hpEV = 252,
+ .attackEV = 252,
+ .spDefenseEV = 6,
+ .otId = TRAINER_HILL_OTID,
+ .hpIV = 31,
+ .attackIV = 31,
+ .defenseIV = 31,
+ .speedIV = 31,
+ .spAttackIV = 31,
+ .spDefenseIV = 31,
+ .abilityNum = 0,
+ .personality = 0x80,
+ .nickname = _("DRAGONITE"),
+ .friendship = 255,
+ },
+ },
+ },
+ [1] =
+ {
+ .name = _("ALICIA"),
+ .facilityClass = FACILITY_CLASS_COOLTRAINER_F,
+ .unused = 0,
+ .speechBefore = {EC_WORD_I, EC_WORD_DON_T, EC_WORD_NEED, EC_WORD_A, EC_MOVE2(HELPING_HAND), EC_WORD_EXCL},
+ .speechWin = {EC_WORD_SORRY, EC_WORD_EXCL, EC_WORD_TOO, EC_WORD_BAD, EC_WORD_FOR, EC_WORD_YOU},
+ .speechLose = {EC_WORD_WHAT, EC_WORD_AN, EC_WORD_UNBELIEVABLE, EC_MOVE2(STRUGGLE), EC_WORD_THAT_WAS, EC_WORD_EXCL},
+ .speechAfter = {EC_WORD_I, EC_WORD_CAN, EC_WORD_BE, EC_WORD_YOUR, EC_WORD_POKEMON, EC_WORD_TEACHER},
+ .mons =
+ {
+ [0] =
+ {
+ .species = SPECIES_JOLTEON,
+ .heldItem = ITEM_BRIGHT_POWDER,
+ .moves = {MOVE_THUNDERBOLT, MOVE_THUNDER_WAVE, MOVE_ATTRACT, MOVE_SWAGGER},
+ .level = 0,
+ .ppBonuses = 0,
+ .hpEV = 6,
+ .speedEV = 252,
+ .spAttackEV = 252,
+ .otId = TRAINER_HILL_OTID,
+ .hpIV = 31,
+ .attackIV = 31,
+ .defenseIV = 31,
+ .speedIV = 31,
+ .spAttackIV = 31,
+ .spDefenseIV = 31,
+ .abilityNum = 0,
+ .personality = 0xA,
+ .nickname = _("JOLTEON"),
+ .friendship = 255,
+ },
+ [1] =
+ {
+ .species = SPECIES_ALAKAZAM,
+ .heldItem = ITEM_KINGS_ROCK,
+ .moves = {MOVE_PSYCHIC, MOVE_ICE_PUNCH, MOVE_ATTRACT, MOVE_SWAGGER},
+ .level = 0,
+ .ppBonuses = 0,
+ .hpEV = 6,
+ .speedEV = 252,
+ .spAttackEV = 252,
+ .otId = TRAINER_HILL_OTID,
+ .hpIV = 31,
+ .attackIV = 31,
+ .defenseIV = 31,
+ .speedIV = 31,
+ .spAttackIV = 31,
+ .spDefenseIV = 31,
+ .abilityNum = 0,
+ .personality = 0xA,
+ .nickname = _("ALAKAZAM"),
+ .friendship = 255,
+ },
+ [2] =
+ {
+ .species = SPECIES_STARMIE,
+ .heldItem = ITEM_SCOPE_LENS,
+ .moves = {MOVE_SURF, MOVE_PSYCHIC, MOVE_CONFUSE_RAY, MOVE_SWAGGER},
+ .level = 0,
+ .ppBonuses = 0,
+ .hpEV = 6,
+ .speedEV = 252,
+ .spAttackEV = 252,
+ .otId = TRAINER_HILL_OTID,
+ .hpIV = 31,
+ .attackIV = 31,
+ .defenseIV = 31,
+ .speedIV = 31,
+ .spAttackIV = 31,
+ .spDefenseIV = 31,
+ .abilityNum = 1,
+ .personality = 0xA,
+ .nickname = _("STARMIE"),
+ .friendship = 255,
+ },
+ [3] =
+ {
+ .species = SPECIES_DUSCLOPS,
+ .heldItem = ITEM_LEFTOVERS,
+ .moves = {MOVE_PURSUIT, MOVE_PROTECT, MOVE_ATTRACT, MOVE_WILL_O_WISP},
+ .level = 0,
+ .ppBonuses = 0,
+ .hpEV = 252,
+ .defenseEV = 252,
+ .spDefenseEV = 6,
+ .otId = TRAINER_HILL_OTID,
+ .hpIV = 31,
+ .attackIV = 31,
+ .defenseIV = 31,
+ .speedIV = 31,
+ .spAttackIV = 31,
+ .spDefenseIV = 31,
+ .abilityNum = 0,
+ .personality = 0x82,
+ .nickname = _("DUSCLOPS"),
+ .friendship = 255,
+ },
+ [4] =
+ {
+ .species = SPECIES_NINETALES,
+ .heldItem = ITEM_WHITE_HERB,
+ .moves = {MOVE_OVERHEAT, MOVE_CONFUSE_RAY, MOVE_WILL_O_WISP, MOVE_ATTRACT},
+ .level = 0,
+ .ppBonuses = 0,
+ .hpEV = 6,
+ .speedEV = 252,
+ .spAttackEV = 252,
+ .otId = TRAINER_HILL_OTID,
+ .hpIV = 31,
+ .attackIV = 31,
+ .defenseIV = 31,
+ .speedIV = 31,
+ .spAttackIV = 31,
+ .spDefenseIV = 31,
+ .abilityNum = 0,
+ .personality = 0xD2,
+ .nickname = _("NINETALES"),
+ .friendship = 255,
+ },
+ [5] =
+ {
+ .species = SPECIES_BANETTE,
+ .heldItem = ITEM_FOCUS_BAND,
+ .moves = {MOVE_SHADOW_BALL, MOVE_FAINT_ATTACK, MOVE_ATTRACT, MOVE_WILL_O_WISP},
+ .level = 0,
+ .ppBonuses = 0,
+ .hpEV = 252,
+ .defenseEV = 252,
+ .spDefenseEV = 6,
+ .otId = TRAINER_HILL_OTID,
+ .hpIV = 31,
+ .attackIV = 31,
+ .defenseIV = 31,
+ .speedIV = 31,
+ .spAttackIV = 31,
+ .spDefenseIV = 31,
+ .abilityNum = 0,
+ .personality = 0x85,
+ .nickname = _("BANETTE"),
+ .friendship = 255,
+ },
+ },
},
- [5] =
- {
- .species = SPECIES_DRAGONITE,
- .heldItem = ITEM_PERSIM_BERRY,
- .moves = {MOVE_BODY_SLAM, MOVE_THUNDER_WAVE, MOVE_EARTHQUAKE, MOVE_ATTRACT},
- .level = 0,
- .ppBonuses = 0,
- .hpEV = 252,
- .attackEV = 252,
- .spDefenseEV = 6,
- .otId = TRAINER_HILL_OTID,
- .hpIV = 31,
- .attackIV = 31,
- .defenseIV = 31,
- .speedIV = 31,
- .spAttackIV = 31,
- .spDefenseIV = 31,
- .abilityNum = 0,
- .personality = 0x80,
- .nickname = _("DRAGONITE"),
- .friendship = 255,
- },
- },
},
- [1] =
- {
- .name = _("ALICIA"),
- .facilityClass = FACILITY_CLASS_COOLTRAINER_F,
- .unused = 0,
- .speechBefore = {EC_WORD_I, EC_WORD_DON_T, EC_WORD_NEED, EC_WORD_A, EC_MOVE2(HELPING_HAND), EC_WORD_EXCL},
- .speechWin = {EC_WORD_SORRY, EC_WORD_EXCL, EC_WORD_TOO, EC_WORD_BAD, EC_WORD_FOR, EC_WORD_YOU},
- .speechLose = {EC_WORD_WHAT, EC_WORD_AN, EC_WORD_UNBELIEVABLE, EC_MOVE2(STRUGGLE), EC_WORD_THAT_WAS, EC_WORD_EXCL},
- .speechAfter = {EC_WORD_I, EC_WORD_CAN, EC_WORD_BE, EC_WORD_YOUR, EC_WORD_POKEMON, EC_WORD_TEACHER},
- .mons =
- {
- [0] =
- {
- .species = SPECIES_JOLTEON,
- .heldItem = ITEM_BRIGHT_POWDER,
- .moves = {MOVE_THUNDERBOLT, MOVE_THUNDER_WAVE, MOVE_ATTRACT, MOVE_SWAGGER},
- .level = 0,
- .ppBonuses = 0,
- .hpEV = 6,
- .speedEV = 252,
- .spAttackEV = 252,
- .otId = TRAINER_HILL_OTID,
- .hpIV = 31,
- .attackIV = 31,
- .defenseIV = 31,
- .speedIV = 31,
- .spAttackIV = 31,
- .spDefenseIV = 31,
- .abilityNum = 0,
- .personality = 0xA,
- .nickname = _("JOLTEON"),
- .friendship = 255,
- },
- [1] =
- {
- .species = SPECIES_ALAKAZAM,
- .heldItem = ITEM_KINGS_ROCK,
- .moves = {MOVE_PSYCHIC, MOVE_ICE_PUNCH, MOVE_ATTRACT, MOVE_SWAGGER},
- .level = 0,
- .ppBonuses = 0,
- .hpEV = 6,
- .speedEV = 252,
- .spAttackEV = 252,
- .otId = TRAINER_HILL_OTID,
- .hpIV = 31,
- .attackIV = 31,
- .defenseIV = 31,
- .speedIV = 31,
- .spAttackIV = 31,
- .spDefenseIV = 31,
- .abilityNum = 0,
- .personality = 0xA,
- .nickname = _("ALAKAZAM"),
- .friendship = 255,
- },
- [2] =
- {
- .species = SPECIES_STARMIE,
- .heldItem = ITEM_SCOPE_LENS,
- .moves = {MOVE_SURF, MOVE_PSYCHIC, MOVE_CONFUSE_RAY, MOVE_SWAGGER},
- .level = 0,
- .ppBonuses = 0,
- .hpEV = 6,
- .speedEV = 252,
- .spAttackEV = 252,
- .otId = TRAINER_HILL_OTID,
- .hpIV = 31,
- .attackIV = 31,
- .defenseIV = 31,
- .speedIV = 31,
- .spAttackIV = 31,
- .spDefenseIV = 31,
- .abilityNum = 1,
- .personality = 0xA,
- .nickname = _("STARMIE"),
- .friendship = 255,
- },
- [3] =
- {
- .species = SPECIES_DUSCLOPS,
- .heldItem = ITEM_LEFTOVERS,
- .moves = {MOVE_PURSUIT, MOVE_PROTECT, MOVE_ATTRACT, MOVE_WILL_O_WISP},
- .level = 0,
- .ppBonuses = 0,
- .hpEV = 252,
- .defenseEV = 252,
- .spDefenseEV = 6,
- .otId = TRAINER_HILL_OTID,
- .hpIV = 31,
- .attackIV = 31,
- .defenseIV = 31,
- .speedIV = 31,
- .spAttackIV = 31,
- .spDefenseIV = 31,
- .abilityNum = 0,
- .personality = 0x82,
- .nickname = _("DUSCLOPS"),
- .friendship = 255,
- },
- [4] =
- {
- .species = SPECIES_NINETALES,
- .heldItem = ITEM_WHITE_HERB,
- .moves = {MOVE_OVERHEAT, MOVE_CONFUSE_RAY, MOVE_WILL_O_WISP, MOVE_ATTRACT},
- .level = 0,
- .ppBonuses = 0,
- .hpEV = 6,
- .speedEV = 252,
- .spAttackEV = 252,
- .otId = TRAINER_HILL_OTID,
- .hpIV = 31,
- .attackIV = 31,
- .defenseIV = 31,
- .speedIV = 31,
- .spAttackIV = 31,
- .spDefenseIV = 31,
- .abilityNum = 0,
- .personality = 0xD2,
- .nickname = _("NINETALES"),
- .friendship = 255,
- },
- [5] =
- {
- .species = SPECIES_BANETTE,
- .heldItem = ITEM_FOCUS_BAND,
- .moves = {MOVE_SHADOW_BALL, MOVE_FAINT_ATTACK, MOVE_ATTRACT, MOVE_WILL_O_WISP},
- .level = 0,
- .ppBonuses = 0,
- .hpEV = 252,
- .defenseEV = 252,
- .spDefenseEV = 6,
- .otId = TRAINER_HILL_OTID,
- .hpIV = 31,
- .attackIV = 31,
- .defenseIV = 31,
- .speedIV = 31,
- .spAttackIV = 31,
- .spDefenseIV = 31,
- .abilityNum = 0,
- .personality = 0x85,
- .nickname = _("BANETTE"),
- .friendship = 255,
- },
- },
- },
- },
- .data = {0x31, 0x3B, 0x3B, 0x3B, 0x39, 0x39, 0x13, 0x14, 0x15, 0x38, 0x39, 0x3A, 0x3B, 0x3B, 0x3B, 0x8, 0x91, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x78, 0x8, 0x91, 0x46, 0x9B, 0x7C, 0x9B, 0x9B, 0x9B, 0x7D, 0x9B, 0x7C, 0x9B, 0x7B, 0x9B, 0x7A, 0x9B, 0x8, 0x91, 0x46, 0x7D, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x8, 0x91, 0x46, 0x9B, 0x7E, 0x9B, 0x9B, 0x9B, 0x7D, 0x9B, 0x7E, 0x9B, 0xB3, 0x9B, 0x9B, 0x9B, 0x8, 0x91, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x9B, 0x8, 0x91, 0x46, 0x9B, 0x7D, 0x9B, 0x7C, 0x9B, 0x7B, 0x9B, 0x7A, 0x9B, 0x7C, 0x9B, 0x9B, 0x9B, 0x8, 0x91, 0x46, 0x9B, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x8, 0x91, 0x46, 0x9B, 0x7C, 0x9B, 0x7D, 0x9B, 0x7E, 0x9B, 0x9B, 0x9B, 0x7D, 0x9B, 0x7E, 0x9B, 0x8, 0x91, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0xB3, 0x8, 0x91, 0xD6, 0x96, 0x9B, 0x9B, 0x96, 0xD6, 0xDB, 0xD6, 0x96, 0x9B, 0x9B, 0x96, 0xD6, 0x9B, 0x8, 0xD6, 0x96, 0x9B, 0x9B, 0x96, 0xD6, 0xDB, 0xDB, 0xDB, 0xD6, 0x96, 0x9B, 0x9B, 0x96, 0xD6, 0x8, 0x96, 0x9B, 0x9B, 0x96, 0xD6, 0xDB, 0xDB, 0xDB, 0xDB, 0xDB, 0xD6, 0x96, 0x9B, 0x9B, 0x96, 0x8, 0xD6, 0x96, 0x9B, 0x9B, 0x96, 0xD6, 0xDB, 0xDB, 0xDB, 0xD6, 0x96, 0x9B, 0x9B, 0x96, 0xD6, 0x8, 0x91, 0xD6, 0x96, 0x9B, 0x9B, 0x96, 0xD6, 0xDB, 0xD6, 0x96, 0x9B, 0x9B, 0x96, 0xD6, 0x9B, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8},
- .unk3A0 = {0x381, 0x7FFD, 0x4001, 0x5FFF, 0x4001, 0x7FFD, 0x4001, 0x5FFF, 0x4001, 0x7FFD, 0x1, 0x1, 0x1, 0x1, 0x1, 0xFFFF},
- .coords = {167, 231},
- .direction = 0x1,
- .range = 0x33,
+ .display = {
+ .data = {0x31, 0x3B, 0x3B, 0x3B, 0x39, 0x39, 0x13, 0x14, 0x15, 0x38, 0x39, 0x3A, 0x3B, 0x3B, 0x3B, 0x8, 0x91, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x78, 0x8, 0x91, 0x46, 0x9B, 0x7C, 0x9B, 0x9B, 0x9B, 0x7D, 0x9B, 0x7C, 0x9B, 0x7B, 0x9B, 0x7A, 0x9B, 0x8, 0x91, 0x46, 0x7D, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x8, 0x91, 0x46, 0x9B, 0x7E, 0x9B, 0x9B, 0x9B, 0x7D, 0x9B, 0x7E, 0x9B, 0xB3, 0x9B, 0x9B, 0x9B, 0x8, 0x91, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x9B, 0x8, 0x91, 0x46, 0x9B, 0x7D, 0x9B, 0x7C, 0x9B, 0x7B, 0x9B, 0x7A, 0x9B, 0x7C, 0x9B, 0x9B, 0x9B, 0x8, 0x91, 0x46, 0x9B, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x8, 0x91, 0x46, 0x9B, 0x7C, 0x9B, 0x7D, 0x9B, 0x7E, 0x9B, 0x9B, 0x9B, 0x7D, 0x9B, 0x7E, 0x9B, 0x8, 0x91, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0xB3, 0x8, 0x91, 0xD6, 0x96, 0x9B, 0x9B, 0x96, 0xD6, 0xDB, 0xD6, 0x96, 0x9B, 0x9B, 0x96, 0xD6, 0x9B, 0x8, 0xD6, 0x96, 0x9B, 0x9B, 0x96, 0xD6, 0xDB, 0xDB, 0xDB, 0xD6, 0x96, 0x9B, 0x9B, 0x96, 0xD6, 0x8, 0x96, 0x9B, 0x9B, 0x96, 0xD6, 0xDB, 0xDB, 0xDB, 0xDB, 0xDB, 0xD6, 0x96, 0x9B, 0x9B, 0x96, 0x8, 0xD6, 0x96, 0x9B, 0x9B, 0x96, 0xD6, 0xDB, 0xDB, 0xDB, 0xD6, 0x96, 0x9B, 0x9B, 0x96, 0xD6, 0x8, 0x91, 0xD6, 0x96, 0x9B, 0x9B, 0x96, 0xD6, 0xDB, 0xD6, 0x96, 0x9B, 0x9B, 0x96, 0xD6, 0x9B, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8},
+ .unk3A0 = {0x381, 0x7FFD, 0x4001, 0x5FFF, 0x4001, 0x7FFD, 0x4001, 0x5FFF, 0x4001, 0x7FFD, 0x1, 0x1, 0x1, 0x1, 0x1, 0xFFFF},
+ .coords = {167, 231},
+ .direction = 0x1,
+ .range = 0x33,
+ }
},
- [2] =
+ [2] =
{
.unk0 = 0x3D,
.unk1 = 0x3E,
.trainers =
- {
- [0] =
{
- .name = _("TERRENCE"),
- .facilityClass = FACILITY_CLASS_EXPERT_M,
- .unused = 0,
- .speechBefore = {EC_WORD_OH_DEAR, EC_WORD_THIS, EC_WORD_MATCH, EC_WORD_IS, EC_WORD_FOR, EC_WORD_YOU},
- .speechWin = {EC_WORD_OH_DEAR, EC_WORD_DID, EC_WORD_YOU, EC_WORD_SEE, EC_WORD_THAT, EC_WORD_QUES},
- .speechLose = {EC_WORD_OH_DEAR, EC_WORD_I_AM, EC_WORD_SO, EC_WORD_SORRY, 0xFFFF, 0xFFFF},
- .speechAfter = {EC_WORD_IS, EC_WORD_YOUR, EC_WORD_GRANDMOTHER, EC_WORD_STRONG, EC_WORD_QUES, 0xFFFF},
- .mons =
- {
- [0] =
- {
- .species = SPECIES_WOBBUFFET,
- .heldItem = ITEM_LEFTOVERS,
- .moves = {MOVE_MIRROR_COAT, MOVE_COUNTER, MOVE_SAFEGUARD, MOVE_ENCORE},
- .level = 0,
- .ppBonuses = 0,
- .hpEV = 250,
- .defenseEV = 130,
- .spDefenseEV = 130,
- .otId = TRAINER_HILL_OTID,
- .hpIV = 31,
- .attackIV = 31,
- .defenseIV = 31,
- .speedIV = 31,
- .spAttackIV = 31,
- .spDefenseIV = 31,
- .abilityNum = 0,
- .personality = 0x94,
- .nickname = _("WOBBUFFET"),
- .friendship = 255,
- },
- [1] =
- {
- .species = SPECIES_EXPLOUD,
- .heldItem = ITEM_CHESTO_BERRY,
- .moves = {MOVE_HYPER_VOICE, MOVE_COUNTER, MOVE_REST, MOVE_ROCK_SLIDE},
- .level = 0,
- .ppBonuses = 0,
- .hpEV = 250,
- .defenseEV = 130,
- .spDefenseEV = 130,
- .otId = TRAINER_HILL_OTID,
- .hpIV = 31,
- .attackIV = 31,
- .defenseIV = 31,
- .speedIV = 31,
- .spAttackIV = 31,
- .spDefenseIV = 31,
- .abilityNum = 0,
- .personality = 0x85,
- .nickname = _("EXPLOUD"),
- .friendship = 0,
- },
- [2] =
- {
- .species = SPECIES_CROBAT,
- .heldItem = ITEM_KINGS_ROCK,
- .moves = {MOVE_MEAN_LOOK, MOVE_CONFUSE_RAY, MOVE_AERIAL_ACE, MOVE_TOXIC},
- .level = 0,
- .ppBonuses = 0,
- .hpEV = 250,
- .defenseEV = 130,
- .spDefenseEV = 130,
- .otId = TRAINER_HILL_OTID,
- .hpIV = 31,
- .attackIV = 31,
- .defenseIV = 31,
- .speedIV = 31,
- .spAttackIV = 31,
- .spDefenseIV = 31,
- .abilityNum = 0,
- .personality = 0x0,
- .nickname = _("CROBAT"),
- .friendship = 255,
- },
- [3] =
- {
- .species = SPECIES_DUGTRIO,
- .heldItem = ITEM_BRIGHT_POWDER,
- .moves = {MOVE_DOUBLE_TEAM, MOVE_PROTECT, MOVE_RETURN, MOVE_SLUDGE_BOMB},
- .level = 0,
- .ppBonuses = 0,
- .hpEV = 6,
- .attackEV = 252,
- .speedEV = 252,
- .otId = TRAINER_HILL_OTID,
- .hpIV = 31,
- .attackIV = 31,
- .defenseIV = 31,
- .speedIV = 31,
- .spAttackIV = 31,
- .spDefenseIV = 31,
- .abilityNum = 1,
- .personality = 0xD,
- .nickname = _("DUGTRIO"),
- .friendship = 255,
- },
- [4] =
- {
- .species = SPECIES_ELECTRODE,
- .heldItem = ITEM_PETAYA_BERRY,
- .moves = {MOVE_TORMENT, MOVE_MIRROR_COAT, MOVE_THUNDERBOLT, MOVE_LIGHT_SCREEN},
- .level = 0,
- .ppBonuses = 0,
- .hpEV = 252,
- .defenseEV = 252,
- .spAttackEV = 6,
- .otId = TRAINER_HILL_OTID,
- .hpIV = 31,
- .attackIV = 31,
- .defenseIV = 31,
- .speedIV = 31,
- .spAttackIV = 31,
- .spDefenseIV = 31,
- .abilityNum = 0,
- .personality = 0x5,
- .nickname = _("ELECTRODE"),
- .friendship = 0,
- },
- [5] =
- {
- .species = SPECIES_GENGAR,
- .heldItem = ITEM_FOCUS_BAND,
- .moves = {MOVE_CONFUSE_RAY, MOVE_MEAN_LOOK, MOVE_GIGA_DRAIN, MOVE_WILL_O_WISP},
- .level = 0,
- .ppBonuses = 0,
- .hpEV = 252,
- .speedEV = 252,
- .spDefenseEV = 6,
- .otId = TRAINER_HILL_OTID,
- .hpIV = 31,
- .attackIV = 31,
- .defenseIV = 31,
- .speedIV = 31,
- .spAttackIV = 31,
- .spDefenseIV = 31,
- .abilityNum = 0,
- .personality = 0x14,
- .nickname = _("GENGAR"),
- .friendship = 255,
+ [0] =
+ {
+ .name = _("TERRENCE"),
+ .facilityClass = FACILITY_CLASS_EXPERT_M,
+ .unused = 0,
+ .speechBefore = {EC_WORD_OH_DEAR, EC_WORD_THIS, EC_WORD_MATCH, EC_WORD_IS, EC_WORD_FOR, EC_WORD_YOU},
+ .speechWin = {EC_WORD_OH_DEAR, EC_WORD_DID, EC_WORD_YOU, EC_WORD_SEE, EC_WORD_THAT, EC_WORD_QUES},
+ .speechLose = {EC_WORD_OH_DEAR, EC_WORD_I_AM, EC_WORD_SO, EC_WORD_SORRY, 0xFFFF, 0xFFFF},
+ .speechAfter = {EC_WORD_IS, EC_WORD_YOUR, EC_WORD_GRANDMOTHER, EC_WORD_STRONG, EC_WORD_QUES, 0xFFFF},
+ .mons =
+ {
+ [0] =
+ {
+ .species = SPECIES_WOBBUFFET,
+ .heldItem = ITEM_LEFTOVERS,
+ .moves = {MOVE_MIRROR_COAT, MOVE_COUNTER, MOVE_SAFEGUARD, MOVE_ENCORE},
+ .level = 0,
+ .ppBonuses = 0,
+ .hpEV = 250,
+ .defenseEV = 130,
+ .spDefenseEV = 130,
+ .otId = TRAINER_HILL_OTID,
+ .hpIV = 31,
+ .attackIV = 31,
+ .defenseIV = 31,
+ .speedIV = 31,
+ .spAttackIV = 31,
+ .spDefenseIV = 31,
+ .abilityNum = 0,
+ .personality = 0x94,
+ .nickname = _("WOBBUFFET"),
+ .friendship = 255,
+ },
+ [1] =
+ {
+ .species = SPECIES_EXPLOUD,
+ .heldItem = ITEM_CHESTO_BERRY,
+ .moves = {MOVE_HYPER_VOICE, MOVE_COUNTER, MOVE_REST, MOVE_ROCK_SLIDE},
+ .level = 0,
+ .ppBonuses = 0,
+ .hpEV = 250,
+ .defenseEV = 130,
+ .spDefenseEV = 130,
+ .otId = TRAINER_HILL_OTID,
+ .hpIV = 31,
+ .attackIV = 31,
+ .defenseIV = 31,
+ .speedIV = 31,
+ .spAttackIV = 31,
+ .spDefenseIV = 31,
+ .abilityNum = 0,
+ .personality = 0x85,
+ .nickname = _("EXPLOUD"),
+ .friendship = 0,
+ },
+ [2] =
+ {
+ .species = SPECIES_CROBAT,
+ .heldItem = ITEM_KINGS_ROCK,
+ .moves = {MOVE_MEAN_LOOK, MOVE_CONFUSE_RAY, MOVE_AERIAL_ACE, MOVE_TOXIC},
+ .level = 0,
+ .ppBonuses = 0,
+ .hpEV = 250,
+ .defenseEV = 130,
+ .spDefenseEV = 130,
+ .otId = TRAINER_HILL_OTID,
+ .hpIV = 31,
+ .attackIV = 31,
+ .defenseIV = 31,
+ .speedIV = 31,
+ .spAttackIV = 31,
+ .spDefenseIV = 31,
+ .abilityNum = 0,
+ .personality = 0x0,
+ .nickname = _("CROBAT"),
+ .friendship = 255,
+ },
+ [3] =
+ {
+ .species = SPECIES_DUGTRIO,
+ .heldItem = ITEM_BRIGHT_POWDER,
+ .moves = {MOVE_DOUBLE_TEAM, MOVE_PROTECT, MOVE_RETURN, MOVE_SLUDGE_BOMB},
+ .level = 0,
+ .ppBonuses = 0,
+ .hpEV = 6,
+ .attackEV = 252,
+ .speedEV = 252,
+ .otId = TRAINER_HILL_OTID,
+ .hpIV = 31,
+ .attackIV = 31,
+ .defenseIV = 31,
+ .speedIV = 31,
+ .spAttackIV = 31,
+ .spDefenseIV = 31,
+ .abilityNum = 1,
+ .personality = 0xD,
+ .nickname = _("DUGTRIO"),
+ .friendship = 255,
+ },
+ [4] =
+ {
+ .species = SPECIES_ELECTRODE,
+ .heldItem = ITEM_PETAYA_BERRY,
+ .moves = {MOVE_TORMENT, MOVE_MIRROR_COAT, MOVE_THUNDERBOLT, MOVE_LIGHT_SCREEN},
+ .level = 0,
+ .ppBonuses = 0,
+ .hpEV = 252,
+ .defenseEV = 252,
+ .spAttackEV = 6,
+ .otId = TRAINER_HILL_OTID,
+ .hpIV = 31,
+ .attackIV = 31,
+ .defenseIV = 31,
+ .speedIV = 31,
+ .spAttackIV = 31,
+ .spDefenseIV = 31,
+ .abilityNum = 0,
+ .personality = 0x5,
+ .nickname = _("ELECTRODE"),
+ .friendship = 0,
+ },
+ [5] =
+ {
+ .species = SPECIES_GENGAR,
+ .heldItem = ITEM_FOCUS_BAND,
+ .moves = {MOVE_CONFUSE_RAY, MOVE_MEAN_LOOK, MOVE_GIGA_DRAIN, MOVE_WILL_O_WISP},
+ .level = 0,
+ .ppBonuses = 0,
+ .hpEV = 252,
+ .speedEV = 252,
+ .spDefenseEV = 6,
+ .otId = TRAINER_HILL_OTID,
+ .hpIV = 31,
+ .attackIV = 31,
+ .defenseIV = 31,
+ .speedIV = 31,
+ .spAttackIV = 31,
+ .spDefenseIV = 31,
+ .abilityNum = 0,
+ .personality = 0x14,
+ .nickname = _("GENGAR"),
+ .friendship = 255,
+ },
+ },
+ },
+ [1] =
+ {
+ .name = _("CARLOTTA"),
+ .facilityClass = FACILITY_CLASS_EXPERT_F,
+ .unused = 0,
+ .speechBefore = {EC_WORD_OH_DEAR, EC_WORD_I, EC_WORD_WILL, EC_WORD_WIN, EC_WORD_FOR, EC_WORD_YOU},
+ .speechWin = {EC_WORD_OH_DEAR, EC_WORD_WE, EC_WORD_HAVE, EC_WORD_A, EC_WORD_PARTY, EC_WORD_LATER},
+ .speechLose = {EC_WORD_OH_DEAR, EC_WORD_I_AM, EC_WORD_SORRY, EC_WORD_TO, EC_WORD_DISAPPOINT, EC_WORD_YOU},
+ .speechAfter = {EC_WORD_IS, EC_WORD_YOUR, EC_WORD_GRANDFATHER, EC_WORD_COOL, EC_WORD_QUES, 0xFFFF},
+ .mons =
+ {
+ [0] =
+ {
+ .species = SPECIES_LAPRAS,
+ .heldItem = ITEM_QUICK_CLAW,
+ .moves = {MOVE_SURF, MOVE_ICE_BEAM, MOVE_PERISH_SONG, MOVE_SING},
+ .level = 0,
+ .ppBonuses = 0,
+ .hpEV = 250,
+ .defenseEV = 130,
+ .spDefenseEV = 130,
+ .otId = TRAINER_HILL_OTID,
+ .hpIV = 31,
+ .attackIV = 31,
+ .defenseIV = 31,
+ .speedIV = 31,
+ .spAttackIV = 31,
+ .spDefenseIV = 31,
+ .abilityNum = 0,
+ .personality = 0x82,
+ .nickname = _("LAPRAS"),
+ .friendship = 0,
+ },
+ [1] =
+ {
+ .species = SPECIES_ABSOL,
+ .heldItem = ITEM_FOCUS_BAND,
+ .moves = {MOVE_PERISH_SONG, MOVE_DOUBLE_EDGE, MOVE_PROTECT, MOVE_TORMENT},
+ .level = 0,
+ .ppBonuses = 0,
+ .hpEV = 252,
+ .defenseEV = 6,
+ .speedEV = 252,
+ .otId = TRAINER_HILL_OTID,
+ .hpIV = 31,
+ .attackIV = 31,
+ .defenseIV = 31,
+ .speedIV = 31,
+ .spAttackIV = 31,
+ .spDefenseIV = 31,
+ .abilityNum = 0,
+ .personality = 0x8A,
+ .nickname = _("ABSOL"),
+ .friendship = 0,
+ },
+ [2] =
+ {
+ .species = SPECIES_ALTARIA,
+ .heldItem = ITEM_KINGS_ROCK,
+ .moves = {MOVE_PERISH_SONG, MOVE_PROTECT, MOVE_DRAGON_CLAW, MOVE_FIRE_BLAST},
+ .level = 0,
+ .ppBonuses = 0,
+ .hpEV = 252,
+ .spAttackEV = 6,
+ .spDefenseEV = 252,
+ .otId = TRAINER_HILL_OTID,
+ .hpIV = 31,
+ .attackIV = 31,
+ .defenseIV = 31,
+ .speedIV = 31,
+ .spAttackIV = 31,
+ .spDefenseIV = 31,
+ .abilityNum = 0,
+ .personality = 0x0,
+ .nickname = _("ALTARIA"),
+ .friendship = 0,
+ },
+ [3] =
+ {
+ .species = SPECIES_DEWGONG,
+ .heldItem = ITEM_CHESTO_BERRY,
+ .moves = {MOVE_ICE_BEAM, MOVE_SIGNAL_BEAM, MOVE_REST, MOVE_PERISH_SONG},
+ .level = 0,
+ .ppBonuses = 0,
+ .hpEV = 252,
+ .speedEV = 252,
+ .spAttackEV = 6,
+ .otId = TRAINER_HILL_OTID,
+ .hpIV = 31,
+ .attackIV = 31,
+ .defenseIV = 31,
+ .speedIV = 31,
+ .spAttackIV = 31,
+ .spDefenseIV = 31,
+ .abilityNum = 0,
+ .personality = 0x14,
+ .nickname = _("DEWGONG"),
+ .friendship = 0,
+ },
+ [4] =
+ {
+ .species = SPECIES_POLITOED,
+ .heldItem = ITEM_BRIGHT_POWDER,
+ .moves = {MOVE_HYDRO_PUMP, MOVE_BLIZZARD, MOVE_MIND_READER, MOVE_PERISH_SONG},
+ .level = 0,
+ .ppBonuses = 0,
+ .hpEV = 252,
+ .spAttackEV = 6,
+ .spDefenseEV = 252,
+ .otId = TRAINER_HILL_OTID,
+ .hpIV = 31,
+ .attackIV = 31,
+ .defenseIV = 31,
+ .speedIV = 31,
+ .spAttackIV = 31,
+ .spDefenseIV = 31,
+ .abilityNum = 1,
+ .personality = 0x14,
+ .nickname = _("POLITOED"),
+ .friendship = 0,
+ },
+ [5] =
+ {
+ .species = SPECIES_MAROWAK,
+ .heldItem = ITEM_QUICK_CLAW,
+ .moves = {MOVE_PERISH_SONG, MOVE_EARTHQUAKE, MOVE_COUNTER, MOVE_PROTECT},
+ .level = 0,
+ .ppBonuses = 0,
+ .hpEV = 252,
+ .speedEV = 6,
+ .spDefenseEV = 252,
+ .otId = TRAINER_HILL_OTID,
+ .hpIV = 31,
+ .attackIV = 31,
+ .defenseIV = 31,
+ .speedIV = 31,
+ .spAttackIV = 31,
+ .spDefenseIV = 31,
+ .abilityNum = 1,
+ .personality = 0x17,
+ .nickname = _("MAROWAK"),
+ .friendship = 0,
+ },
+ },
},
- },
},
- [1] =
- {
- .name = _("CARLOTTA"),
- .facilityClass = FACILITY_CLASS_EXPERT_F,
- .unused = 0,
- .speechBefore = {EC_WORD_OH_DEAR, EC_WORD_I, EC_WORD_WILL, EC_WORD_WIN, EC_WORD_FOR, EC_WORD_YOU},
- .speechWin = {EC_WORD_OH_DEAR, EC_WORD_WE, EC_WORD_HAVE, EC_WORD_A, EC_WORD_PARTY, EC_WORD_LATER},
- .speechLose = {EC_WORD_OH_DEAR, EC_WORD_I_AM, EC_WORD_SORRY, EC_WORD_TO, EC_WORD_DISAPPOINT, EC_WORD_YOU},
- .speechAfter = {EC_WORD_IS, EC_WORD_YOUR, EC_WORD_GRANDFATHER, EC_WORD_COOL, EC_WORD_QUES, 0xFFFF},
- .mons =
- {
- [0] =
- {
- .species = SPECIES_LAPRAS,
- .heldItem = ITEM_QUICK_CLAW,
- .moves = {MOVE_SURF, MOVE_ICE_BEAM, MOVE_PERISH_SONG, MOVE_SING},
- .level = 0,
- .ppBonuses = 0,
- .hpEV = 250,
- .defenseEV = 130,
- .spDefenseEV = 130,
- .otId = TRAINER_HILL_OTID,
- .hpIV = 31,
- .attackIV = 31,
- .defenseIV = 31,
- .speedIV = 31,
- .spAttackIV = 31,
- .spDefenseIV = 31,
- .abilityNum = 0,
- .personality = 0x82,
- .nickname = _("LAPRAS"),
- .friendship = 0,
- },
- [1] =
- {
- .species = SPECIES_ABSOL,
- .heldItem = ITEM_FOCUS_BAND,
- .moves = {MOVE_PERISH_SONG, MOVE_DOUBLE_EDGE, MOVE_PROTECT, MOVE_TORMENT},
- .level = 0,
- .ppBonuses = 0,
- .hpEV = 252,
- .defenseEV = 6,
- .speedEV = 252,
- .otId = TRAINER_HILL_OTID,
- .hpIV = 31,
- .attackIV = 31,
- .defenseIV = 31,
- .speedIV = 31,
- .spAttackIV = 31,
- .spDefenseIV = 31,
- .abilityNum = 0,
- .personality = 0x8A,
- .nickname = _("ABSOL"),
- .friendship = 0,
- },
- [2] =
- {
- .species = SPECIES_ALTARIA,
- .heldItem = ITEM_KINGS_ROCK,
- .moves = {MOVE_PERISH_SONG, MOVE_PROTECT, MOVE_DRAGON_CLAW, MOVE_FIRE_BLAST},
- .level = 0,
- .ppBonuses = 0,
- .hpEV = 252,
- .spAttackEV = 6,
- .spDefenseEV = 252,
- .otId = TRAINER_HILL_OTID,
- .hpIV = 31,
- .attackIV = 31,
- .defenseIV = 31,
- .speedIV = 31,
- .spAttackIV = 31,
- .spDefenseIV = 31,
- .abilityNum = 0,
- .personality = 0x0,
- .nickname = _("ALTARIA"),
- .friendship = 0,
- },
- [3] =
- {
- .species = SPECIES_DEWGONG,
- .heldItem = ITEM_CHESTO_BERRY,
- .moves = {MOVE_ICE_BEAM, MOVE_SIGNAL_BEAM, MOVE_REST, MOVE_PERISH_SONG},
- .level = 0,
- .ppBonuses = 0,
- .hpEV = 252,
- .speedEV = 252,
- .spAttackEV = 6,
- .otId = TRAINER_HILL_OTID,
- .hpIV = 31,
- .attackIV = 31,
- .defenseIV = 31,
- .speedIV = 31,
- .spAttackIV = 31,
- .spDefenseIV = 31,
- .abilityNum = 0,
- .personality = 0x14,
- .nickname = _("DEWGONG"),
- .friendship = 0,
- },
- [4] =
- {
- .species = SPECIES_POLITOED,
- .heldItem = ITEM_BRIGHT_POWDER,
- .moves = {MOVE_HYDRO_PUMP, MOVE_BLIZZARD, MOVE_MIND_READER, MOVE_PERISH_SONG},
- .level = 0,
- .ppBonuses = 0,
- .hpEV = 252,
- .spAttackEV = 6,
- .spDefenseEV = 252,
- .otId = TRAINER_HILL_OTID,
- .hpIV = 31,
- .attackIV = 31,
- .defenseIV = 31,
- .speedIV = 31,
- .spAttackIV = 31,
- .spDefenseIV = 31,
- .abilityNum = 1,
- .personality = 0x14,
- .nickname = _("POLITOED"),
- .friendship = 0,
- },
- [5] =
- {
- .species = SPECIES_MAROWAK,
- .heldItem = ITEM_QUICK_CLAW,
- .moves = {MOVE_PERISH_SONG, MOVE_EARTHQUAKE, MOVE_COUNTER, MOVE_PROTECT},
- .level = 0,
- .ppBonuses = 0,
- .hpEV = 252,
- .speedEV = 6,
- .spDefenseEV = 252,
- .otId = TRAINER_HILL_OTID,
- .hpIV = 31,
- .attackIV = 31,
- .defenseIV = 31,
- .speedIV = 31,
- .spAttackIV = 31,
- .spDefenseIV = 31,
- .abilityNum = 1,
- .personality = 0x17,
- .nickname = _("MAROWAK"),
- .friendship = 0,
- },
- },
- },
- },
- .data = {0xD1, 0xDB, 0xDB, 0xDB, 0xD9, 0xD9, 0x1B, 0x14, 0x15, 0x98, 0x99, 0x9A, 0x9B, 0x9B, 0x9B, 0x8, 0xD1, 0xDB, 0xDB, 0xDB, 0xD5, 0xD5, 0xC3, 0xF9, 0x86, 0x8E, 0x95, 0x9B, 0x9B, 0x9B, 0x9B, 0x8, 0xD1, 0xDB, 0xDB, 0xD5, 0xCB, 0xCB, 0xCB, 0xFB, 0x8B, 0x8B, 0x8B, 0x95, 0x9B, 0x9B, 0x9B, 0x8, 0xD1, 0xDB, 0xD5, 0xCB, 0xCB, 0xCB, 0xCB, 0xFB, 0x8B, 0x8B, 0x8B, 0x8B, 0x95, 0x9B, 0x9B, 0x8, 0xD1, 0xDB, 0xCB, 0xCB, 0xCB, 0xCB, 0xCB, 0xFB, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x9B, 0x9B, 0x8, 0xD1, 0xD5, 0xCB, 0xCB, 0xCB, 0xCB, 0xCB, 0xFB, 0x8C, 0x8B, 0x8B, 0x8B, 0x8B, 0x95, 0x9B, 0x8, 0xD1, 0xCB, 0xCB, 0xCB, 0xCB, 0xCC, 0xCC, 0xFB, 0xFB, 0x8C, 0x8B, 0x8B, 0x8B, 0x8B, 0x9B, 0x8, 0xD1, 0xCC, 0xCC, 0xCC, 0xCC, 0xFB, 0xF5, 0xFB, 0xF5, 0xFB, 0x8B, 0x8B, 0x8B, 0x8B, 0x9B, 0x8, 0xD1, 0xD5, 0xD5, 0xD5, 0xD5, 0xFB, 0xEC, 0xFB, 0xEC, 0xFB, 0x8B, 0x8B, 0x8B, 0x8B, 0x9B, 0x8, 0xD1, 0xCB, 0xCB, 0xCB, 0xCB, 0xF5, 0xF5, 0xFB, 0xFB, 0xF5, 0x8B, 0x8B, 0x8B, 0x8B, 0x9B, 0x8, 0xD1, 0xCC, 0xCB, 0xCB, 0xCB, 0xCB, 0xCB, 0xFB, 0xFB, 0x8B, 0x8B, 0x8B, 0x8B, 0x8C, 0x9B, 0x8, 0xD1, 0xDB, 0xCB, 0xCB, 0xCB, 0xCB, 0xCB, 0xFB, 0xF5, 0x8B, 0x8B, 0x8B, 0x8B, 0x9B, 0x9B, 0x8, 0xD1, 0xDB, 0xCC, 0xCB, 0xCB, 0xCB, 0xCB, 0xFB, 0x8B, 0x8B, 0x8B, 0x8B, 0x8C, 0x9B, 0x9B, 0x8, 0xD1, 0xDB, 0xDB, 0xCC, 0xCB, 0xCB, 0xCB, 0xFB, 0x8B, 0x8B, 0x8B, 0x8C, 0x9B, 0x9B, 0x9B, 0x8, 0xD1, 0xDB, 0xDB, 0xDB, 0xCC, 0xCC, 0xCB, 0xFB, 0x8C, 0x8C, 0x8C, 0x9B, 0x9B, 0x9B, 0x9B, 0x8, 0xD1, 0xDB, 0xDB, 0xDB, 0xDB, 0xDB, 0xCC, 0xFB, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x8},
- .unk3A0 = {0x381, 0x201, 0xEE1, 0x1EF1, 0x3EF9, 0x3EF9, 0x7E7D, 0x783D, 0x2BD, 0x783D, 0x7E7D, 0x3E79, 0x3EF9, 0x1EF1, 0xEE1, 0x201},
- .coords = {103, 167},
- .direction = 0x1,
- .range = 0x33,
+ .display = {
+ .data = {0xD1, 0xDB, 0xDB, 0xDB, 0xD9, 0xD9, 0x1B, 0x14, 0x15, 0x98, 0x99, 0x9A, 0x9B, 0x9B, 0x9B, 0x8, 0xD1, 0xDB, 0xDB, 0xDB, 0xD5, 0xD5, 0xC3, 0xF9, 0x86, 0x8E, 0x95, 0x9B, 0x9B, 0x9B, 0x9B, 0x8, 0xD1, 0xDB, 0xDB, 0xD5, 0xCB, 0xCB, 0xCB, 0xFB, 0x8B, 0x8B, 0x8B, 0x95, 0x9B, 0x9B, 0x9B, 0x8, 0xD1, 0xDB, 0xD5, 0xCB, 0xCB, 0xCB, 0xCB, 0xFB, 0x8B, 0x8B, 0x8B, 0x8B, 0x95, 0x9B, 0x9B, 0x8, 0xD1, 0xDB, 0xCB, 0xCB, 0xCB, 0xCB, 0xCB, 0xFB, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x9B, 0x9B, 0x8, 0xD1, 0xD5, 0xCB, 0xCB, 0xCB, 0xCB, 0xCB, 0xFB, 0x8C, 0x8B, 0x8B, 0x8B, 0x8B, 0x95, 0x9B, 0x8, 0xD1, 0xCB, 0xCB, 0xCB, 0xCB, 0xCC, 0xCC, 0xFB, 0xFB, 0x8C, 0x8B, 0x8B, 0x8B, 0x8B, 0x9B, 0x8, 0xD1, 0xCC, 0xCC, 0xCC, 0xCC, 0xFB, 0xF5, 0xFB, 0xF5, 0xFB, 0x8B, 0x8B, 0x8B, 0x8B, 0x9B, 0x8, 0xD1, 0xD5, 0xD5, 0xD5, 0xD5, 0xFB, 0xEC, 0xFB, 0xEC, 0xFB, 0x8B, 0x8B, 0x8B, 0x8B, 0x9B, 0x8, 0xD1, 0xCB, 0xCB, 0xCB, 0xCB, 0xF5, 0xF5, 0xFB, 0xFB, 0xF5, 0x8B, 0x8B, 0x8B, 0x8B, 0x9B, 0x8, 0xD1, 0xCC, 0xCB, 0xCB, 0xCB, 0xCB, 0xCB, 0xFB, 0xFB, 0x8B, 0x8B, 0x8B, 0x8B, 0x8C, 0x9B, 0x8, 0xD1, 0xDB, 0xCB, 0xCB, 0xCB, 0xCB, 0xCB, 0xFB, 0xF5, 0x8B, 0x8B, 0x8B, 0x8B, 0x9B, 0x9B, 0x8, 0xD1, 0xDB, 0xCC, 0xCB, 0xCB, 0xCB, 0xCB, 0xFB, 0x8B, 0x8B, 0x8B, 0x8B, 0x8C, 0x9B, 0x9B, 0x8, 0xD1, 0xDB, 0xDB, 0xCC, 0xCB, 0xCB, 0xCB, 0xFB, 0x8B, 0x8B, 0x8B, 0x8C, 0x9B, 0x9B, 0x9B, 0x8, 0xD1, 0xDB, 0xDB, 0xDB, 0xCC, 0xCC, 0xCB, 0xFB, 0x8C, 0x8C, 0x8C, 0x9B, 0x9B, 0x9B, 0x9B, 0x8, 0xD1, 0xDB, 0xDB, 0xDB, 0xDB, 0xDB, 0xCC, 0xFB, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x8},
+ .unk3A0 = {0x381, 0x201, 0xEE1, 0x1EF1, 0x3EF9, 0x3EF9, 0x7E7D, 0x783D, 0x2BD, 0x783D, 0x7E7D, 0x3E79, 0x3EF9, 0x1EF1, 0xEE1, 0x201},
+ .coords = {103, 167},
+ .direction = 0x1,
+ .range = 0x33,
+ }
},
- [3] =
+ [3] =
{
.unk0 = 0x3F,
.unk1 = 0x40,
.trainers =
- {
- [0] =
{
- .name = _("NORA"),
- .facilityClass = FACILITY_CLASS_PKMN_RANGER_F,
- .unused = 0,
- .speechBefore = {EC_WORD_WAAAH, EC_WORD_THIS, EC_WORD_IS, EC_WORD_SO, EC_WORD_EXCITING, EC_WORD_EXCL},
- .speechWin = {EC_WORD_WAAAH, EC_WORD_I_AM, EC_WORD_SO, EC_WORD_HAPPY, EC_WORD_I, EC_WORD_WON},
- .speechLose = {EC_WORD_WAAAH, EC_WORD_I_AM, EC_WORD_SO, EC_WORD_SAD, EC_WORD_I, EC_WORD_LOST},
- .speechAfter = {EC_WORD_WAAAH, EC_WORD_EXCL, 0xFFFF, EC_WORD_GO, EC_WORD_AWAY, EC_WORD_EXCL},
- .mons =
- {
- [0] =
- {
- .species = SPECIES_FORRETRESS,
- .heldItem = ITEM_QUICK_CLAW,
- .moves = {MOVE_EXPLOSION, MOVE_EARTHQUAKE, MOVE_ATTRACT, MOVE_SPIKES},
- .level = 0,
- .ppBonuses = 0,
- .hpEV = 110,
- .attackEV = 200,
- .spDefenseEV = 200,
- .otId = TRAINER_HILL_OTID,
- .hpIV = 31,
- .attackIV = 31,
- .defenseIV = 31,
- .speedIV = 31,
- .spAttackIV = 31,
- .spDefenseIV = 31,
- .abilityNum = 0,
- .personality = 0x3,
- .nickname = _("FORRETRESS"),
- .friendship = 255,
- },
- [1] =
- {
- .species = SPECIES_ELECTRODE,
- .heldItem = ITEM_SALAC_BERRY,
- .moves = {MOVE_EXPLOSION, MOVE_THUNDERBOLT, MOVE_SWIFT, MOVE_LIGHT_SCREEN},
- .level = 0,
- .ppBonuses = 0,
- .attackEV = 255,
- .spAttackEV = 255,
- .otId = TRAINER_HILL_OTID,
- .hpIV = 31,
- .attackIV = 31,
- .defenseIV = 31,
- .speedIV = 31,
- .spAttackIV = 31,
- .spDefenseIV = 31,
- .abilityNum = 1,
- .personality = 0xC,
- .nickname = _("ELECTRODE"),
- .friendship = 255,
+ [0] =
+ {
+ .name = _("NORA"),
+ .facilityClass = FACILITY_CLASS_PKMN_RANGER_F,
+ .unused = 0,
+ .speechBefore = {EC_WORD_WAAAH, EC_WORD_THIS, EC_WORD_IS, EC_WORD_SO, EC_WORD_EXCITING, EC_WORD_EXCL},
+ .speechWin = {EC_WORD_WAAAH, EC_WORD_I_AM, EC_WORD_SO, EC_WORD_HAPPY, EC_WORD_I, EC_WORD_WON},
+ .speechLose = {EC_WORD_WAAAH, EC_WORD_I_AM, EC_WORD_SO, EC_WORD_SAD, EC_WORD_I, EC_WORD_LOST},
+ .speechAfter = {EC_WORD_WAAAH, EC_WORD_EXCL, 0xFFFF, EC_WORD_GO, EC_WORD_AWAY, EC_WORD_EXCL},
+ .mons =
+ {
+ [0] =
+ {
+ .species = SPECIES_FORRETRESS,
+ .heldItem = ITEM_QUICK_CLAW,
+ .moves = {MOVE_EXPLOSION, MOVE_EARTHQUAKE, MOVE_ATTRACT, MOVE_SPIKES},
+ .level = 0,
+ .ppBonuses = 0,
+ .hpEV = 110,
+ .attackEV = 200,
+ .spDefenseEV = 200,
+ .otId = TRAINER_HILL_OTID,
+ .hpIV = 31,
+ .attackIV = 31,
+ .defenseIV = 31,
+ .speedIV = 31,
+ .spAttackIV = 31,
+ .spDefenseIV = 31,
+ .abilityNum = 0,
+ .personality = 0x3,
+ .nickname = _("FORRETRESS"),
+ .friendship = 255,
+ },
+ [1] =
+ {
+ .species = SPECIES_ELECTRODE,
+ .heldItem = ITEM_SALAC_BERRY,
+ .moves = {MOVE_EXPLOSION, MOVE_THUNDERBOLT, MOVE_SWIFT, MOVE_LIGHT_SCREEN},
+ .level = 0,
+ .ppBonuses = 0,
+ .attackEV = 255,
+ .spAttackEV = 255,
+ .otId = TRAINER_HILL_OTID,
+ .hpIV = 31,
+ .attackIV = 31,
+ .defenseIV = 31,
+ .speedIV = 31,
+ .spAttackIV = 31,
+ .spDefenseIV = 31,
+ .abilityNum = 1,
+ .personality = 0xC,
+ .nickname = _("ELECTRODE"),
+ .friendship = 255,
+ },
+ [2] =
+ {
+ .species = SPECIES_EXEGGUTOR,
+ .heldItem = ITEM_SHELL_BELL,
+ .moves = {MOVE_EXPLOSION, MOVE_HYPNOSIS, MOVE_PSYCHIC, MOVE_SOLAR_BEAM},
+ .level = 0,
+ .ppBonuses = 0,
+ .attackEV = 255,
+ .spAttackEV = 255,
+ .otId = TRAINER_HILL_OTID,
+ .hpIV = 31,
+ .attackIV = 31,
+ .defenseIV = 31,
+ .speedIV = 31,
+ .spAttackIV = 31,
+ .spDefenseIV = 31,
+ .abilityNum = 0,
+ .personality = 0x7F,
+ .nickname = _("EXEGGUTOR"),
+ .friendship = 255,
+ },
+ [3] =
+ {
+ .species = SPECIES_DUSCLOPS,
+ .heldItem = ITEM_LEFTOVERS,
+ .moves = {MOVE_IMPRISON, MOVE_PROTECT, MOVE_ICE_BEAM, MOVE_EARTHQUAKE},
+ .level = 0,
+ .ppBonuses = 0,
+ .hpEV = 110,
+ .defenseEV = 200,
+ .spDefenseEV = 200,
+ .otId = TRAINER_HILL_OTID,
+ .hpIV = 31,
+ .attackIV = 31,
+ .defenseIV = 31,
+ .speedIV = 31,
+ .spAttackIV = 31,
+ .spDefenseIV = 31,
+ .abilityNum = 0,
+ .personality = 0x93,
+ .nickname = _("DUSCLOPS"),
+ .friendship = 255,
+ },
+ [4] =
+ {
+ .species = SPECIES_NINETALES,
+ .heldItem = ITEM_WHITE_HERB,
+ .moves = {MOVE_IMPRISON, MOVE_PROTECT, MOVE_OVERHEAT, MOVE_CONFUSE_RAY},
+ .level = 0,
+ .ppBonuses = 0,
+ .speedEV = 255,
+ .spAttackEV = 255,
+ .otId = TRAINER_HILL_OTID,
+ .hpIV = 31,
+ .attackIV = 31,
+ .defenseIV = 31,
+ .speedIV = 31,
+ .spAttackIV = 31,
+ .spDefenseIV = 31,
+ .abilityNum = 0,
+ .personality = 0xF,
+ .nickname = _("NINETALES"),
+ .friendship = 255,
+ },
+ [5] =
+ {
+ .species = SPECIES_BANETTE,
+ .heldItem = ITEM_BRIGHT_POWDER,
+ .moves = {MOVE_IMPRISON, MOVE_PROTECT, MOVE_THUNDERBOLT, MOVE_THUNDER},
+ .level = 0,
+ .ppBonuses = 0,
+ .hpEV = 255,
+ .spAttackEV = 255,
+ .otId = TRAINER_HILL_OTID,
+ .hpIV = 31,
+ .attackIV = 31,
+ .defenseIV = 31,
+ .speedIV = 31,
+ .spAttackIV = 31,
+ .spDefenseIV = 31,
+ .abilityNum = 0,
+ .personality = 0x96,
+ .nickname = _("BANETTE"),
+ .friendship = 255,
+ },
+ },
+ },
+ [1] =
+ {
+ .name = _("GAV"),
+ .facilityClass = FACILITY_CLASS_PKMN_RANGER_M,
+ .unused = 0,
+ .speechBefore = {EC_WORD_WAHAHAHA, EC_WORD_YOU, EC_WORD_CAN_T, EC_WORD_STOP, EC_WORD_ME, EC_WORD_EXCL},
+ .speechWin = {EC_WORD_WOWEE, EC_WORD_EXCL, 0xFFFF, EC_WORD_I_AM, EC_WORD_AWESOME, EC_WORD_COOL},
+ .speechLose = {EC_WORD_I_AM, EC_WORD_NOT, EC_WORD_COOL, EC_WORD_AT, EC_WORD_ALL, EC_WORD_EXCL},
+ .speechAfter = {EC_WORD_HEHEHE, EC_WORD_THAT_WAS, EC_WORD_AN, EC_WORD_AWESOME, EC_WORD_BATTLE, EC_WORD_EXCL},
+ .mons =
+ {
+ [0] =
+ {
+ .species = SPECIES_SALAMENCE,
+ .heldItem = ITEM_SHELL_BELL,
+ .moves = {MOVE_ROCK_SLIDE, MOVE_FLAMETHROWER, MOVE_DRAGON_CLAW, MOVE_AERIAL_ACE},
+ .level = 0,
+ .ppBonuses = 0,
+ .attackEV = 255,
+ .spAttackEV = 255,
+ .otId = TRAINER_HILL_OTID,
+ .hpIV = 31,
+ .attackIV = 31,
+ .defenseIV = 31,
+ .speedIV = 31,
+ .spAttackIV = 31,
+ .spDefenseIV = 31,
+ .abilityNum = 0,
+ .personality = 0x95,
+ .nickname = _("SALAMENCE"),
+ .friendship = 255,
+ },
+ [1] =
+ {
+ .species = SPECIES_GENGAR,
+ .heldItem = ITEM_LUM_BERRY,
+ .moves = {MOVE_PSYCHIC, MOVE_GIGA_DRAIN, MOVE_WILL_O_WISP, MOVE_DESTINY_BOND},
+ .level = 0,
+ .ppBonuses = 0,
+ .speedEV = 255,
+ .spAttackEV = 255,
+ .otId = TRAINER_HILL_OTID,
+ .hpIV = 31,
+ .attackIV = 31,
+ .defenseIV = 31,
+ .speedIV = 31,
+ .spAttackIV = 31,
+ .spDefenseIV = 31,
+ .abilityNum = 0,
+ .personality = 0x8C,
+ .nickname = _("GENGAR"),
+ .friendship = 255,
+ },
+ [2] =
+ {
+ .species = SPECIES_GYARADOS,
+ .heldItem = ITEM_BRIGHT_POWDER,
+ .moves = {MOVE_DRAGON_DANCE, MOVE_HYPER_BEAM, MOVE_BITE, MOVE_EARTHQUAKE},
+ .level = 0,
+ .ppBonuses = 0,
+ .attackEV = 255,
+ .speedEV = 255,
+ .otId = TRAINER_HILL_OTID,
+ .hpIV = 31,
+ .attackIV = 31,
+ .defenseIV = 31,
+ .speedIV = 31,
+ .spAttackIV = 31,
+ .spDefenseIV = 31,
+ .abilityNum = 0,
+ .personality = 0x3,
+ .nickname = _("GYARADOS"),
+ .friendship = 255,
+ },
+ [3] =
+ {
+ .species = SPECIES_GENGAR,
+ .heldItem = ITEM_SALAC_BERRY,
+ .moves = {MOVE_EXPLOSION, MOVE_MEAN_LOOK, MOVE_SHADOW_BALL, MOVE_CONFUSE_RAY},
+ .level = 0,
+ .ppBonuses = 0,
+ .attackEV = 255,
+ .speedEV = 255,
+ .otId = TRAINER_HILL_OTID,
+ .hpIV = 31,
+ .attackIV = 31,
+ .defenseIV = 31,
+ .speedIV = 31,
+ .spAttackIV = 31,
+ .spDefenseIV = 31,
+ .abilityNum = 0,
+ .personality = 0x3,
+ .nickname = _("GENGAR"),
+ .friendship = 255,
+ },
+ [4] =
+ {
+ .species = SPECIES_DUSCLOPS,
+ .heldItem = ITEM_LEFTOVERS,
+ .moves = {MOVE_MEAN_LOOK, MOVE_CONFUSE_RAY, MOVE_WILL_O_WISP, MOVE_SHADOW_BALL},
+ .level = 0,
+ .ppBonuses = 0,
+ .hpEV = 110,
+ .defenseEV = 200,
+ .spDefenseEV = 200,
+ .otId = TRAINER_HILL_OTID,
+ .hpIV = 31,
+ .attackIV = 31,
+ .defenseIV = 31,
+ .speedIV = 31,
+ .spAttackIV = 31,
+ .spDefenseIV = 31,
+ .abilityNum = 0,
+ .personality = 0x14,
+ .nickname = _("DUSCLOPS"),
+ .friendship = 255,
+ },
+ [5] =
+ {
+ .species = SPECIES_MISDREAVUS,
+ .heldItem = ITEM_FOCUS_BAND,
+ .moves = {MOVE_MEAN_LOOK, MOVE_CONFUSE_RAY, MOVE_PERISH_SONG, MOVE_SHADOW_BALL},
+ .level = 0,
+ .ppBonuses = 0,
+ .hpEV = 180,
+ .defenseEV = 180,
+ .spDefenseEV = 150,
+ .otId = TRAINER_HILL_OTID,
+ .hpIV = 31,
+ .attackIV = 31,
+ .defenseIV = 31,
+ .speedIV = 31,
+ .spAttackIV = 31,
+ .spDefenseIV = 31,
+ .abilityNum = 0,
+ .personality = 0x85,
+ .nickname = _("MISDREAVUS"),
+ .friendship = 255,
+ },
+ },
},
- [2] =
- {
- .species = SPECIES_EXEGGUTOR,
- .heldItem = ITEM_SHELL_BELL,
- .moves = {MOVE_EXPLOSION, MOVE_HYPNOSIS, MOVE_PSYCHIC, MOVE_SOLAR_BEAM},
- .level = 0,
- .ppBonuses = 0,
- .attackEV = 255,
- .spAttackEV = 255,
- .otId = TRAINER_HILL_OTID,
- .hpIV = 31,
- .attackIV = 31,
- .defenseIV = 31,
- .speedIV = 31,
- .spAttackIV = 31,
- .spDefenseIV = 31,
- .abilityNum = 0,
- .personality = 0x7F,
- .nickname = _("EXEGGUTOR"),
- .friendship = 255,
- },
- [3] =
- {
- .species = SPECIES_DUSCLOPS,
- .heldItem = ITEM_LEFTOVERS,
- .moves = {MOVE_IMPRISON, MOVE_PROTECT, MOVE_ICE_BEAM, MOVE_EARTHQUAKE},
- .level = 0,
- .ppBonuses = 0,
- .hpEV = 110,
- .defenseEV = 200,
- .spDefenseEV = 200,
- .otId = TRAINER_HILL_OTID,
- .hpIV = 31,
- .attackIV = 31,
- .defenseIV = 31,
- .speedIV = 31,
- .spAttackIV = 31,
- .spDefenseIV = 31,
- .abilityNum = 0,
- .personality = 0x93,
- .nickname = _("DUSCLOPS"),
- .friendship = 255,
- },
- [4] =
- {
- .species = SPECIES_NINETALES,
- .heldItem = ITEM_WHITE_HERB,
- .moves = {MOVE_IMPRISON, MOVE_PROTECT, MOVE_OVERHEAT, MOVE_CONFUSE_RAY},
- .level = 0,
- .ppBonuses = 0,
- .speedEV = 255,
- .spAttackEV = 255,
- .otId = TRAINER_HILL_OTID,
- .hpIV = 31,
- .attackIV = 31,
- .defenseIV = 31,
- .speedIV = 31,
- .spAttackIV = 31,
- .spDefenseIV = 31,
- .abilityNum = 0,
- .personality = 0xF,
- .nickname = _("NINETALES"),
- .friendship = 255,
- },
- [5] =
- {
- .species = SPECIES_BANETTE,
- .heldItem = ITEM_BRIGHT_POWDER,
- .moves = {MOVE_IMPRISON, MOVE_PROTECT, MOVE_THUNDERBOLT, MOVE_THUNDER},
- .level = 0,
- .ppBonuses = 0,
- .hpEV = 255,
- .spAttackEV = 255,
- .otId = TRAINER_HILL_OTID,
- .hpIV = 31,
- .attackIV = 31,
- .defenseIV = 31,
- .speedIV = 31,
- .spAttackIV = 31,
- .spDefenseIV = 31,
- .abilityNum = 0,
- .personality = 0x96,
- .nickname = _("BANETTE"),
- .friendship = 255,
- },
- },
},
- [1] =
- {
- .name = _("GAV"),
- .facilityClass = FACILITY_CLASS_PKMN_RANGER_M,
- .unused = 0,
- .speechBefore = {EC_WORD_WAHAHAHA, EC_WORD_YOU, EC_WORD_CAN_T, EC_WORD_STOP, EC_WORD_ME, EC_WORD_EXCL},
- .speechWin = {EC_WORD_WOWEE, EC_WORD_EXCL, 0xFFFF, EC_WORD_I_AM, EC_WORD_AWESOME, EC_WORD_COOL},
- .speechLose = {EC_WORD_I_AM, EC_WORD_NOT, EC_WORD_COOL, EC_WORD_AT, EC_WORD_ALL, EC_WORD_EXCL},
- .speechAfter = {EC_WORD_HEHEHE, EC_WORD_THAT_WAS, EC_WORD_AN, EC_WORD_AWESOME, EC_WORD_BATTLE, EC_WORD_EXCL},
- .mons =
- {
- [0] =
- {
- .species = SPECIES_SALAMENCE,
- .heldItem = ITEM_SHELL_BELL,
- .moves = {MOVE_ROCK_SLIDE, MOVE_FLAMETHROWER, MOVE_DRAGON_CLAW, MOVE_AERIAL_ACE},
- .level = 0,
- .ppBonuses = 0,
- .attackEV = 255,
- .spAttackEV = 255,
- .otId = TRAINER_HILL_OTID,
- .hpIV = 31,
- .attackIV = 31,
- .defenseIV = 31,
- .speedIV = 31,
- .spAttackIV = 31,
- .spDefenseIV = 31,
- .abilityNum = 0,
- .personality = 0x95,
- .nickname = _("SALAMENCE"),
- .friendship = 255,
- },
- [1] =
- {
- .species = SPECIES_GENGAR,
- .heldItem = ITEM_LUM_BERRY,
- .moves = {MOVE_PSYCHIC, MOVE_GIGA_DRAIN, MOVE_WILL_O_WISP, MOVE_DESTINY_BOND},
- .level = 0,
- .ppBonuses = 0,
- .speedEV = 255,
- .spAttackEV = 255,
- .otId = TRAINER_HILL_OTID,
- .hpIV = 31,
- .attackIV = 31,
- .defenseIV = 31,
- .speedIV = 31,
- .spAttackIV = 31,
- .spDefenseIV = 31,
- .abilityNum = 0,
- .personality = 0x8C,
- .nickname = _("GENGAR"),
- .friendship = 255,
- },
- [2] =
- {
- .species = SPECIES_GYARADOS,
- .heldItem = ITEM_BRIGHT_POWDER,
- .moves = {MOVE_DRAGON_DANCE, MOVE_HYPER_BEAM, MOVE_BITE, MOVE_EARTHQUAKE},
- .level = 0,
- .ppBonuses = 0,
- .attackEV = 255,
- .speedEV = 255,
- .otId = TRAINER_HILL_OTID,
- .hpIV = 31,
- .attackIV = 31,
- .defenseIV = 31,
- .speedIV = 31,
- .spAttackIV = 31,
- .spDefenseIV = 31,
- .abilityNum = 0,
- .personality = 0x3,
- .nickname = _("GYARADOS"),
- .friendship = 255,
- },
- [3] =
- {
- .species = SPECIES_GENGAR,
- .heldItem = ITEM_SALAC_BERRY,
- .moves = {MOVE_EXPLOSION, MOVE_MEAN_LOOK, MOVE_SHADOW_BALL, MOVE_CONFUSE_RAY},
- .level = 0,
- .ppBonuses = 0,
- .attackEV = 255,
- .speedEV = 255,
- .otId = TRAINER_HILL_OTID,
- .hpIV = 31,
- .attackIV = 31,
- .defenseIV = 31,
- .speedIV = 31,
- .spAttackIV = 31,
- .spDefenseIV = 31,
- .abilityNum = 0,
- .personality = 0x3,
- .nickname = _("GENGAR"),
- .friendship = 255,
- },
- [4] =
- {
- .species = SPECIES_DUSCLOPS,
- .heldItem = ITEM_LEFTOVERS,
- .moves = {MOVE_MEAN_LOOK, MOVE_CONFUSE_RAY, MOVE_WILL_O_WISP, MOVE_SHADOW_BALL},
- .level = 0,
- .ppBonuses = 0,
- .hpEV = 110,
- .defenseEV = 200,
- .spDefenseEV = 200,
- .otId = TRAINER_HILL_OTID,
- .hpIV = 31,
- .attackIV = 31,
- .defenseIV = 31,
- .speedIV = 31,
- .spAttackIV = 31,
- .spDefenseIV = 31,
- .abilityNum = 0,
- .personality = 0x14,
- .nickname = _("DUSCLOPS"),
- .friendship = 255,
- },
- [5] =
- {
- .species = SPECIES_MISDREAVUS,
- .heldItem = ITEM_FOCUS_BAND,
- .moves = {MOVE_MEAN_LOOK, MOVE_CONFUSE_RAY, MOVE_PERISH_SONG, MOVE_SHADOW_BALL},
- .level = 0,
- .ppBonuses = 0,
- .hpEV = 180,
- .defenseEV = 180,
- .spDefenseEV = 150,
- .otId = TRAINER_HILL_OTID,
- .hpIV = 31,
- .attackIV = 31,
- .defenseIV = 31,
- .speedIV = 31,
- .spAttackIV = 31,
- .spDefenseIV = 31,
- .abilityNum = 0,
- .personality = 0x85,
- .nickname = _("MISDREAVUS"),
- .friendship = 255,
- },
- },
- },
- },
- .data = {0x31, 0x3B, 0x3B, 0x3B, 0x39, 0x39, 0x13, 0x14, 0x15, 0x39, 0x39, 0x3A, 0x3B, 0x3B, 0x3B, 0x8, 0x96, 0xFB, 0xF6, 0xFD, 0xF6, 0xF6, 0xFB, 0x46, 0xFB, 0xF6, 0xF6, 0xFD, 0xF6, 0xFB, 0x9B, 0x8, 0xFB, 0x9B, 0xFB, 0xF6, 0xFB, 0xFB, 0xFB, 0x46, 0xFB, 0xFB, 0xFB, 0xF6, 0xFB, 0x9B, 0xFB, 0x8, 0xF6, 0xFB, 0x9B, 0xFB, 0xFB, 0x46, 0x46, 0x9B, 0x46, 0x46, 0xFB, 0xFB, 0x9B, 0xFB, 0xF6, 0x8, 0xFD, 0xF6, 0xFB, 0x9B, 0x46, 0x36, 0x36, 0x9B, 0x36, 0x36, 0x46, 0x9B, 0xFB, 0xF6, 0xFD, 0x8, 0xF6, 0xFB, 0xFB, 0x46, 0x9B, 0x46, 0x46, 0xDB, 0x46, 0x46, 0x9B, 0x46, 0xFB, 0xFB, 0xF6, 0x8, 0xF6, 0xFB, 0x46, 0x36, 0x46, 0x9B, 0xDB, 0xD6, 0xDB, 0x9B, 0x46, 0x36, 0x46, 0xFB, 0xF6, 0x8, 0xFB, 0xFB, 0x46, 0x36, 0x9B, 0xDB, 0xD6, 0xD6, 0xD6, 0xDB, 0x9B, 0x36, 0x46, 0xFB, 0xFB, 0x8, 0x96, 0x9B, 0x9B, 0x9B, 0x9B, 0xD6, 0xD6, 0x96, 0xD6, 0xD6, 0xDB, 0x9B, 0x9B, 0x9B, 0x96, 0x8, 0xFB, 0xFB, 0x46, 0x36, 0x9B, 0xDB, 0xD6, 0xD6, 0xD6, 0xDB, 0x9B, 0x36, 0x46, 0xFB, 0xFB, 0x8, 0xF6, 0xFB, 0x46, 0x36, 0x46, 0x9B, 0xDB, 0xD6, 0xDB, 0x9B, 0x46, 0x36, 0x46, 0xFB, 0xF6, 0x8, 0xF6, 0xFB, 0xFB, 0x46, 0x9B, 0x46, 0x46, 0xDB, 0x46, 0x46, 0x9B, 0x46, 0xFB, 0xFB, 0xF6, 0x8, 0xFD, 0xF6, 0xFB, 0x9B, 0x46, 0x36, 0x36, 0x9B, 0x36, 0x36, 0x46, 0x9B, 0xFB, 0xF6, 0xFD, 0x8, 0xF6, 0xFB, 0x9B, 0xFB, 0xFB, 0x46, 0x46, 0x9B, 0x46, 0x46, 0xFB, 0xFB, 0x9B, 0xFB, 0xF6, 0x8, 0xFB, 0x9B, 0xFB, 0xF6, 0xFB, 0xFB, 0xFB, 0x46, 0xFB, 0xFB, 0xFB, 0xF6, 0xFB, 0x9B, 0xFB, 0x8, 0x96, 0xFB, 0xF6, 0xFD, 0xF6, 0xF6, 0xFB, 0x46, 0xFB, 0xF6, 0xF6, 0xFD, 0xF6, 0xFB, 0x9B, 0x8},
- .unk3A0 = {0x381, 0x101, 0x101, 0x6C1, 0x821, 0x16D1, 0x2829, 0x2009, 0x1, 0x2009, 0x2829, 0x16D1, 0x821, 0x6C1, 0x101, 0x101},
- .coords = {103, 167},
- .direction = 0x1,
- .range = 0x33,
+ .display = {
+ .data = {0x31, 0x3B, 0x3B, 0x3B, 0x39, 0x39, 0x13, 0x14, 0x15, 0x39, 0x39, 0x3A, 0x3B, 0x3B, 0x3B, 0x8, 0x96, 0xFB, 0xF6, 0xFD, 0xF6, 0xF6, 0xFB, 0x46, 0xFB, 0xF6, 0xF6, 0xFD, 0xF6, 0xFB, 0x9B, 0x8, 0xFB, 0x9B, 0xFB, 0xF6, 0xFB, 0xFB, 0xFB, 0x46, 0xFB, 0xFB, 0xFB, 0xF6, 0xFB, 0x9B, 0xFB, 0x8, 0xF6, 0xFB, 0x9B, 0xFB, 0xFB, 0x46, 0x46, 0x9B, 0x46, 0x46, 0xFB, 0xFB, 0x9B, 0xFB, 0xF6, 0x8, 0xFD, 0xF6, 0xFB, 0x9B, 0x46, 0x36, 0x36, 0x9B, 0x36, 0x36, 0x46, 0x9B, 0xFB, 0xF6, 0xFD, 0x8, 0xF6, 0xFB, 0xFB, 0x46, 0x9B, 0x46, 0x46, 0xDB, 0x46, 0x46, 0x9B, 0x46, 0xFB, 0xFB, 0xF6, 0x8, 0xF6, 0xFB, 0x46, 0x36, 0x46, 0x9B, 0xDB, 0xD6, 0xDB, 0x9B, 0x46, 0x36, 0x46, 0xFB, 0xF6, 0x8, 0xFB, 0xFB, 0x46, 0x36, 0x9B, 0xDB, 0xD6, 0xD6, 0xD6, 0xDB, 0x9B, 0x36, 0x46, 0xFB, 0xFB, 0x8, 0x96, 0x9B, 0x9B, 0x9B, 0x9B, 0xD6, 0xD6, 0x96, 0xD6, 0xD6, 0xDB, 0x9B, 0x9B, 0x9B, 0x96, 0x8, 0xFB, 0xFB, 0x46, 0x36, 0x9B, 0xDB, 0xD6, 0xD6, 0xD6, 0xDB, 0x9B, 0x36, 0x46, 0xFB, 0xFB, 0x8, 0xF6, 0xFB, 0x46, 0x36, 0x46, 0x9B, 0xDB, 0xD6, 0xDB, 0x9B, 0x46, 0x36, 0x46, 0xFB, 0xF6, 0x8, 0xF6, 0xFB, 0xFB, 0x46, 0x9B, 0x46, 0x46, 0xDB, 0x46, 0x46, 0x9B, 0x46, 0xFB, 0xFB, 0xF6, 0x8, 0xFD, 0xF6, 0xFB, 0x9B, 0x46, 0x36, 0x36, 0x9B, 0x36, 0x36, 0x46, 0x9B, 0xFB, 0xF6, 0xFD, 0x8, 0xF6, 0xFB, 0x9B, 0xFB, 0xFB, 0x46, 0x46, 0x9B, 0x46, 0x46, 0xFB, 0xFB, 0x9B, 0xFB, 0xF6, 0x8, 0xFB, 0x9B, 0xFB, 0xF6, 0xFB, 0xFB, 0xFB, 0x46, 0xFB, 0xFB, 0xFB, 0xF6, 0xFB, 0x9B, 0xFB, 0x8, 0x96, 0xFB, 0xF6, 0xFD, 0xF6, 0xF6, 0xFB, 0x46, 0xFB, 0xF6, 0xF6, 0xFD, 0xF6, 0xFB, 0x9B, 0x8},
+ .unk3A0 = {0x381, 0x101, 0x101, 0x6C1, 0x821, 0x16D1, 0x2829, 0x2009, 0x1, 0x2009, 0x2829, 0x16D1, 0x821, 0x6C1, 0x101, 0x101},
+ .coords = {103, 167},
+ .direction = 0x1,
+ .range = 0x33,
+ }
},
- },
};
diff --git a/src/data/decoration/icon.h b/src/data/decoration/icon.h
index 58d9cea7b..b29dab20f 100644
--- a/src/data/decoration/icon.h
+++ b/src/data/decoration/icon.h
@@ -1,123 +1,124 @@
-const u32 *const gUnknown_085A6BE8[][2] = {
- {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark},
- {NULL, NULL},
- {NULL, NULL},
- {gUnknown_08DB7AA0, gUnknown_08DB7B34},
- {gUnknown_08DB7B5C, gUnknown_08DB7BEC},
- {gUnknown_08DB7C08, gUnknown_08DB7CE8},
- {gUnknown_08DB7D08, gUnknown_08DB7DCC},
- {gUnknown_08DB7DF4, gUnknown_08DB7EA0},
- {gUnknown_08DB7EC4, gUnknown_08DB7F60},
- {gUnknown_08DB7F7C, gUnknown_08DB8070},
- {NULL, NULL},
- {NULL, NULL},
- {NULL, NULL},
- {NULL, NULL},
- {NULL, NULL},
- {NULL, NULL},
- {NULL, NULL},
- {NULL, NULL},
- {NULL, NULL},
- {gUnknown_08DB808C, gUnknown_08DB8138},
- {gUnknown_08DB8160, gUnknown_08DB8218},
- {gUnknown_08DB823C, gUnknown_08DB8300},
- {gUnknown_08DB8328, gUnknown_08DB8430},
- {gUnknown_08DB8458, gUnknown_08DB8528},
- {gUnknown_08DB854C, gUnknown_08DB862C},
- {gUnknown_08DB8654, gUnknown_08DB86C4},
- {gUnknown_08DB86E0, gUnknown_08DB8750},
- {gUnknown_08DB876C, gUnknown_08DB87DC},
- {NULL, NULL},
- {NULL, NULL},
- {NULL, NULL},
- {gUnknown_08DB87F8, gUnknown_08DB88D8},
- {gUnknown_08DB8900, gUnknown_08DB89E0},
- {gUnknown_08DB8A08, gUnknown_08DB8A68},
- {gUnknown_08DB8A84, gUnknown_08DB8B40},
- {NULL, NULL},
- {NULL, NULL},
- {gUnknown_08DB8B68, gUnknown_08DB8C40},
- {gUnknown_08DB8C5C, gUnknown_08DB8CF4},
- {NULL, NULL},
- {gUnknown_08DB8D18, gUnknown_08DB8DB0},
- {gUnknown_08DB8DD4, gUnknown_08DB8E80},
- {NULL, NULL},
- {NULL, NULL},
- {gUnknown_08DB8EA0, gUnknown_08DB8F58},
- {NULL, NULL},
- {NULL, NULL},
- {NULL, NULL},
- {NULL, NULL},
- {NULL, NULL},
- {NULL, NULL},
- {NULL, NULL},
- {NULL, NULL},
- {NULL, NULL},
- {NULL, NULL},
- {NULL, NULL},
- {NULL, NULL},
- {NULL, NULL},
- {NULL, NULL},
- {gUnknown_08DB8F7C, gUnknown_08DB9038},
- {gUnknown_08DB9058, gUnknown_08DB9130},
- {gUnknown_08DB9154, gUnknown_08DB9218},
- {gUnknown_08DB9234, gUnknown_08DB92FC},
- {gUnknown_08DB931C, gUnknown_08DB93E8},
- {gUnknown_08DB940C, gUnknown_08DB94CC},
- {gUnknown_08DB94E8, gUnknown_08DB95AC},
- {NULL, NULL},
- {NULL, NULL},
- {NULL, NULL},
- {NULL, NULL},
- {NULL, NULL},
- {NULL, NULL},
- {NULL, NULL},
- {NULL, NULL},
- {NULL, NULL},
- {NULL, NULL},
- {NULL, NULL},
- {NULL, NULL},
- {NULL, NULL},
- {NULL, NULL},
- {NULL, NULL},
- {NULL, NULL},
- {NULL, NULL},
- {NULL, NULL},
- {NULL, NULL},
- {NULL, NULL},
- {NULL, NULL},
- {NULL, NULL},
- {NULL, NULL},
- {NULL, NULL},
- {NULL, NULL},
- {NULL, NULL},
- {NULL, NULL},
- {NULL, NULL},
- {NULL, NULL},
- {NULL, NULL},
- {NULL, NULL},
- {NULL, NULL},
- {NULL, NULL},
- {NULL, NULL},
- {NULL, NULL},
- {NULL, NULL},
- {NULL, NULL},
- {NULL, NULL},
- {NULL, NULL},
- {NULL, NULL},
- {NULL, NULL},
- {NULL, NULL},
- {NULL, NULL},
- {NULL, NULL},
- {NULL, NULL},
- {gUnknown_08DB95D0, gUnknown_08DB96C4},
- {gUnknown_08DB96EC, gUnknown_08DB97F4},
- {gUnknown_08DB981C, gUnknown_08DB9908},
- {gUnknown_08DB9930, gUnknown_08DB9A54},
- {gUnknown_08DB9A7C, gUnknown_08DB9B7C},
- {gUnknown_08DB9BA4, gUnknown_08DB9CB0},
- {gUnknown_08DB9CD8, gUnknown_08DB9DAC},
- {gUnknown_08DB9F08, gUnknown_08DB9FFC},
- {gUnknown_08DB9DD4, gUnknown_08DB9EE4},
- {gUnknown_08DBA020, gUnknown_08DBA12C}
+const u32 *const gDecorIconTable[][2] =
+{
+ [DECOR_NONE] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark},
+ [DECOR_SMALL_DESK] = {NULL, NULL},
+ [DECOR_POKEMON_DESK] = {NULL, NULL},
+ [DECOR_HEAVY_DESK] = {gDecorIcon_HeavyDesk, gDecorIconPalette_HeavyDesk},
+ [DECOR_RAGGED_DESK] = {gDecorIcon_RaggedDesk, gDecorIconPalette_RaggedDesk},
+ [DECOR_COMFORT_DESK] = {gDecorIcon_ComfortDesk, gDecorIconPalette_ComfortDesk},
+ [DECOR_PRETTY_DESK] = {gDecorIcon_PrettyDesk, gDecorIconPalette_PrettyDesk},
+ [DECOR_BRICK_DESK] = {gDecorIcon_BrickDesk, gDecorIconPalette_BrickDesk},
+ [DECOR_CAMP_DESK] = {gDecorIcon_CampDesk, gDecorIconPalette_CampDesk},
+ [DECOR_HARD_DESK] = {gDecorIcon_HardDesk, gDecorIconPalette_HardDesk},
+ [DECOR_SMALL_CHAIR] = {NULL, NULL},
+ [DECOR_POKEMON_CHAIR] = {NULL, NULL},
+ [DECOR_HEAVY_CHAIR] = {NULL, NULL},
+ [DECOR_PRETTY_CHAIR] = {NULL, NULL},
+ [DECOR_COMFORT_CHAIR] = {NULL, NULL},
+ [DECOR_RAGGED_CHAIR] = {NULL, NULL},
+ [DECOR_BRICK_CHAIR] = {NULL, NULL},
+ [DECOR_CAMP_CHAIR] = {NULL, NULL},
+ [DECOR_HARD_CHAIR] = {NULL, NULL},
+ [DECOR_RED_PLANT] = {gDecorIcon_RedPlant, gDecorIconPalette_RedPlant},
+ [DECOR_TROPICAL_PLANT] = {gDecorIcon_TropicalPlant, gDecorIconPalette_TropicalPlant},
+ [DECOR_PRETTY_FLOWERS] = {gDecorIcon_PrettyFlowers, gDecorIconPalette_PrettyFlowers},
+ [DECOR_COLORFUL_PLANT] = {gDecorIcon_ColorfulPlant, gDecorIconPalette_ColorfulPlant},
+ [DECOR_BIG_PLANT] = {gDecorIcon_BigPlant, gDecorIconPalette_BigPlant},
+ [DECOR_GORGEOUS_PLANT] = {gDecorIcon_GorgeousPlant, gDecorIconPalette_GorgeousPlant},
+ [DECOR_RED_BRICK] = {gDecorIcon_RedBrick, gDecorIconPalette_RedBrick},
+ [DECOR_YELLOW_BRICK] = {gDecorIcon_YellowBrick, gDecorIconPalette_YellowBrick},
+ [DECOR_BLUE_BRICK] = {gDecorIcon_BlueBrick, gDecorIconPalette_BlueBrick},
+ [DECOR_RED_BALLOON] = {NULL, NULL},
+ [DECOR_BLUE_BALLOON] = {NULL, NULL},
+ [DECOR_YELLOW_BALLOON] = {NULL, NULL},
+ [DECOR_RED_TENT] = {gDecorIcon_RedTent, gDecorIconPalette_RedTent},
+ [DECOR_BLUE_TENT] = {gDecorIcon_BlueTent, gDecorIconPalette_BlueTent},
+ [DECOR_SOLID_BOARD] = {gDecorIcon_SolidBoard, gDecorIconPalette_SolidBoard},
+ [DECOR_SLIDE] = {gDecorIcon_Slide, gDecorIconPalette_Slide},
+ [DECOR_FENCE_LENGTH] = {NULL, NULL},
+ [DECOR_FENCE_WIDTH] = {NULL, NULL},
+ [DECOR_TIRE] = {gDecorIcon_Tire, gDecorIconPalette_Tire},
+ [DECOR_STAND] = {gDecorIcon_Stand, gDecorIconPalette_Stand},
+ [DECOR_MUD_BALL] = {NULL, NULL},
+ [DECOR_BREAKABLE_DOOR] = {gDecorIcon_BreakableDoor, gDecorIconPalette_BreakableDoor},
+ [DECOR_SAND_ORNAMENT] = {gDecorIcon_SandOrnament, gDecorIconPalette_SandOrnament},
+ [DECOR_SILVER_SHIELD] = {NULL, NULL},
+ [DECOR_GOLD_SHIELD] = {NULL, NULL},
+ [DECOR_GLASS_ORNAMENT] = {gDecorIcon_GlassOrnament, gDecorIconPalette_GlassOrnament},
+ [DECOR_TV] = {NULL, NULL},
+ [DECOR_ROUND_TV] = {NULL, NULL},
+ [DECOR_CUTE_TV] = {NULL, NULL},
+ [DECOR_GLITTER_MAT] = {NULL, NULL},
+ [DECOR_JUMP_MAT] = {NULL, NULL},
+ [DECOR_SPIN_MAT] = {NULL, NULL},
+ [DECOR_C_LOW_NOTE_MAT] = {NULL, NULL},
+ [DECOR_D_NOTE_MAT] = {NULL, NULL},
+ [DECOR_E_NOTE_MAT] = {NULL, NULL},
+ [DECOR_F_NOTE_MAT] = {NULL, NULL},
+ [DECOR_G_NOTE_MAT] = {NULL, NULL},
+ [DECOR_A_NOTE_MAT] = {NULL, NULL},
+ [DECOR_B_NOTE_MAT] = {NULL, NULL},
+ [DECOR_C_HIGH_NOTE_MAT] = {NULL, NULL},
+ [DECOR_SURF_MAT] = {gDecorIcon_SurfMat, gDecorIconPalette_SurfMat},
+ [DECOR_THUNDER_MAT] = {gDecorIcon_ThunderMat, gDecorIconPalette_ThunderMat},
+ [DECOR_FIRE_BLAST_MAT] = {gDecorIcon_FireBlastMat, gDecorIconPalette_FireBlastMat},
+ [DECOR_POWDER_SNOW_MAT] = {gDecorIcon_PowderSnowMat, gDecorIconPalette_PowderSnowMat},
+ [DECOR_ATTRACT_MAT] = {gDecorIcon_AttractMat, gDecorIconPalette_AttractMat},
+ [DECOR_FISSURE_MAT] = {gDecorIcon_FissureMat, gDecorIconPalette_FissureMat},
+ [DECOR_SPIKES_MAT] = {gDecorIcon_SpikesMat, gDecorIconPalette_SpikesMat},
+ [DECOR_BALL_POSTER] = {NULL, NULL},
+ [DECOR_GREEN_POSTER] = {NULL, NULL},
+ [DECOR_RED_POSTER] = {NULL, NULL},
+ [DECOR_BLUE_POSTER] = {NULL, NULL},
+ [DECOR_CUTE_POSTER] = {NULL, NULL},
+ [DECOR_PIKA_POSTER] = {NULL, NULL},
+ [DECOR_LONG_POSTER] = {NULL, NULL},
+ [DECOR_SEA_POSTER] = {NULL, NULL},
+ [DECOR_SKY_POSTER] = {NULL, NULL},
+ [DECOR_KISS_POSTER] = {NULL, NULL},
+ [DECOR_PICHU_DOLL] = {NULL, NULL},
+ [DECOR_PIKACHU_DOLL] = {NULL, NULL},
+ [DECOR_MARILL_DOLL] = {NULL, NULL},
+ [DECOR_TOGEPI_DOLL] = {NULL, NULL},
+ [DECOR_CYNDAQUIL_DOLL] = {NULL, NULL},
+ [DECOR_CHIKORITA_DOLL] = {NULL, NULL},
+ [DECOR_TOTODILE_DOLL] = {NULL, NULL},
+ [DECOR_JIGGLYPUFF_DOLL] = {NULL, NULL},
+ [DECOR_MEOWTH_DOLL] = {NULL, NULL},
+ [DECOR_CLEFAIRY_DOLL] = {NULL, NULL},
+ [DECOR_DITTO_DOLL] = {NULL, NULL},
+ [DECOR_SMOOCHUM_DOLL] = {NULL, NULL},
+ [DECOR_TREECKO_DOLL] = {NULL, NULL},
+ [DECOR_TORCHIC_DOLL] = {NULL, NULL},
+ [DECOR_MUDKIP_DOLL] = {NULL, NULL},
+ [DECOR_DUSKULL_DOLL] = {NULL, NULL},
+ [DECOR_WYNAUT_DOLL] = {NULL, NULL},
+ [DECOR_BALTOY_DOLL] = {NULL, NULL},
+ [DECOR_KECLEON_DOLL] = {NULL, NULL},
+ [DECOR_AZURILL_DOLL] = {NULL, NULL},
+ [DECOR_SKITTY_DOLL] = {NULL, NULL},
+ [DECOR_SWABLU_DOLL] = {NULL, NULL},
+ [DECOR_GULPIN_DOLL] = {NULL, NULL},
+ [DECOR_LOTAD_DOLL] = {NULL, NULL},
+ [DECOR_SEEDOT_DOLL] = {NULL, NULL},
+ [DECOR_PIKA_CUSHION] = {NULL, NULL},
+ [DECOR_ROUND_CUSHION] = {NULL, NULL},
+ [DECOR_KISS_CUSHION] = {NULL, NULL},
+ [DECOR_ZIGZAG_CUSHION] = {NULL, NULL},
+ [DECOR_SPIN_CUSHION] = {NULL, NULL},
+ [DECOR_DIAMOND_CUSHION] = {NULL, NULL},
+ [DECOR_BALL_CUSHION] = {NULL, NULL},
+ [DECOR_GRASS_CUSHION] = {NULL, NULL},
+ [DECOR_FIRE_CUSHION] = {NULL, NULL},
+ [DECOR_WATER_CUSHION] = {NULL, NULL},
+ [DECOR_SNORLAX_DOLL] = {gDecorIcon_SnorlaxDoll, gDecorIconPalette_SnorlaxDoll},
+ [DECOR_RHYDON_DOLL] = {gDecorIcon_RhydonDoll, gDecorIconPalette_RhydonDoll},
+ [DECOR_LAPRAS_DOLL] = {gDecorIcon_LaprasDoll, gDecorIconPalette_LaprasDoll},
+ [DECOR_VENUSAUR_DOLL] = {gDecorIcon_VenusaurDoll, gDecorIconPalette_VenusaurDoll},
+ [DECOR_CHARIZARD_DOLL] = {gDecorIcon_CharizardDoll, gDecorIconPalette_CharizardDoll},
+ [DECOR_BLASTOISE_DOLL] = {gDecorIcon_BlastoiseDoll, gDecorIconPalette_BlastoiseDoll},
+ [DECOR_WAILMER_DOLL] = {gDecorIcon_WailmerDoll, gDecorIconPalette_WailmerDoll},
+ [DECOR_REGIROCK_DOLL] = {gDecorIcon_RegirockDoll, gDecorIconPalette_RegirockDoll},
+ [DECOR_REGICE_DOLL] = {gDecorIcon_RegiceDoll, gDecorIconPalette_RegiceDoll},
+ [DECOR_REGISTEEL_DOLL] = {gDecorIcon_RegisteelDoll, gDecorIconPalette_RegisteelDoll}
};
diff --git a/src/data/field_event_obj/event_object_graphics_info_pointers.h b/src/data/field_event_obj/event_object_graphics_info_pointers.h
index 2f504737a..0b8aa79b2 100755
--- a/src/data/field_event_obj/event_object_graphics_info_pointers.h
+++ b/src/data/field_event_obj/event_object_graphics_info_pointers.h
@@ -247,245 +247,245 @@ const struct EventObjectGraphicsInfo gEventObjectGraphicsInfo_UnusedMauvilleOldM
const struct EventObjectGraphicsInfo *const gEventObjectGraphicsInfoPointers[] = {
- &gEventObjectGraphicsInfo_BrendanNormal,
- &gEventObjectGraphicsInfo_BrendanMachBike,
- &gEventObjectGraphicsInfo_BrendanSurfing,
- &gEventObjectGraphicsInfo_BrendanFieldMove,
- &gEventObjectGraphicsInfo_QuintyPlump,
- &gEventObjectGraphicsInfo_NinjaBoy,
- &gEventObjectGraphicsInfo_Twin,
- &gEventObjectGraphicsInfo_Boy1,
- &gEventObjectGraphicsInfo_Girl1,
- &gEventObjectGraphicsInfo_Boy2,
- &gEventObjectGraphicsInfo_Girl2,
- &gEventObjectGraphicsInfo_LittleBoy,
- &gEventObjectGraphicsInfo_LittleGirl,
- &gEventObjectGraphicsInfo_Boy3,
- &gEventObjectGraphicsInfo_Girl3,
- &gEventObjectGraphicsInfo_RichBoy,
- &gEventObjectGraphicsInfo_Woman1,
- &gEventObjectGraphicsInfo_FatMan,
- &gEventObjectGraphicsInfo_PokefanF,
- &gEventObjectGraphicsInfo_Man1,
- &gEventObjectGraphicsInfo_Woman2,
- &gEventObjectGraphicsInfo_ExpertM,
- &gEventObjectGraphicsInfo_ExpertF,
- &gEventObjectGraphicsInfo_Man2,
- &gEventObjectGraphicsInfo_Woman3,
- &gEventObjectGraphicsInfo_PokefanM,
- &gEventObjectGraphicsInfo_Woman4,
- &gEventObjectGraphicsInfo_Cook,
- &gEventObjectGraphicsInfo_LinkReceptionist,
- &gEventObjectGraphicsInfo_OldMan,
- &gEventObjectGraphicsInfo_OldWoman,
- &gEventObjectGraphicsInfo_Camper,
- &gEventObjectGraphicsInfo_Picnicker,
- &gEventObjectGraphicsInfo_Man3,
- &gEventObjectGraphicsInfo_Woman5,
- &gEventObjectGraphicsInfo_Youngster,
- &gEventObjectGraphicsInfo_BugCatcher,
- &gEventObjectGraphicsInfo_PsychicM,
- &gEventObjectGraphicsInfo_SchoolKidM,
- &gEventObjectGraphicsInfo_Maniac,
- &gEventObjectGraphicsInfo_HexManiac,
- &gEventObjectGraphicsInfo_Rayquaza1,
- &gEventObjectGraphicsInfo_SwimmerM,
- &gEventObjectGraphicsInfo_SwimmerF,
- &gEventObjectGraphicsInfo_BlackBelt,
- &gEventObjectGraphicsInfo_Beauty,
- &gEventObjectGraphicsInfo_Scientist1,
- &gEventObjectGraphicsInfo_Lass,
- &gEventObjectGraphicsInfo_Gentleman,
- &gEventObjectGraphicsInfo_Sailor,
- &gEventObjectGraphicsInfo_Fisherman,
- &gEventObjectGraphicsInfo_RunningTriathleteM,
- &gEventObjectGraphicsInfo_RunningTriathleteF,
- &gEventObjectGraphicsInfo_TuberF,
- &gEventObjectGraphicsInfo_TuberM,
- &gEventObjectGraphicsInfo_Hiker,
- &gEventObjectGraphicsInfo_CyclingTriathleteM,
- &gEventObjectGraphicsInfo_CyclingTriathleteF,
- &gEventObjectGraphicsInfo_Nurse,
- &gEventObjectGraphicsInfo_ItemBall,
- &gEventObjectGraphicsInfo_BerryTree,
- &gEventObjectGraphicsInfo_BerryTreeEarlyStages,
- &gEventObjectGraphicsInfo_BerryTreeLateStages,
- &gEventObjectGraphicsInfo_BrendanAcroBike,
- &gEventObjectGraphicsInfo_ProfBirch,
- &gEventObjectGraphicsInfo_Man4,
- &gEventObjectGraphicsInfo_Man5,
- &gEventObjectGraphicsInfo_ReporterM,
- &gEventObjectGraphicsInfo_ReporterF,
- &gEventObjectGraphicsInfo_Bard,
- &gEventObjectGraphicsInfo_Anabel,
- &gEventObjectGraphicsInfo_Tucker,
- &gEventObjectGraphicsInfo_Greta,
- &gEventObjectGraphicsInfo_Spenser,
- &gEventObjectGraphicsInfo_Noland,
- &gEventObjectGraphicsInfo_Lucy,
- &gEventObjectGraphicsInfo_UnusedNatuDoll,
- &gEventObjectGraphicsInfo_UnusedMagnemiteDoll,
- &gEventObjectGraphicsInfo_UnusedSquirtleDoll,
- &gEventObjectGraphicsInfo_UnusedWooperDoll,
- &gEventObjectGraphicsInfo_UnusedPikachuDoll,
- &gEventObjectGraphicsInfo_UnusedPorygon2Doll,
- &gEventObjectGraphicsInfo_CuttableTree,
- &gEventObjectGraphicsInfo_MartEmployee,
- &gEventObjectGraphicsInfo_RooftopSaleWoman,
- &gEventObjectGraphicsInfo_Teala,
- &gEventObjectGraphicsInfo_BreakableRock,
- &gEventObjectGraphicsInfo_PushableBoulder,
- &gEventObjectGraphicsInfo_MrBrineysBoat,
- &gEventObjectGraphicsInfo_MayNormal,
- &gEventObjectGraphicsInfo_MayMachBike,
- &gEventObjectGraphicsInfo_MayAcroBike,
- &gEventObjectGraphicsInfo_MaySurfing,
- &gEventObjectGraphicsInfo_MayFieldMove,
- &gEventObjectGraphicsInfo_Truck,
- &gEventObjectGraphicsInfo_VigorothCarryingBox,
- &gEventObjectGraphicsInfo_VigorothFacingAway,
- &gEventObjectGraphicsInfo_BirchsBag,
- &gEventObjectGraphicsInfo_EnemyZigzagoon,
- &gEventObjectGraphicsInfo_Artist,
- &gEventObjectGraphicsInfo_RivalBrendanNormal,
- &gEventObjectGraphicsInfo_RivalBrendanMachBike,
- &gEventObjectGraphicsInfo_RivalBrendanAcroBike,
- &gEventObjectGraphicsInfo_RivalBrendanSurfing,
- &gEventObjectGraphicsInfo_RivalBrendanFieldMove,
- &gEventObjectGraphicsInfo_RivalMayNormal,
- &gEventObjectGraphicsInfo_RivalMayMachBike,
- &gEventObjectGraphicsInfo_RivalMayAcroBike,
- &gEventObjectGraphicsInfo_RivalMaySurfing,
- &gEventObjectGraphicsInfo_RivalMayFieldMove,
- &gEventObjectGraphicsInfo_Cameraman,
- &gEventObjectGraphicsInfo_BrendanUnderwater,
- &gEventObjectGraphicsInfo_MayUnderwater,
- &gEventObjectGraphicsInfo_MovingBox,
- &gEventObjectGraphicsInfo_CableCar,
- &gEventObjectGraphicsInfo_Scientist2,
- &gEventObjectGraphicsInfo_DevonEmployee,
- &gEventObjectGraphicsInfo_AquaMemberM,
- &gEventObjectGraphicsInfo_AquaMemberF,
- &gEventObjectGraphicsInfo_MagmaMemberM,
- &gEventObjectGraphicsInfo_MagmaMemberF,
- &gEventObjectGraphicsInfo_Sidney,
- &gEventObjectGraphicsInfo_Phoebe,
- &gEventObjectGraphicsInfo_Glacia,
- &gEventObjectGraphicsInfo_Drake,
- &gEventObjectGraphicsInfo_Roxanne,
- &gEventObjectGraphicsInfo_Brawly,
- &gEventObjectGraphicsInfo_Wattson,
- &gEventObjectGraphicsInfo_Flannery,
- &gEventObjectGraphicsInfo_Norman,
- &gEventObjectGraphicsInfo_Winona,
- &gEventObjectGraphicsInfo_Liza,
- &gEventObjectGraphicsInfo_Tate,
- &gEventObjectGraphicsInfo_Wallace,
- &gEventObjectGraphicsInfo_Steven,
- &gEventObjectGraphicsInfo_Wally,
- &gEventObjectGraphicsInfo_RubySapphireLittleBoy,
- &gEventObjectGraphicsInfo_BrendanFishing,
- &gEventObjectGraphicsInfo_MayFishing,
- &gEventObjectGraphicsInfo_HotSpringsOldWoman,
- &gEventObjectGraphicsInfo_SSTidal,
- &gEventObjectGraphicsInfo_SubmarineShadow,
- &gEventObjectGraphicsInfo_PichuDoll,
- &gEventObjectGraphicsInfo_PikachuDoll,
- &gEventObjectGraphicsInfo_MarillDoll,
- &gEventObjectGraphicsInfo_TogepiDoll,
- &gEventObjectGraphicsInfo_CyndaquilDoll,
- &gEventObjectGraphicsInfo_ChikoritaDoll,
- &gEventObjectGraphicsInfo_TotodileDoll,
- &gEventObjectGraphicsInfo_JigglypuffDoll,
- &gEventObjectGraphicsInfo_MeowthDoll,
- &gEventObjectGraphicsInfo_ClefairyDoll,
- &gEventObjectGraphicsInfo_DittoDoll,
- &gEventObjectGraphicsInfo_SmoochumDoll,
- &gEventObjectGraphicsInfo_TreeckoDoll,
- &gEventObjectGraphicsInfo_TorchicDoll,
- &gEventObjectGraphicsInfo_MudkipDoll,
- &gEventObjectGraphicsInfo_DuskullDoll,
- &gEventObjectGraphicsInfo_WynautDoll,
- &gEventObjectGraphicsInfo_BaltoyDoll,
- &gEventObjectGraphicsInfo_KecleonDoll,
- &gEventObjectGraphicsInfo_AzurillDoll,
- &gEventObjectGraphicsInfo_SkittyDoll,
- &gEventObjectGraphicsInfo_SwabluDoll,
- &gEventObjectGraphicsInfo_GulpinDoll,
- &gEventObjectGraphicsInfo_LotadDoll,
- &gEventObjectGraphicsInfo_SeedotDoll,
- &gEventObjectGraphicsInfo_PikaCushion,
- &gEventObjectGraphicsInfo_RoundCushion,
- &gEventObjectGraphicsInfo_KissCushion,
- &gEventObjectGraphicsInfo_ZigzagCushion,
- &gEventObjectGraphicsInfo_SpinCushion,
- &gEventObjectGraphicsInfo_DiamondCushion,
- &gEventObjectGraphicsInfo_BallCushion,
- &gEventObjectGraphicsInfo_GrassCushion,
- &gEventObjectGraphicsInfo_FireCushion,
- &gEventObjectGraphicsInfo_WaterCushion,
- &gEventObjectGraphicsInfo_BigSnorlaxDoll,
- &gEventObjectGraphicsInfo_BigRhydonDoll,
- &gEventObjectGraphicsInfo_BigLaprasDoll,
- &gEventObjectGraphicsInfo_BigVenusaurDoll,
- &gEventObjectGraphicsInfo_BigCharizardDoll,
- &gEventObjectGraphicsInfo_BigBlastoiseDoll,
- &gEventObjectGraphicsInfo_BigWailmerDoll,
- &gEventObjectGraphicsInfo_BigRegirockDoll,
- &gEventObjectGraphicsInfo_BigRegiceDoll,
- &gEventObjectGraphicsInfo_BigRegisteelDoll,
- &gEventObjectGraphicsInfo_Latias,
- &gEventObjectGraphicsInfo_Latios,
- &gEventObjectGraphicsInfo_GameboyKid,
- &gEventObjectGraphicsInfo_ContestJudge,
- &gEventObjectGraphicsInfo_BrendanWatering,
- &gEventObjectGraphicsInfo_MayWatering,
- &gEventObjectGraphicsInfo_BrendanDecorating,
- &gEventObjectGraphicsInfo_MayDecorating,
- &gEventObjectGraphicsInfo_Archie,
- &gEventObjectGraphicsInfo_Maxie,
- &gEventObjectGraphicsInfo_Kyogre1,
- &gEventObjectGraphicsInfo_Groudon1,
- &gEventObjectGraphicsInfo_Fossil,
- &gEventObjectGraphicsInfo_Regirock,
- &gEventObjectGraphicsInfo_Regice,
- &gEventObjectGraphicsInfo_Registeel,
- &gEventObjectGraphicsInfo_Skitty,
- &gEventObjectGraphicsInfo_Kecleon1,
- &gEventObjectGraphicsInfo_Kyogre2,
- &gEventObjectGraphicsInfo_Groudon2,
- &gEventObjectGraphicsInfo_Rayquaza2,
- &gEventObjectGraphicsInfo_Zigzagoon,
- &gEventObjectGraphicsInfo_Pikachu,
- &gEventObjectGraphicsInfo_Azumarill,
- &gEventObjectGraphicsInfo_Wingull,
- &gEventObjectGraphicsInfo_Kecleon2,
- &gEventObjectGraphicsInfo_TuberMSwimming,
- &gEventObjectGraphicsInfo_Azurill,
- &gEventObjectGraphicsInfo_Mom,
- &gEventObjectGraphicsInfo_LinkBrendan,
- &gEventObjectGraphicsInfo_LinkMay,
- &gEventObjectGraphicsInfo_Juan,
- &gEventObjectGraphicsInfo_Scott,
- &gEventObjectGraphicsInfo_Poochyena,
- &gEventObjectGraphicsInfo_Kyogre3,
- &gEventObjectGraphicsInfo_Groudon3,
- &gEventObjectGraphicsInfo_MysteryEventDeliveryman,
- &gEventObjectGraphicsInfo_Statue,
- &gEventObjectGraphicsInfo_Kirlia,
- &gEventObjectGraphicsInfo_Dusclops,
- &gEventObjectGraphicsInfo_UnionRoomAttendant,
- &gEventObjectGraphicsInfo_Sudowoodo,
- &gEventObjectGraphicsInfo_Mew,
- &gEventObjectGraphicsInfo_Red,
- &gEventObjectGraphicsInfo_Leaf,
- &gEventObjectGraphicsInfo_Deoxys,
- &gEventObjectGraphicsInfo_BirthIslandStone,
- &gEventObjectGraphicsInfo_Brandon,
- &gEventObjectGraphicsInfo_RubySapphireBrendan,
- &gEventObjectGraphicsInfo_RubySapphireMay,
- &gEventObjectGraphicsInfo_Lugia,
- &gEventObjectGraphicsInfo_HoOh,
+ [EVENT_OBJ_GFX_BRENDAN_NORMAL] = &gEventObjectGraphicsInfo_BrendanNormal,
+ [EVENT_OBJ_GFX_BRENDAN_MACH_BIKE] = &gEventObjectGraphicsInfo_BrendanMachBike,
+ [EVENT_OBJ_GFX_BRENDAN_SURFING] = &gEventObjectGraphicsInfo_BrendanSurfing,
+ [EVENT_OBJ_GFX_BRENDAN_FIELD_MOVE] = &gEventObjectGraphicsInfo_BrendanFieldMove,
+ [EVENT_OBJ_GFX_QUINTY_PLUMP] = &gEventObjectGraphicsInfo_QuintyPlump,
+ [EVENT_OBJ_GFX_NINJA_BOY] = &gEventObjectGraphicsInfo_NinjaBoy,
+ [EVENT_OBJ_GFX_TWIN] = &gEventObjectGraphicsInfo_Twin,
+ [EVENT_OBJ_GFX_BOY_1] = &gEventObjectGraphicsInfo_Boy1,
+ [EVENT_OBJ_GFX_GIRL_1] = &gEventObjectGraphicsInfo_Girl1,
+ [EVENT_OBJ_GFX_BOY_2] = &gEventObjectGraphicsInfo_Boy2,
+ [EVENT_OBJ_GFX_GIRL_2] = &gEventObjectGraphicsInfo_Girl2,
+ [EVENT_OBJ_GFX_LITTLE_BOY] = &gEventObjectGraphicsInfo_LittleBoy,
+ [EVENT_OBJ_GFX_LITTLE_GIRL] = &gEventObjectGraphicsInfo_LittleGirl,
+ [EVENT_OBJ_GFX_BOY_3] = &gEventObjectGraphicsInfo_Boy3,
+ [EVENT_OBJ_GFX_GIRL_3] = &gEventObjectGraphicsInfo_Girl3,
+ [EVENT_OBJ_GFX_RICH_BOY] = &gEventObjectGraphicsInfo_RichBoy,
+ [EVENT_OBJ_GFX_WOMAN_1] = &gEventObjectGraphicsInfo_Woman1,
+ [EVENT_OBJ_GFX_FAT_MAN] = &gEventObjectGraphicsInfo_FatMan,
+ [EVENT_OBJ_GFX_POKEFAN_F] = &gEventObjectGraphicsInfo_PokefanF,
+ [EVENT_OBJ_GFX_MAN_1] = &gEventObjectGraphicsInfo_Man1,
+ [EVENT_OBJ_GFX_WOMAN_2] = &gEventObjectGraphicsInfo_Woman2,
+ [EVENT_OBJ_GFX_EXPERT_M] = &gEventObjectGraphicsInfo_ExpertM,
+ [EVENT_OBJ_GFX_EXPERT_F] = &gEventObjectGraphicsInfo_ExpertF,
+ [EVENT_OBJ_GFX_MAN_2] = &gEventObjectGraphicsInfo_Man2,
+ [EVENT_OBJ_GFX_WOMAN_3] = &gEventObjectGraphicsInfo_Woman3,
+ [EVENT_OBJ_GFX_POKEFAN_M] = &gEventObjectGraphicsInfo_PokefanM,
+ [EVENT_OBJ_GFX_WOMAN_4] = &gEventObjectGraphicsInfo_Woman4,
+ [EVENT_OBJ_GFX_COOK] = &gEventObjectGraphicsInfo_Cook,
+ [EVENT_OBJ_GFX_LINK_RECEPTIONIST] = &gEventObjectGraphicsInfo_LinkReceptionist,
+ [EVENT_OBJ_GFX_OLD_MAN] = &gEventObjectGraphicsInfo_OldMan,
+ [EVENT_OBJ_GFX_OLD_WOMAN] = &gEventObjectGraphicsInfo_OldWoman,
+ [EVENT_OBJ_GFX_CAMPER] = &gEventObjectGraphicsInfo_Camper,
+ [EVENT_OBJ_GFX_PICNICKER] = &gEventObjectGraphicsInfo_Picnicker,
+ [EVENT_OBJ_GFX_MAN_3] = &gEventObjectGraphicsInfo_Man3,
+ [EVENT_OBJ_GFX_WOMAN_5] = &gEventObjectGraphicsInfo_Woman5,
+ [EVENT_OBJ_GFX_YOUNGSTER] = &gEventObjectGraphicsInfo_Youngster,
+ [EVENT_OBJ_GFX_BUG_CATCHER] = &gEventObjectGraphicsInfo_BugCatcher,
+ [EVENT_OBJ_GFX_PSYCHIC_M] = &gEventObjectGraphicsInfo_PsychicM,
+ [EVENT_OBJ_GFX_SCHOOL_KID_M] = &gEventObjectGraphicsInfo_SchoolKidM,
+ [EVENT_OBJ_GFX_MANIAC] = &gEventObjectGraphicsInfo_Maniac,
+ [EVENT_OBJ_GFX_HEX_MANIAC] = &gEventObjectGraphicsInfo_HexManiac,
+ [EVENT_OBJ_GFX_RAYQUAZA_1] = &gEventObjectGraphicsInfo_Rayquaza1,
+ [EVENT_OBJ_GFX_SWIMMER_M] = &gEventObjectGraphicsInfo_SwimmerM,
+ [EVENT_OBJ_GFX_SWIMMER_F] = &gEventObjectGraphicsInfo_SwimmerF,
+ [EVENT_OBJ_GFX_BLACK_BELT] = &gEventObjectGraphicsInfo_BlackBelt,
+ [EVENT_OBJ_GFX_BEAUTY] = &gEventObjectGraphicsInfo_Beauty,
+ [EVENT_OBJ_GFX_SCIENTIST_1] = &gEventObjectGraphicsInfo_Scientist1,
+ [EVENT_OBJ_GFX_LASS] = &gEventObjectGraphicsInfo_Lass,
+ [EVENT_OBJ_GFX_GENTLEMAN] = &gEventObjectGraphicsInfo_Gentleman,
+ [EVENT_OBJ_GFX_SAILOR] = &gEventObjectGraphicsInfo_Sailor,
+ [EVENT_OBJ_GFX_FISHERMAN] = &gEventObjectGraphicsInfo_Fisherman,
+ [EVENT_OBJ_GFX_RUNNING_TRIATHLETE_M] = &gEventObjectGraphicsInfo_RunningTriathleteM,
+ [EVENT_OBJ_GFX_RUNNING_TRIATHLETE_F] = &gEventObjectGraphicsInfo_RunningTriathleteF,
+ [EVENT_OBJ_GFX_TUBER_F] = &gEventObjectGraphicsInfo_TuberF,
+ [EVENT_OBJ_GFX_TUBER_M] = &gEventObjectGraphicsInfo_TuberM,
+ [EVENT_OBJ_GFX_HIKER] = &gEventObjectGraphicsInfo_Hiker,
+ [EVENT_OBJ_GFX_CYCLING_TRIATHLETE_M] = &gEventObjectGraphicsInfo_CyclingTriathleteM,
+ [EVENT_OBJ_GFX_CYCLING_TRIATHLETE_F] = &gEventObjectGraphicsInfo_CyclingTriathleteF,
+ [EVENT_OBJ_GFX_NURSE] = &gEventObjectGraphicsInfo_Nurse,
+ [EVENT_OBJ_GFX_ITEM_BALL] = &gEventObjectGraphicsInfo_ItemBall,
+ [EVENT_OBJ_GFX_BERRY_TREE] = &gEventObjectGraphicsInfo_BerryTree,
+ [EVENT_OBJ_GFX_BERRY_TREE_EARLY_STAGES] = &gEventObjectGraphicsInfo_BerryTreeEarlyStages,
+ [EVENT_OBJ_GFX_BERRY_TREE_LATE_STAGES] = &gEventObjectGraphicsInfo_BerryTreeLateStages,
+ [EVENT_OBJ_GFX_BRENDAN_ACRO_BIKE] = &gEventObjectGraphicsInfo_BrendanAcroBike,
+ [EVENT_OBJ_GFX_PROF_BIRCH] = &gEventObjectGraphicsInfo_ProfBirch,
+ [EVENT_OBJ_GFX_MAN_4] = &gEventObjectGraphicsInfo_Man4,
+ [EVENT_OBJ_GFX_MAN_5] = &gEventObjectGraphicsInfo_Man5,
+ [EVENT_OBJ_GFX_REPORTER_M] = &gEventObjectGraphicsInfo_ReporterM,
+ [EVENT_OBJ_GFX_REPORTER_F] = &gEventObjectGraphicsInfo_ReporterF,
+ [EVENT_OBJ_GFX_BARD] = &gEventObjectGraphicsInfo_Bard,
+ [EVENT_OBJ_GFX_ANABEL] = &gEventObjectGraphicsInfo_Anabel,
+ [EVENT_OBJ_GFX_TUCKER] = &gEventObjectGraphicsInfo_Tucker,
+ [EVENT_OBJ_GFX_GRETA] = &gEventObjectGraphicsInfo_Greta,
+ [EVENT_OBJ_GFX_SPENSER] = &gEventObjectGraphicsInfo_Spenser,
+ [EVENT_OBJ_GFX_NOLAND] = &gEventObjectGraphicsInfo_Noland,
+ [EVENT_OBJ_GFX_LUCY] = &gEventObjectGraphicsInfo_Lucy,
+ [EVENT_OBJ_GFX_UNUSED_NATU_DOLL] = &gEventObjectGraphicsInfo_UnusedNatuDoll,
+ [EVENT_OBJ_GFX_UNUSED_MAGNEMITE_DOLL] = &gEventObjectGraphicsInfo_UnusedMagnemiteDoll,
+ [EVENT_OBJ_GFX_UNUSED_SQUIRTLE_DOLL] = &gEventObjectGraphicsInfo_UnusedSquirtleDoll,
+ [EVENT_OBJ_GFX_UNUSED_WOOPER_DOLL] = &gEventObjectGraphicsInfo_UnusedWooperDoll,
+ [EVENT_OBJ_GFX_UNUSED_PIKACHU_DOLL] = &gEventObjectGraphicsInfo_UnusedPikachuDoll,
+ [EVENT_OBJ_GFX_UNUSED_PORYGON2_DOLL] = &gEventObjectGraphicsInfo_UnusedPorygon2Doll,
+ [EVENT_OBJ_GFX_CUTTABLE_TREE] = &gEventObjectGraphicsInfo_CuttableTree,
+ [EVENT_OBJ_GFX_MART_EMPLOYEE] = &gEventObjectGraphicsInfo_MartEmployee,
+ [EVENT_OBJ_GFX_ROOFTOP_SALE_WOMAN] = &gEventObjectGraphicsInfo_RooftopSaleWoman,
+ [EVENT_OBJ_GFX_TEALA] = &gEventObjectGraphicsInfo_Teala,
+ [EVENT_OBJ_GFX_BREAKABLE_ROCK] = &gEventObjectGraphicsInfo_BreakableRock,
+ [EVENT_OBJ_GFX_PUSHABLE_BOULDER] = &gEventObjectGraphicsInfo_PushableBoulder,
+ [EVENT_OBJ_GFX_MR_BRINEYS_BOAT] = &gEventObjectGraphicsInfo_MrBrineysBoat,
+ [EVENT_OBJ_GFX_MAY_NORMAL] = &gEventObjectGraphicsInfo_MayNormal,
+ [EVENT_OBJ_GFX_MAY_MACH_BIKE] = &gEventObjectGraphicsInfo_MayMachBike,
+ [EVENT_OBJ_GFX_MAY_ACRO_BIKE] = &gEventObjectGraphicsInfo_MayAcroBike,
+ [EVENT_OBJ_GFX_MAY_SURFING] = &gEventObjectGraphicsInfo_MaySurfing,
+ [EVENT_OBJ_GFX_MAY_FIELD_MOVE] = &gEventObjectGraphicsInfo_MayFieldMove,
+ [EVENT_OBJ_GFX_TRUCK] = &gEventObjectGraphicsInfo_Truck,
+ [EVENT_OBJ_GFX_VIGOROTH_CARRYING_BOX] = &gEventObjectGraphicsInfo_VigorothCarryingBox,
+ [EVENT_OBJ_GFX_VIGOROTH_FACING_AWAY] = &gEventObjectGraphicsInfo_VigorothFacingAway,
+ [EVENT_OBJ_GFX_BIRCHS_BAG] = &gEventObjectGraphicsInfo_BirchsBag,
+ [EVENT_OBJ_GFX_ZIGZAGOON_1] = &gEventObjectGraphicsInfo_EnemyZigzagoon,
+ [EVENT_OBJ_GFX_ARTIST] = &gEventObjectGraphicsInfo_Artist,
+ [EVENT_OBJ_GFX_RIVAL_BRENDAN_NORMAL] = &gEventObjectGraphicsInfo_RivalBrendanNormal,
+ [EVENT_OBJ_GFX_RIVAL_BRENDAN_MACH_BIKE] = &gEventObjectGraphicsInfo_RivalBrendanMachBike,
+ [EVENT_OBJ_GFX_RIVAL_BRENDAN_ACRO_BIKE] = &gEventObjectGraphicsInfo_RivalBrendanAcroBike,
+ [EVENT_OBJ_GFX_RIVAL_BRENDAN_SURFING] = &gEventObjectGraphicsInfo_RivalBrendanSurfing,
+ [EVENT_OBJ_GFX_RIVAL_BRENDAN_FIELD_MOVE] = &gEventObjectGraphicsInfo_RivalBrendanFieldMove,
+ [EVENT_OBJ_GFX_RIVAL_MAY_NORMAL] = &gEventObjectGraphicsInfo_RivalMayNormal,
+ [EVENT_OBJ_GFX_RIVAL_MAY_MACH_BIKE] = &gEventObjectGraphicsInfo_RivalMayMachBike,
+ [EVENT_OBJ_GFX_RIVAL_MAY_ACRO_BIKE] = &gEventObjectGraphicsInfo_RivalMayAcroBike,
+ [EVENT_OBJ_GFX_RIVAL_MAY_SURFING] = &gEventObjectGraphicsInfo_RivalMaySurfing,
+ [EVENT_OBJ_GFX_RIVAL_MAY_FIELD_MOVE] = &gEventObjectGraphicsInfo_RivalMayFieldMove,
+ [EVENT_OBJ_GFX_CAMERAMAN] = &gEventObjectGraphicsInfo_Cameraman,
+ [EVENT_OBJ_GFX_BRENDAN_UNDERWATER] = &gEventObjectGraphicsInfo_BrendanUnderwater,
+ [EVENT_OBJ_GFX_MAY_UNDERWATER] = &gEventObjectGraphicsInfo_MayUnderwater,
+ [EVENT_OBJ_GFX_MOVING_BOX] = &gEventObjectGraphicsInfo_MovingBox,
+ [EVENT_OBJ_GFX_CABLE_CAR] = &gEventObjectGraphicsInfo_CableCar,
+ [EVENT_OBJ_GFX_SCIENTIST_2] = &gEventObjectGraphicsInfo_Scientist2,
+ [EVENT_OBJ_GFX_DEVON_EMPLOYEE] = &gEventObjectGraphicsInfo_DevonEmployee,
+ [EVENT_OBJ_GFX_AQUA_MEMBER_M] = &gEventObjectGraphicsInfo_AquaMemberM,
+ [EVENT_OBJ_GFX_AQUA_MEMBER_F] = &gEventObjectGraphicsInfo_AquaMemberF,
+ [EVENT_OBJ_GFX_MAGMA_MEMBER_M] = &gEventObjectGraphicsInfo_MagmaMemberM,
+ [EVENT_OBJ_GFX_MAGMA_MEMBER_F] = &gEventObjectGraphicsInfo_MagmaMemberF,
+ [EVENT_OBJ_GFX_SIDNEY] = &gEventObjectGraphicsInfo_Sidney,
+ [EVENT_OBJ_GFX_PHOEBE] = &gEventObjectGraphicsInfo_Phoebe,
+ [EVENT_OBJ_GFX_GLACIA] = &gEventObjectGraphicsInfo_Glacia,
+ [EVENT_OBJ_GFX_DRAKE] = &gEventObjectGraphicsInfo_Drake,
+ [EVENT_OBJ_GFX_ROXANNE] = &gEventObjectGraphicsInfo_Roxanne,
+ [EVENT_OBJ_GFX_BRAWLY] = &gEventObjectGraphicsInfo_Brawly,
+ [EVENT_OBJ_GFX_WATTSON] = &gEventObjectGraphicsInfo_Wattson,
+ [EVENT_OBJ_GFX_FLANNERY] = &gEventObjectGraphicsInfo_Flannery,
+ [EVENT_OBJ_GFX_NORMAN] = &gEventObjectGraphicsInfo_Norman,
+ [EVENT_OBJ_GFX_WINONA] = &gEventObjectGraphicsInfo_Winona,
+ [EVENT_OBJ_GFX_LIZA] = &gEventObjectGraphicsInfo_Liza,
+ [EVENT_OBJ_GFX_TATE] = &gEventObjectGraphicsInfo_Tate,
+ [EVENT_OBJ_GFX_WALLACE] = &gEventObjectGraphicsInfo_Wallace,
+ [EVENT_OBJ_GFX_STEVEN] = &gEventObjectGraphicsInfo_Steven,
+ [EVENT_OBJ_GFX_WALLY] = &gEventObjectGraphicsInfo_Wally,
+ [EVENT_OBJ_GFX_LITTLE_BOY_3] = &gEventObjectGraphicsInfo_RubySapphireLittleBoy,
+ [EVENT_OBJ_GFX_BRENDAN_FISHING] = &gEventObjectGraphicsInfo_BrendanFishing,
+ [EVENT_OBJ_GFX_MAY_FISHING] = &gEventObjectGraphicsInfo_MayFishing,
+ [EVENT_OBJ_GFX_HOT_SPRINGS_OLD_WOMAN] = &gEventObjectGraphicsInfo_HotSpringsOldWoman,
+ [EVENT_OBJ_GFX_SS_TIDAL] = &gEventObjectGraphicsInfo_SSTidal,
+ [EVENT_OBJ_GFX_SUBMARINE_SHADOW] = &gEventObjectGraphicsInfo_SubmarineShadow,
+ [EVENT_OBJ_GFX_PICHU_DOLL] = &gEventObjectGraphicsInfo_PichuDoll,
+ [EVENT_OBJ_GFX_PIKACHU_DOLL] = &gEventObjectGraphicsInfo_PikachuDoll,
+ [EVENT_OBJ_GFX_MARILL_DOLL] = &gEventObjectGraphicsInfo_MarillDoll,
+ [EVENT_OBJ_GFX_TOGEPI_DOLL] = &gEventObjectGraphicsInfo_TogepiDoll,
+ [EVENT_OBJ_GFX_CYNDAQUIL_DOLL] = &gEventObjectGraphicsInfo_CyndaquilDoll,
+ [EVENT_OBJ_GFX_CHIKORITA_DOLL] = &gEventObjectGraphicsInfo_ChikoritaDoll,
+ [EVENT_OBJ_GFX_TOTODILE_DOLL] = &gEventObjectGraphicsInfo_TotodileDoll,
+ [EVENT_OBJ_GFX_JIGGLYPUFF_DOLL] = &gEventObjectGraphicsInfo_JigglypuffDoll,
+ [EVENT_OBJ_GFX_MEOWTH_DOLL] = &gEventObjectGraphicsInfo_MeowthDoll,
+ [EVENT_OBJ_GFX_CLEFAIRY_DOLL] = &gEventObjectGraphicsInfo_ClefairyDoll,
+ [EVENT_OBJ_GFX_DITTO_DOLL] = &gEventObjectGraphicsInfo_DittoDoll,
+ [EVENT_OBJ_GFX_SMOOCHUM_DOLL] = &gEventObjectGraphicsInfo_SmoochumDoll,
+ [EVENT_OBJ_GFX_TREECKO_DOLL] = &gEventObjectGraphicsInfo_TreeckoDoll,
+ [EVENT_OBJ_GFX_TORCHIC_DOLL] = &gEventObjectGraphicsInfo_TorchicDoll,
+ [EVENT_OBJ_GFX_MUDKIP_DOLL] = &gEventObjectGraphicsInfo_MudkipDoll,
+ [EVENT_OBJ_GFX_DUSKULL_DOLL] = &gEventObjectGraphicsInfo_DuskullDoll,
+ [EVENT_OBJ_GFX_WYNAUT_DOLL] = &gEventObjectGraphicsInfo_WynautDoll,
+ [EVENT_OBJ_GFX_BALTOY_DOLL] = &gEventObjectGraphicsInfo_BaltoyDoll,
+ [EVENT_OBJ_GFX_KECLEON_DOLL] = &gEventObjectGraphicsInfo_KecleonDoll,
+ [EVENT_OBJ_GFX_AZURILL_DOLL] = &gEventObjectGraphicsInfo_AzurillDoll,
+ [EVENT_OBJ_GFX_SKITTY_DOLL] = &gEventObjectGraphicsInfo_SkittyDoll,
+ [EVENT_OBJ_GFX_SWABLU_DOLL] = &gEventObjectGraphicsInfo_SwabluDoll,
+ [EVENT_OBJ_GFX_GULPIN_DOLL] = &gEventObjectGraphicsInfo_GulpinDoll,
+ [EVENT_OBJ_GFX_LOTAD_DOLL] = &gEventObjectGraphicsInfo_LotadDoll,
+ [EVENT_OBJ_GFX_SEEDOT_DOLL] = &gEventObjectGraphicsInfo_SeedotDoll,
+ [EVENT_OBJ_GFX_PIKA_CUSHION] = &gEventObjectGraphicsInfo_PikaCushion,
+ [EVENT_OBJ_GFX_ROUND_CUSHION] = &gEventObjectGraphicsInfo_RoundCushion,
+ [EVENT_OBJ_GFX_KISS_CUSHION] = &gEventObjectGraphicsInfo_KissCushion,
+ [EVENT_OBJ_GFX_ZIGZAG_CUSHION] = &gEventObjectGraphicsInfo_ZigzagCushion,
+ [EVENT_OBJ_GFX_SPIN_CUSHION] = &gEventObjectGraphicsInfo_SpinCushion,
+ [EVENT_OBJ_GFX_DIAMOND_CUSHION] = &gEventObjectGraphicsInfo_DiamondCushion,
+ [EVENT_OBJ_GFX_BALL_CUSHION] = &gEventObjectGraphicsInfo_BallCushion,
+ [EVENT_OBJ_GFX_GRASS_CUSHION] = &gEventObjectGraphicsInfo_GrassCushion,
+ [EVENT_OBJ_GFX_FIRE_CUSHION] = &gEventObjectGraphicsInfo_FireCushion,
+ [EVENT_OBJ_GFX_WATER_CUSHION] = &gEventObjectGraphicsInfo_WaterCushion,
+ [EVENT_OBJ_GFX_BIG_SNORLAX_DOLL] = &gEventObjectGraphicsInfo_BigSnorlaxDoll,
+ [EVENT_OBJ_GFX_BIG_RHYDON_DOLL] = &gEventObjectGraphicsInfo_BigRhydonDoll,
+ [EVENT_OBJ_GFX_BIG_LAPRAS_DOLL] = &gEventObjectGraphicsInfo_BigLaprasDoll,
+ [EVENT_OBJ_GFX_BIG_VENUSAUR_DOLL] = &gEventObjectGraphicsInfo_BigVenusaurDoll,
+ [EVENT_OBJ_GFX_BIG_CHARIZARD_DOLL] = &gEventObjectGraphicsInfo_BigCharizardDoll,
+ [EVENT_OBJ_GFX_BIG_BLASTOISE_DOLL] = &gEventObjectGraphicsInfo_BigBlastoiseDoll,
+ [EVENT_OBJ_GFX_BIG_WAILMER_DOLL] = &gEventObjectGraphicsInfo_BigWailmerDoll,
+ [EVENT_OBJ_GFX_BIG_REGIROCK_DOLL] = &gEventObjectGraphicsInfo_BigRegirockDoll,
+ [EVENT_OBJ_GFX_BIG_REGICE_DOLL] = &gEventObjectGraphicsInfo_BigRegiceDoll,
+ [EVENT_OBJ_GFX_BIG_REGISTEEL_DOLL] = &gEventObjectGraphicsInfo_BigRegisteelDoll,
+ [EVENT_OBJ_GFX_LATIAS] = &gEventObjectGraphicsInfo_Latias,
+ [EVENT_OBJ_GFX_LATIOS] = &gEventObjectGraphicsInfo_Latios,
+ [EVENT_OBJ_GFX_GAMEBOY_KID] = &gEventObjectGraphicsInfo_GameboyKid,
+ [EVENT_OBJ_GFX_CONTEST_JUDGE] = &gEventObjectGraphicsInfo_ContestJudge,
+ [EVENT_OBJ_GFX_BRENDAN_WATERING] = &gEventObjectGraphicsInfo_BrendanWatering,
+ [EVENT_OBJ_GFX_MAY_WATERING] = &gEventObjectGraphicsInfo_MayWatering,
+ [EVENT_OBJ_GFX_BRENDAN_DECORATING] = &gEventObjectGraphicsInfo_BrendanDecorating,
+ [EVENT_OBJ_GFX_MAY_DECORATING] = &gEventObjectGraphicsInfo_MayDecorating,
+ [EVENT_OBJ_GFX_ARCHIE] = &gEventObjectGraphicsInfo_Archie,
+ [EVENT_OBJ_GFX_MAXIE] = &gEventObjectGraphicsInfo_Maxie,
+ [EVENT_OBJ_GFX_KYOGRE_1] = &gEventObjectGraphicsInfo_Kyogre1,
+ [EVENT_OBJ_GFX_GROUDON_1] = &gEventObjectGraphicsInfo_Groudon1,
+ [EVENT_OBJ_GFX_FOSSIL] = &gEventObjectGraphicsInfo_Fossil,
+ [EVENT_OBJ_GFX_REGIROCK] = &gEventObjectGraphicsInfo_Regirock,
+ [EVENT_OBJ_GFX_REGICE] = &gEventObjectGraphicsInfo_Regice,
+ [EVENT_OBJ_GFX_REGISTEEL] = &gEventObjectGraphicsInfo_Registeel,
+ [EVENT_OBJ_GFX_SKITTY] = &gEventObjectGraphicsInfo_Skitty,
+ [EVENT_OBJ_GFX_KECLEON_1] = &gEventObjectGraphicsInfo_Kecleon1,
+ [EVENT_OBJ_GFX_KYOGRE_2] = &gEventObjectGraphicsInfo_Kyogre2,
+ [EVENT_OBJ_GFX_GROUDON_2] = &gEventObjectGraphicsInfo_Groudon2,
+ [EVENT_OBJ_GFX_RAYQUAZA_2] = &gEventObjectGraphicsInfo_Rayquaza2,
+ [EVENT_OBJ_GFX_ZIGZAGOON_2] = &gEventObjectGraphicsInfo_Zigzagoon,
+ [EVENT_OBJ_GFX_PIKACHU] = &gEventObjectGraphicsInfo_Pikachu,
+ [EVENT_OBJ_GFX_AZUMARILL] = &gEventObjectGraphicsInfo_Azumarill,
+ [EVENT_OBJ_GFX_WINGULL] = &gEventObjectGraphicsInfo_Wingull,
+ [EVENT_OBJ_GFX_KECLEON_2] = &gEventObjectGraphicsInfo_Kecleon2,
+ [EVENT_OBJ_GFX_TUBER_M_SWIMMING] = &gEventObjectGraphicsInfo_TuberMSwimming,
+ [EVENT_OBJ_GFX_AZURILL] = &gEventObjectGraphicsInfo_Azurill,
+ [EVENT_OBJ_GFX_MOM] = &gEventObjectGraphicsInfo_Mom,
+ [EVENT_OBJ_GFX_LINK_BRENDAN] = &gEventObjectGraphicsInfo_LinkBrendan,
+ [EVENT_OBJ_GFX_LINK_MAY] = &gEventObjectGraphicsInfo_LinkMay,
+ [EVENT_OBJ_GFX_JUAN] = &gEventObjectGraphicsInfo_Juan,
+ [EVENT_OBJ_GFX_SCOTT] = &gEventObjectGraphicsInfo_Scott,
+ [EVENT_OBJ_GFX_POOCHYENA] = &gEventObjectGraphicsInfo_Poochyena,
+ [EVENT_OBJ_GFX_KYOGRE_3] = &gEventObjectGraphicsInfo_Kyogre3,
+ [EVENT_OBJ_GFX_GROUDON_3] = &gEventObjectGraphicsInfo_Groudon3,
+ [EVENT_OBJ_GFX_MYSTERY_GIFT_MAN] = &gEventObjectGraphicsInfo_MysteryEventDeliveryman,
+ [EVENT_OBJ_GFX_TRICK_HOUSE_STATUE] = &gEventObjectGraphicsInfo_Statue,
+ [EVENT_OBJ_GFX_KIRLIA] = &gEventObjectGraphicsInfo_Kirlia,
+ [EVENT_OBJ_GFX_DUSCLOPS] = &gEventObjectGraphicsInfo_Dusclops,
+ [EVENT_OBJ_GFX_UNION_ROOM_NURSE] = &gEventObjectGraphicsInfo_UnionRoomAttendant,
+ [EVENT_OBJ_GFX_SUDOWOODO] = &gEventObjectGraphicsInfo_Sudowoodo,
+ [EVENT_OBJ_GFX_MEW] = &gEventObjectGraphicsInfo_Mew,
+ [EVENT_OBJ_GFX_RED] = &gEventObjectGraphicsInfo_Red,
+ [EVENT_OBJ_GFX_LEAF] = &gEventObjectGraphicsInfo_Leaf,
+ [EVENT_OBJ_GFX_DEOXYS] = &gEventObjectGraphicsInfo_Deoxys,
+ [EVENT_OBJ_GFX_DEOXYS_TRIANGLE] = &gEventObjectGraphicsInfo_BirthIslandStone,
+ [EVENT_OBJ_GFX_BRANDON] = &gEventObjectGraphicsInfo_Brandon,
+ [EVENT_OBJ_GFX_LINK_RS_BRENDAN] = &gEventObjectGraphicsInfo_RubySapphireBrendan,
+ [EVENT_OBJ_GFX_LINK_RS_MAY] = &gEventObjectGraphicsInfo_RubySapphireMay,
+ [EVENT_OBJ_GFX_LUGIA] = &gEventObjectGraphicsInfo_Lugia,
+ [EVENT_OBJ_GFX_HOOH] = &gEventObjectGraphicsInfo_HoOh,
};
const struct EventObjectGraphicsInfo *const gMauvilleOldManGraphicsInfoPointers[] = {
diff --git a/src/data/graphics/decorations.h b/src/data/graphics/decorations.h
index 62d86d48e..d8b865fcf 100644
--- a/src/data/graphics/decorations.h
+++ b/src/data/graphics/decorations.h
@@ -1,125 +1,125 @@
-const u32 gUnknown_08DB7AA0[] = INCBIN_U32("graphics/decorations/decor_heavy_desk.4bpp.lz");
-const u32 gUnknown_08DB7B34[] = INCBIN_U32("graphics/decorations/decor_heavy_desk.gbapal.lz");
+const u32 gDecorIcon_HeavyDesk[] = INCBIN_U32("graphics/decorations/decor_heavy_desk.4bpp.lz");
+const u32 gDecorIconPalette_HeavyDesk[] = INCBIN_U32("graphics/decorations/decor_heavy_desk.gbapal.lz");
-const u32 gUnknown_08DB7B5C[] = INCBIN_U32("graphics/decorations/decor_ragged_desk.4bpp.lz");
-const u32 gUnknown_08DB7BEC[] = INCBIN_U32("graphics/decorations/decor_ragged_desk.gbapal.lz");
+const u32 gDecorIcon_RaggedDesk[] = INCBIN_U32("graphics/decorations/decor_ragged_desk.4bpp.lz");
+const u32 gDecorIconPalette_RaggedDesk[] = INCBIN_U32("graphics/decorations/decor_ragged_desk.gbapal.lz");
-const u32 gUnknown_08DB7C08[] = INCBIN_U32("graphics/decorations/decor_comfort_desk.4bpp.lz");
-const u32 gUnknown_08DB7CE8[] = INCBIN_U32("graphics/decorations/decor_comfort_desk.gbapal.lz");
+const u32 gDecorIcon_ComfortDesk[] = INCBIN_U32("graphics/decorations/decor_comfort_desk.4bpp.lz");
+const u32 gDecorIconPalette_ComfortDesk[] = INCBIN_U32("graphics/decorations/decor_comfort_desk.gbapal.lz");
-const u32 gUnknown_08DB7D08[] = INCBIN_U32("graphics/decorations/decor_pretty_desk.4bpp.lz");
-const u32 gUnknown_08DB7DCC[] = INCBIN_U32("graphics/decorations/decor_pretty_desk.gbapal.lz");
+const u32 gDecorIcon_PrettyDesk[] = INCBIN_U32("graphics/decorations/decor_pretty_desk.4bpp.lz");
+const u32 gDecorIconPalette_PrettyDesk[] = INCBIN_U32("graphics/decorations/decor_pretty_desk.gbapal.lz");
-const u32 gUnknown_08DB7DF4[] = INCBIN_U32("graphics/decorations/decor_brick_desk.4bpp.lz");
-const u32 gUnknown_08DB7EA0[] = INCBIN_U32("graphics/decorations/decor_brick_desk.gbapal.lz");
+const u32 gDecorIcon_BrickDesk[] = INCBIN_U32("graphics/decorations/decor_brick_desk.4bpp.lz");
+const u32 gDecorIconPalette_BrickDesk[] = INCBIN_U32("graphics/decorations/decor_brick_desk.gbapal.lz");
-const u32 gUnknown_08DB7EC4[] = INCBIN_U32("graphics/decorations/decor_camp_desk.4bpp.lz");
-const u32 gUnknown_08DB7F60[] = INCBIN_U32("graphics/decorations/decor_camp_desk.gbapal.lz");
+const u32 gDecorIcon_CampDesk[] = INCBIN_U32("graphics/decorations/decor_camp_desk.4bpp.lz");
+const u32 gDecorIconPalette_CampDesk[] = INCBIN_U32("graphics/decorations/decor_camp_desk.gbapal.lz");
-const u32 gUnknown_08DB7F7C[] = INCBIN_U32("graphics/decorations/decor_hard_desk.4bpp.lz");
-const u32 gUnknown_08DB8070[] = INCBIN_U32("graphics/decorations/decor_hard_desk.gbapal.lz");
+const u32 gDecorIcon_HardDesk[] = INCBIN_U32("graphics/decorations/decor_hard_desk.4bpp.lz");
+const u32 gDecorIconPalette_HardDesk[] = INCBIN_U32("graphics/decorations/decor_hard_desk.gbapal.lz");
-const u32 gUnknown_08DB808C[] = INCBIN_U32("graphics/decorations/decor_red_plant.4bpp.lz");
-const u32 gUnknown_08DB8138[] = INCBIN_U32("graphics/decorations/decor_red_plant.gbapal.lz");
+const u32 gDecorIcon_RedPlant[] = INCBIN_U32("graphics/decorations/decor_red_plant.4bpp.lz");
+const u32 gDecorIconPalette_RedPlant[] = INCBIN_U32("graphics/decorations/decor_red_plant.gbapal.lz");
-const u32 gUnknown_08DB8160[] = INCBIN_U32("graphics/decorations/decor_tropical_plant.4bpp.lz");
-const u32 gUnknown_08DB8218[] = INCBIN_U32("graphics/decorations/decor_tropical_plant.gbapal.lz");
+const u32 gDecorIcon_TropicalPlant[] = INCBIN_U32("graphics/decorations/decor_tropical_plant.4bpp.lz");
+const u32 gDecorIconPalette_TropicalPlant[] = INCBIN_U32("graphics/decorations/decor_tropical_plant.gbapal.lz");
-const u32 gUnknown_08DB823C[] = INCBIN_U32("graphics/decorations/decor_pretty_flowers.4bpp.lz");
-const u32 gUnknown_08DB8300[] = INCBIN_U32("graphics/decorations/decor_pretty_flowers.gbapal.lz");
+const u32 gDecorIcon_PrettyFlowers[] = INCBIN_U32("graphics/decorations/decor_pretty_flowers.4bpp.lz");
+const u32 gDecorIconPalette_PrettyFlowers[] = INCBIN_U32("graphics/decorations/decor_pretty_flowers.gbapal.lz");
-const u32 gUnknown_08DB8328[] = INCBIN_U32("graphics/decorations/decor_colorful_plant.4bpp.lz");
-const u32 gUnknown_08DB8430[] = INCBIN_U32("graphics/decorations/decor_colorful_plant.gbapal.lz");
+const u32 gDecorIcon_ColorfulPlant[] = INCBIN_U32("graphics/decorations/decor_colorful_plant.4bpp.lz");
+const u32 gDecorIconPalette_ColorfulPlant[] = INCBIN_U32("graphics/decorations/decor_colorful_plant.gbapal.lz");
-const u32 gUnknown_08DB8458[] = INCBIN_U32("graphics/decorations/decor_big_plant.4bpp.lz");
-const u32 gUnknown_08DB8528[] = INCBIN_U32("graphics/decorations/decor_big_plant.gbapal.lz");
+const u32 gDecorIcon_BigPlant[] = INCBIN_U32("graphics/decorations/decor_big_plant.4bpp.lz");
+const u32 gDecorIconPalette_BigPlant[] = INCBIN_U32("graphics/decorations/decor_big_plant.gbapal.lz");
-const u32 gUnknown_08DB854C[] = INCBIN_U32("graphics/decorations/decor_gorgeous_plant.4bpp.lz");
-const u32 gUnknown_08DB862C[] = INCBIN_U32("graphics/decorations/decor_gorgeous_plant.gbapal.lz");
+const u32 gDecorIcon_GorgeousPlant[] = INCBIN_U32("graphics/decorations/decor_gorgeous_plant.4bpp.lz");
+const u32 gDecorIconPalette_GorgeousPlant[] = INCBIN_U32("graphics/decorations/decor_gorgeous_plant.gbapal.lz");
-const u32 gUnknown_08DB8654[] = INCBIN_U32("graphics/decorations/decor_red_brick.4bpp.lz");
-const u32 gUnknown_08DB86C4[] = INCBIN_U32("graphics/decorations/decor_red_brick.gbapal.lz");
+const u32 gDecorIcon_RedBrick[] = INCBIN_U32("graphics/decorations/decor_red_brick.4bpp.lz");
+const u32 gDecorIconPalette_RedBrick[] = INCBIN_U32("graphics/decorations/decor_red_brick.gbapal.lz");
-const u32 gUnknown_08DB86E0[] = INCBIN_U32("graphics/decorations/decor_yellow_brick.4bpp.lz");
-const u32 gUnknown_08DB8750[] = INCBIN_U32("graphics/decorations/decor_yellow_brick.gbapal.lz");
+const u32 gDecorIcon_YellowBrick[] = INCBIN_U32("graphics/decorations/decor_yellow_brick.4bpp.lz");
+const u32 gDecorIconPalette_YellowBrick[] = INCBIN_U32("graphics/decorations/decor_yellow_brick.gbapal.lz");
-const u32 gUnknown_08DB876C[] = INCBIN_U32("graphics/decorations/decor_blue_brick.4bpp.lz");
-const u32 gUnknown_08DB87DC[] = INCBIN_U32("graphics/decorations/decor_blue_brick.gbapal.lz");
+const u32 gDecorIcon_BlueBrick[] = INCBIN_U32("graphics/decorations/decor_blue_brick.4bpp.lz");
+const u32 gDecorIconPalette_BlueBrick[] = INCBIN_U32("graphics/decorations/decor_blue_brick.gbapal.lz");
-const u32 gUnknown_08DB87F8[] = INCBIN_U32("graphics/decorations/decor_red_tent.4bpp.lz");
-const u32 gUnknown_08DB88D8[] = INCBIN_U32("graphics/decorations/decor_red_tent.gbapal.lz");
+const u32 gDecorIcon_RedTent[] = INCBIN_U32("graphics/decorations/decor_red_tent.4bpp.lz");
+const u32 gDecorIconPalette_RedTent[] = INCBIN_U32("graphics/decorations/decor_red_tent.gbapal.lz");
-const u32 gUnknown_08DB8900[] = INCBIN_U32("graphics/decorations/decor_blue_tent.4bpp.lz");
-const u32 gUnknown_08DB89E0[] = INCBIN_U32("graphics/decorations/decor_blue_tent.gbapal.lz");
+const u32 gDecorIcon_BlueTent[] = INCBIN_U32("graphics/decorations/decor_blue_tent.4bpp.lz");
+const u32 gDecorIconPalette_BlueTent[] = INCBIN_U32("graphics/decorations/decor_blue_tent.gbapal.lz");
-const u32 gUnknown_08DB8A08[] = INCBIN_U32("graphics/decorations/decor_solid_board.4bpp.lz");
-const u32 gUnknown_08DB8A68[] = INCBIN_U32("graphics/decorations/decor_solid_board.gbapal.lz");
+const u32 gDecorIcon_SolidBoard[] = INCBIN_U32("graphics/decorations/decor_solid_board.4bpp.lz");
+const u32 gDecorIconPalette_SolidBoard[] = INCBIN_U32("graphics/decorations/decor_solid_board.gbapal.lz");
-const u32 gUnknown_08DB8A84[] = INCBIN_U32("graphics/decorations/decor_slide.4bpp.lz");
-const u32 gUnknown_08DB8B40[] = INCBIN_U32("graphics/decorations/decor_slide.gbapal.lz");
+const u32 gDecorIcon_Slide[] = INCBIN_U32("graphics/decorations/decor_slide.4bpp.lz");
+const u32 gDecorIconPalette_Slide[] = INCBIN_U32("graphics/decorations/decor_slide.gbapal.lz");
-const u32 gUnknown_08DB8B68[] = INCBIN_U32("graphics/decorations/decor_tire.4bpp.lz");
-const u32 gUnknown_08DB8C40[] = INCBIN_U32("graphics/decorations/decor_tire.gbapal.lz");
+const u32 gDecorIcon_Tire[] = INCBIN_U32("graphics/decorations/decor_tire.4bpp.lz");
+const u32 gDecorIconPalette_Tire[] = INCBIN_U32("graphics/decorations/decor_tire.gbapal.lz");
-const u32 gUnknown_08DB8C5C[] = INCBIN_U32("graphics/decorations/decor_stand.4bpp.lz");
-const u32 gUnknown_08DB8CF4[] = INCBIN_U32("graphics/decorations/decor_stand.gbapal.lz");
+const u32 gDecorIcon_Stand[] = INCBIN_U32("graphics/decorations/decor_stand.4bpp.lz");
+const u32 gDecorIconPalette_Stand[] = INCBIN_U32("graphics/decorations/decor_stand.gbapal.lz");
-const u32 gUnknown_08DB8D18[] = INCBIN_U32("graphics/decorations/decor_breakable_door.4bpp.lz");
-const u32 gUnknown_08DB8DB0[] = INCBIN_U32("graphics/decorations/decor_breakable_door.gbapal.lz");
+const u32 gDecorIcon_BreakableDoor[] = INCBIN_U32("graphics/decorations/decor_breakable_door.4bpp.lz");
+const u32 gDecorIconPalette_BreakableDoor[] = INCBIN_U32("graphics/decorations/decor_breakable_door.gbapal.lz");
-const u32 gUnknown_08DB8DD4[] = INCBIN_U32("graphics/decorations/decor_sand_ornament.4bpp.lz");
-const u32 gUnknown_08DB8E80[] = INCBIN_U32("graphics/decorations/decor_sand_ornament.gbapal.lz");
+const u32 gDecorIcon_SandOrnament[] = INCBIN_U32("graphics/decorations/decor_sand_ornament.4bpp.lz");
+const u32 gDecorIconPalette_SandOrnament[] = INCBIN_U32("graphics/decorations/decor_sand_ornament.gbapal.lz");
-const u32 gUnknown_08DB8EA0[] = INCBIN_U32("graphics/decorations/decor_glass_ornament.4bpp.lz");
-const u32 gUnknown_08DB8F58[] = INCBIN_U32("graphics/decorations/decor_glass_ornament.gbapal.lz");
+const u32 gDecorIcon_GlassOrnament[] = INCBIN_U32("graphics/decorations/decor_glass_ornament.4bpp.lz");
+const u32 gDecorIconPalette_GlassOrnament[] = INCBIN_U32("graphics/decorations/decor_glass_ornament.gbapal.lz");
-const u32 gUnknown_08DB8F7C[] = INCBIN_U32("graphics/decorations/decor_surf_mat.4bpp.lz");
-const u32 gUnknown_08DB9038[] = INCBIN_U32("graphics/decorations/decor_surf_mat.gbapal.lz");
+const u32 gDecorIcon_SurfMat[] = INCBIN_U32("graphics/decorations/decor_surf_mat.4bpp.lz");
+const u32 gDecorIconPalette_SurfMat[] = INCBIN_U32("graphics/decorations/decor_surf_mat.gbapal.lz");
-const u32 gUnknown_08DB9058[] = INCBIN_U32("graphics/decorations/decor_thunder_mat.4bpp.lz");
-const u32 gUnknown_08DB9130[] = INCBIN_U32("graphics/decorations/decor_thunder_mat.gbapal.lz");
+const u32 gDecorIcon_ThunderMat[] = INCBIN_U32("graphics/decorations/decor_thunder_mat.4bpp.lz");
+const u32 gDecorIconPalette_ThunderMat[] = INCBIN_U32("graphics/decorations/decor_thunder_mat.gbapal.lz");
-const u32 gUnknown_08DB9154[] = INCBIN_U32("graphics/decorations/decor_fire_blast_mat.4bpp.lz");
-const u32 gUnknown_08DB9218[] = INCBIN_U32("graphics/decorations/decor_fire_blast_mat.gbapal.lz");
+const u32 gDecorIcon_FireBlastMat[] = INCBIN_U32("graphics/decorations/decor_fire_blast_mat.4bpp.lz");
+const u32 gDecorIconPalette_FireBlastMat[] = INCBIN_U32("graphics/decorations/decor_fire_blast_mat.gbapal.lz");
-const u32 gUnknown_08DB9234[] = INCBIN_U32("graphics/decorations/decor_powder_snow_mat.4bpp.lz");
-const u32 gUnknown_08DB92FC[] = INCBIN_U32("graphics/decorations/decor_powder_snow_mat.gbapal.lz");
+const u32 gDecorIcon_PowderSnowMat[] = INCBIN_U32("graphics/decorations/decor_powder_snow_mat.4bpp.lz");
+const u32 gDecorIconPalette_PowderSnowMat[] = INCBIN_U32("graphics/decorations/decor_powder_snow_mat.gbapal.lz");
-const u32 gUnknown_08DB931C[] = INCBIN_U32("graphics/decorations/decor_attract_mat.4bpp.lz");
-const u32 gUnknown_08DB93E8[] = INCBIN_U32("graphics/decorations/decor_attract_mat.gbapal.lz");
+const u32 gDecorIcon_AttractMat[] = INCBIN_U32("graphics/decorations/decor_attract_mat.4bpp.lz");
+const u32 gDecorIconPalette_AttractMat[] = INCBIN_U32("graphics/decorations/decor_attract_mat.gbapal.lz");
-const u32 gUnknown_08DB940C[] = INCBIN_U32("graphics/decorations/decor_fissure_mat.4bpp.lz");
-const u32 gUnknown_08DB94CC[] = INCBIN_U32("graphics/decorations/decor_fissure_mat.gbapal.lz");
+const u32 gDecorIcon_FissureMat[] = INCBIN_U32("graphics/decorations/decor_fissure_mat.4bpp.lz");
+const u32 gDecorIconPalette_FissureMat[] = INCBIN_U32("graphics/decorations/decor_fissure_mat.gbapal.lz");
-const u32 gUnknown_08DB94E8[] = INCBIN_U32("graphics/decorations/decor_spikes_mat.4bpp.lz");
-const u32 gUnknown_08DB95AC[] = INCBIN_U32("graphics/decorations/decor_spikes_mat.gbapal.lz");
+const u32 gDecorIcon_SpikesMat[] = INCBIN_U32("graphics/decorations/decor_spikes_mat.4bpp.lz");
+const u32 gDecorIconPalette_SpikesMat[] = INCBIN_U32("graphics/decorations/decor_spikes_mat.gbapal.lz");
-const u32 gUnknown_08DB95D0[] = INCBIN_U32("graphics/decorations/decor_snorlax_doll.4bpp.lz");
-const u32 gUnknown_08DB96C4[] = INCBIN_U32("graphics/decorations/decor_snorlax_doll.gbapal.lz");
+const u32 gDecorIcon_SnorlaxDoll[] = INCBIN_U32("graphics/decorations/decor_snorlax_doll.4bpp.lz");
+const u32 gDecorIconPalette_SnorlaxDoll[] = INCBIN_U32("graphics/decorations/decor_snorlax_doll.gbapal.lz");
-const u32 gUnknown_08DB96EC[] = INCBIN_U32("graphics/decorations/decor_rhydon_doll.4bpp.lz");
-const u32 gUnknown_08DB97F4[] = INCBIN_U32("graphics/decorations/decor_rhydon_doll.gbapal.lz");
+const u32 gDecorIcon_RhydonDoll[] = INCBIN_U32("graphics/decorations/decor_rhydon_doll.4bpp.lz");
+const u32 gDecorIconPalette_RhydonDoll[] = INCBIN_U32("graphics/decorations/decor_rhydon_doll.gbapal.lz");
-const u32 gUnknown_08DB981C[] = INCBIN_U32("graphics/decorations/decor_lapras_doll.4bpp.lz");
-const u32 gUnknown_08DB9908[] = INCBIN_U32("graphics/decorations/decor_lapras_doll.gbapal.lz");
+const u32 gDecorIcon_LaprasDoll[] = INCBIN_U32("graphics/decorations/decor_lapras_doll.4bpp.lz");
+const u32 gDecorIconPalette_LaprasDoll[] = INCBIN_U32("graphics/decorations/decor_lapras_doll.gbapal.lz");
-const u32 gUnknown_08DB9930[] = INCBIN_U32("graphics/decorations/decor_venusaur_doll.4bpp.lz");
-const u32 gUnknown_08DB9A54[] = INCBIN_U32("graphics/decorations/decor_venusaur_doll.gbapal.lz");
+const u32 gDecorIcon_VenusaurDoll[] = INCBIN_U32("graphics/decorations/decor_venusaur_doll.4bpp.lz");
+const u32 gDecorIconPalette_VenusaurDoll[] = INCBIN_U32("graphics/decorations/decor_venusaur_doll.gbapal.lz");
-const u32 gUnknown_08DB9A7C[] = INCBIN_U32("graphics/decorations/decor_charizard_doll.4bpp.lz");
-const u32 gUnknown_08DB9B7C[] = INCBIN_U32("graphics/decorations/decor_charizard_doll.gbapal.lz");
+const u32 gDecorIcon_CharizardDoll[] = INCBIN_U32("graphics/decorations/decor_charizard_doll.4bpp.lz");
+const u32 gDecorIconPalette_CharizardDoll[] = INCBIN_U32("graphics/decorations/decor_charizard_doll.gbapal.lz");
-const u32 gUnknown_08DB9BA4[] = INCBIN_U32("graphics/decorations/decor_blastoise_doll.4bpp.lz");
-const u32 gUnknown_08DB9CB0[] = INCBIN_U32("graphics/decorations/decor_blastoise_doll.gbapal.lz");
+const u32 gDecorIcon_BlastoiseDoll[] = INCBIN_U32("graphics/decorations/decor_blastoise_doll.4bpp.lz");
+const u32 gDecorIconPalette_BlastoiseDoll[] = INCBIN_U32("graphics/decorations/decor_blastoise_doll.gbapal.lz");
-const u32 gUnknown_08DB9CD8[] = INCBIN_U32("graphics/decorations/decor_wailmer_doll.4bpp.lz");
-const u32 gUnknown_08DB9DAC[] = INCBIN_U32("graphics/decorations/decor_wailmer_doll.gbapal.lz");
+const u32 gDecorIcon_WailmerDoll[] = INCBIN_U32("graphics/decorations/decor_wailmer_doll.4bpp.lz");
+const u32 gDecorIconPalette_WailmerDoll[] = INCBIN_U32("graphics/decorations/decor_wailmer_doll.gbapal.lz");
-const u32 gUnknown_08DB9DD4[] = INCBIN_U32("graphics/decorations/decor_regice_doll.4bpp.lz");
-const u32 gUnknown_08DB9EE4[] = INCBIN_U32("graphics/decorations/decor_regice_doll.gbapal.lz");
+const u32 gDecorIcon_RegiceDoll[] = INCBIN_U32("graphics/decorations/decor_regice_doll.4bpp.lz");
+const u32 gDecorIconPalette_RegiceDoll[] = INCBIN_U32("graphics/decorations/decor_regice_doll.gbapal.lz");
-const u32 gUnknown_08DB9F08[] = INCBIN_U32("graphics/decorations/decor_regirock_doll.4bpp.lz");
-const u32 gUnknown_08DB9FFC[] = INCBIN_U32("graphics/decorations/decor_regirock_doll.gbapal.lz");
+const u32 gDecorIcon_RegirockDoll[] = INCBIN_U32("graphics/decorations/decor_regirock_doll.4bpp.lz");
+const u32 gDecorIconPalette_RegirockDoll[] = INCBIN_U32("graphics/decorations/decor_regirock_doll.gbapal.lz");
-const u32 gUnknown_08DBA020[] = INCBIN_U32("graphics/decorations/decor_registeel_doll.4bpp.lz");
-const u32 gUnknown_08DBA12C[] = INCBIN_U32("graphics/decorations/decor_registeel_doll.gbapal.lz");
+const u32 gDecorIcon_RegisteelDoll[] = INCBIN_U32("graphics/decorations/decor_registeel_doll.4bpp.lz");
+const u32 gDecorIconPalette_RegisteelDoll[] = INCBIN_U32("graphics/decorations/decor_registeel_doll.gbapal.lz");
diff --git a/src/data/lilycove_lady.h b/src/data/lilycove_lady.h
new file mode 100644
index 000000000..f60e527a5
--- /dev/null
+++ b/src/data/lilycove_lady.h
@@ -0,0 +1,470 @@
+#include "constants/easy_chat.h"
+#include "constants/event_objects.h"
+#include "constants/items.h"
+#include "constants/species.h"
+#include "constants/moves.h"
+
+static const u16 sContestLadyMonGfxId[] =
+{
+ EVENT_OBJ_GFX_ZIGZAGOON_1,
+ EVENT_OBJ_GFX_SKITTY,
+ EVENT_OBJ_GFX_POOCHYENA,
+ EVENT_OBJ_GFX_KECLEON_1,
+ EVENT_OBJ_GFX_PIKACHU
+};
+
+static const u16 sLilycoveLadyGfxId[] =
+{
+ EVENT_OBJ_GFX_WOMAN_4,
+ EVENT_OBJ_GFX_WOMAN_2,
+ EVENT_OBJ_GFX_GIRL_2
+};
+
+// Quiz Lady data
+static const u16 sQuizLadyQuestion1[] =
+{
+ EC_WORD_WHICH,
+ EC_WORD_STORES,
+ EC_WORD_INFORMATION,
+ EC_WORD_ON,
+ EC_WORD_POKEMON,
+ EC_WORD_QUES,
+ EC_WORD_CAMERA,
+ EC_WORD_POKEDEX,
+ EC_WORD_POKENAV
+};
+
+static const u16 sQuizLadyQuestion2[] =
+{
+ EC_WORD_WHICH,
+ EC_WORD_ISN_T,
+ EC_WORD_A,
+ EC_WORD_GAME,
+ EC_WORD_VERSION,
+ EC_WORD_QUES,
+ EC_WORD_RUBY,
+ EC_WORD_SAPPHIRE,
+ EC_WORD_DARK
+};
+
+static const u16 sQuizLadyQuestion3[] =
+{
+ EC_WORD_HOW,
+ EC_WORD_DO,
+ EC_WORD_POKEMON,
+ EC_WORD_EVOLVE,
+ EC_WORD_QUES,
+ 0xFFFF,
+ EC_WORD_LEVEL,
+ EC_WORD_INSOMNIA,
+ EC_WORD_CUTE_CHARM
+};
+
+static const u16 sQuizLadyQuestion4[] =
+{
+ EC_WORD_WHICH,
+ EC_WORD_IS,
+ EC_WORD_THE,
+ EC_WORD_PRETTY,
+ EC_WORD_ITEM,
+ EC_WORD_QUES,
+ EC_WORD_COLD,
+ EC_WORD_FLOWERS,
+ EC_WORD_MACHINE
+};
+
+static const u16 sQuizLadyQuestion5[] =
+{
+ EC_WORD_WHICH,
+ EC_WORD_ITEM,
+ EC_WORD_DO,
+ EC_WORD_YOU,
+ EC_WORD_BREAK,
+ EC_WORD_QUES,
+ EC_WORD_EGG,
+ EC_WORD_MAIL,
+ EC_WORD_PHONE
+};
+
+static const u16 sQuizLadyQuestion6[] =
+{
+ EC_WORD_WHICH,
+ EC_WORD_WILL,
+ EC_WORD_STOP,
+ EC_MOVE2(CONFUSION),
+ EC_WORD_QUES,
+ 0xFFFF,
+ EC_WORD_ILLUMINATE,
+ EC_WORD_OWN_TEMPO,
+ EC_WORD_SWIFT_SWIM
+};
+
+static const u16 sQuizLadyQuestion7[] =
+{
+ EC_WORD_WHICH,
+ EC_WORD_OF,
+ EC_WORD_THESE,
+ EC_WORD_IS,
+ EC_WORD_MUSIC,
+ EC_WORD_QUES,
+ EC_WORD_FLYING,
+ EC_WORD_STEEL,
+ EC_WORD_ROCK
+};
+
+static const u16 sQuizLadyQuestion8[] =
+{
+ EC_WORD_WHICH,
+ EC_WORD_WILL,
+ EC_MOVE2(BLOCK),
+ EC_WORD_ESCAPE,
+ EC_WORD_QUES,
+ 0xFFFF,
+ EC_WORD_RUN_AWAY,
+ EC_WORD_SHADOW_TAG,
+ EC_WORD_WONDER_GUARD
+};
+
+static const u16 sQuizLadyQuestion9[] =
+{
+ EC_WORD_WHICH,
+ EC_WORD_WILL,
+ EC_WORD_STOP,
+ EC_WORD_POISON,
+ EC_WORD_QUES,
+ 0xFFFF,
+ EC_WORD_GUTS,
+ EC_WORD_IMMUNITY,
+ EC_WORD_SHED_SKIN
+};
+
+static const u16 sQuizLadyQuestion10[] =
+{
+ EC_WORD_WHICH,
+ EC_WORD_GOES,
+ EC_WORD_WITH,
+ EC_WORD_CENTER,
+ EC_WORD_QUES,
+ 0xFFFF,
+ EC_WORD_POKEDEX,
+ EC_WORD_POKEMON,
+ EC_WORD_POKENAV
+};
+
+static const u16 sQuizLadyQuestion11[] =
+{
+ EC_WORD_WHICH,
+ EC_WORD_STORES,
+ EC_WORD_YOUR,
+ EC_WORD_POKEMON,
+ EC_WORD_QUES,
+ 0xFFFF,
+ EC_WORD_PC,
+ EC_WORD_DEPT_STORE,
+ EC_WORD_TELEVISION
+};
+
+static const u16 sQuizLadyQuestion12[] =
+{
+ EC_WORD_WHICH,
+ EC_WORD_MACHINE,
+ EC_WORD_GIVES,
+ EC_WORD_YOU,
+ EC_WORD_INFORMATION,
+ EC_WORD_QUES,
+ EC_WORD_BIKE,
+ EC_WORD_LOCOMOTIVE,
+ EC_WORD_TELEVISION
+};
+
+static const u16 sQuizLadyQuestion13[] =
+{
+ EC_WORD_A,
+ EC_WORD_POKEMON,
+ EC_WORD_WAS,
+ EC_WORD_ONCE,
+ EC_WORD_THIS,
+ EC_WORD_QUES,
+ EC_WORD_PHONE,
+ EC_WORD_PLUSH_DOLL,
+ EC_WORD_LETTER
+};
+
+static const u16 sQuizLadyQuestion14[] =
+{
+ EC_WORD_STEEL,
+ EC_WORD_IS,
+ EC_WORD_STRONG,
+ EC_WORD_VERSUS,
+ EC_WORD_WHICH,
+ EC_WORD_QUES,
+ EC_WORD_ICE,
+ EC_WORD_GROUND,
+ 0xFFFF
+};
+
+static const u16 sQuizLadyQuestion15[] =
+{
+ EC_WORD_DARK,
+ EC_WORD_IS,
+ EC_WORD_WEAK,
+ EC_WORD_VERSUS,
+ EC_WORD_WHICH,
+ EC_WORD_QUES,
+ EC_WORD_PSYCHIC,
+ EC_WORD_FIGHTING,
+ 0xFFFF
+};
+
+static const u16 sQuizLadyQuestion16[] =
+{
+ EC_WORD_GHOST,
+ EC_WORD_IS,
+ EC_WORD_WEAK,
+ EC_WORD_VERSUS,
+ EC_WORD_WHICH,
+ EC_WORD_QUES,
+ EC_WORD_NORMAL,
+ EC_WORD_DARK,
+ 0xFFFF
+};
+
+static const u16 *const sQuizLadyQuizQuestions[] =
+{
+ sQuizLadyQuestion1,
+ sQuizLadyQuestion2,
+ sQuizLadyQuestion3,
+ sQuizLadyQuestion4,
+ sQuizLadyQuestion5,
+ sQuizLadyQuestion6,
+ sQuizLadyQuestion7,
+ sQuizLadyQuestion8,
+ sQuizLadyQuestion9,
+ sQuizLadyQuestion10,
+ sQuizLadyQuestion11,
+ sQuizLadyQuestion12,
+ sQuizLadyQuestion13,
+ sQuizLadyQuestion14,
+ sQuizLadyQuestion15,
+ sQuizLadyQuestion16
+};
+
+static const u16 sQuizLadyQuizAnswers[] =
+{
+ EC_WORD_POKEDEX,
+ EC_WORD_DARK,
+ EC_WORD_LEVEL,
+ EC_WORD_FLOWERS,
+ EC_WORD_EGG,
+ EC_WORD_OWN_TEMPO,
+ EC_WORD_ROCK,
+ EC_WORD_SHADOW_TAG,
+ EC_WORD_IMMUNITY,
+ EC_WORD_POKEMON,
+ EC_WORD_PC,
+ EC_WORD_TELEVISION,
+ EC_WORD_PLUSH_DOLL,
+ EC_WORD_ICE,
+ EC_WORD_FIGHTING,
+ EC_WORD_DARK
+};
+
+static const u16 sQuizLadyPrizes[] =
+{
+ ITEM_GLITTER_MAIL,
+ ITEM_BEAD_MAIL,
+ ITEM_TROPIC_MAIL,
+ ITEM_MAX_ETHER,
+ ITEM_MAX_ETHER,
+ ITEM_MAX_ETHER,
+ ITEM_WATMEL_BERRY,
+ ITEM_BELUE_BERRY,
+ ITEM_DURIN_BERRY,
+ ITEM_LUXURY_BALL,
+ ITEM_TM15_HYPER_BEAM,
+ ITEM_BIG_PEARL,
+ ITEM_STAR_PIECE,
+ ITEM_RARE_CANDY,
+ ITEM_RARE_CANDY,
+ ITEM_PREMIER_BALL
+};
+
+// Favor Lady data
+static const u8 *const sFavorLadyRequests[] =
+{
+ gText_FavorLady_Slippery,
+ gText_FavorLady_Roundish,
+ gText_FavorLady_Whamish,
+ gText_FavorLady_Shiny,
+ gText_FavorLady_Sticky,
+ gText_FavorLady_Pointy
+};
+
+static const u16 sFavorLadyAcceptedItems_Slippery[] =
+{
+ ITEM_REPEL,
+ ITEM_SUPER_REPEL,
+ ITEM_MAX_REPEL,
+ ITEM_ANTIDOTE,
+ ITEM_PARALYZE_HEAL,
+ ITEM_BURN_HEAL,
+ ITEM_BELUE_BERRY,
+ ITEM_AWAKENING,
+ ITEM_ICE_HEAL,
+ ITEM_REVIVE,
+ ITEM_MAX_REVIVE,
+ ITEM_ENERGY_POWDER,
+ ITEM_NONE
+};
+
+static const u16 sFavorLadyAcceptedItems_Roundish[] =
+{
+ ITEM_FLUFFY_TAIL,
+ ITEM_PEARL,
+ ITEM_BIG_PEARL,
+ ITEM_HARD_STONE,
+ ITEM_SMOKE_BALL,
+ ITEM_SHOAL_SHELL,
+ ITEM_TINY_MUSHROOM,
+ ITEM_BIG_MUSHROOM,
+ ITEM_PECHA_BERRY,
+ ITEM_ASPEAR_BERRY,
+ ITEM_ORAN_BERRY,
+ ITEM_GREPA_BERRY,
+ ITEM_MAGOST_BERRY,
+ ITEM_WATMEL_BERRY,
+ ITEM_POKE_BALL,
+ ITEM_ULTRA_BALL,
+ ITEM_NONE
+};
+
+static const u16 sFavorLadyAcceptedItems_Whamish[] =
+{
+ ITEM_REVIVAL_HERB,
+ ITEM_POTION,
+ ITEM_FRESH_WATER,
+ ITEM_SODA_POP,
+ ITEM_LEMONADE,
+ ITEM_HARD_STONE,
+ ITEM_LIGHT_BALL,
+ ITEM_LAVA_COOKIE,
+ ITEM_CHESTO_BERRY,
+ ITEM_NANAB_BERRY,
+ ITEM_WEPEAR_BERRY,
+ ITEM_KELPSY_BERRY,
+ ITEM_NOMEL_BERRY,
+ ITEM_DURIN_BERRY,
+ ITEM_NONE
+};
+
+static const u16 sFavorLadyAcceptedItems_Shiny[] =
+{
+ ITEM_HEAL_POWDER,
+ ITEM_X_SPEED,
+ ITEM_X_ATTACK,
+ ITEM_X_DEFEND,
+ ITEM_BLUE_FLUTE,
+ ITEM_YELLOW_FLUTE,
+ ITEM_RED_FLUTE,
+ ITEM_BLACK_FLUTE,
+ ITEM_WHITE_FLUTE,
+ ITEM_NUGGET,
+ ITEM_SUN_STONE,
+ ITEM_STARDUST,
+ ITEM_STAR_PIECE,
+ ITEM_PEARL,
+ ITEM_BIG_PEARL,
+ ITEM_TWISTED_SPOON,
+ ITEM_SILVER_POWDER,
+ ITEM_BRIGHT_POWDER,
+ ITEM_LUXURY_BALL,
+ ITEM_PREMIER_BALL,
+ ITEM_NONE
+};
+
+static const u16 sFavorLadyAcceptedItems_Sticky[] =
+{
+ ITEM_ENERGY_ROOT,
+ ITEM_FULL_RESTORE,
+ ITEM_MAX_POTION,
+ ITEM_DIRE_HIT,
+ ITEM_X_ACCURACY,
+ ITEM_GUARD_SPEC,
+ ITEM_WATMEL_BERRY,
+ ITEM_LEFTOVERS,
+ ITEM_TINY_MUSHROOM,
+ ITEM_HEART_SCALE,
+ ITEM_NONE
+};
+
+static const u16 sFavorLadyAcceptedItems_Pointy[] =
+{
+ ITEM_QUICK_CLAW,
+ ITEM_POISON_BARB,
+ ITEM_SHARP_BEAK,
+ ITEM_DRAGON_FANG,
+ ITEM_TAMATO_BERRY,
+ ITEM_DURIN_BERRY,
+ ITEM_PETAYA_BERRY,
+ ITEM_SALAC_BERRY,
+ ITEM_STARDUST,
+ ITEM_STAR_PIECE,
+ ITEM_NONE
+};
+
+static const u16 *const sFavorLadyAcceptedItemLists[] =
+{
+ sFavorLadyAcceptedItems_Slippery,
+ sFavorLadyAcceptedItems_Roundish,
+ sFavorLadyAcceptedItems_Whamish,
+ sFavorLadyAcceptedItems_Shiny,
+ sFavorLadyAcceptedItems_Sticky,
+ sFavorLadyAcceptedItems_Pointy
+};
+
+static const u16 sFavorLadyPrizes[] =
+{
+ ITEM_LUXURY_BALL,
+ ITEM_NUGGET,
+ ITEM_PROTEIN,
+ ITEM_HEART_SCALE,
+ ITEM_RARE_CANDY,
+ ITEM_PP_MAX
+};
+
+
+static const u8 *const sContestLadyMonNames[] =
+{
+ gText_ContestLady_Handsome,
+ gText_ContestLady_Vinny,
+ gText_ContestLady_Moreme,
+ gText_ContestLady_Ironhard,
+ gText_ContestLady_Muscle
+};
+
+static const u8 *const sContestLadyCategoryNames[] =
+{
+ gText_ContestLady_Coolness,
+ gText_ContestLady_Beauty,
+ gText_ContestLady_Cuteness,
+ gText_ContestLady_Smartness,
+ gText_ContestLady_Toughness
+};
+
+static const u8 *const sContestNames[] =
+{
+ gText_CoolnessContest,
+ gText_BeautyContest,
+ gText_CutenessContest,
+ gText_SmartnessContest,
+ gText_ToughnessContest
+};
+
+static const u16 sContestLadyMonSpecies[] =
+{
+ SPECIES_ZIGZAGOON,
+ SPECIES_SKITTY,
+ SPECIES_POOCHYENA,
+ SPECIES_KECLEON,
+ SPECIES_PIKACHU
+};
diff --git a/src/data/pokemon/tutor_learnsets.h b/src/data/pokemon/tutor_learnsets.h
index 27fb40621..2c8c3b362 100644
--- a/src/data/pokemon/tutor_learnsets.h
+++ b/src/data/pokemon/tutor_learnsets.h
@@ -1,35 +1,4 @@
-#define TUTOR_MOVE_MEGA_PUNCH 0
-#define TUTOR_MOVE_SWORDS_DANCE 1
-#define TUTOR_MOVE_MEGA_KICK 2
-#define TUTOR_MOVE_BODY_SLAM 3
-#define TUTOR_MOVE_DOUBLE_EDGE 4
-#define TUTOR_MOVE_COUNTER 5
-#define TUTOR_MOVE_SEISMIC_TOSS 6
-#define TUTOR_MOVE_MIMIC 7
-#define TUTOR_MOVE_METRONOME 8
-#define TUTOR_MOVE_SOFT_BOILED 9
-#define TUTOR_MOVE_DREAM_EATER 10
-#define TUTOR_MOVE_THUNDER_WAVE 11
-#define TUTOR_MOVE_EXPLOSION 12
-#define TUTOR_MOVE_ROCK_SLIDE 13
-#define TUTOR_MOVE_SUBSTITUTE 14
-#define TUTOR_MOVE_DYNAMIC_PUNCH 15
-#define TUTOR_MOVE_ROLLOUT 16
-#define TUTOR_MOVE_PSYCH_UP 17
-#define TUTOR_MOVE_SNORE 18
-#define TUTOR_MOVE_ICY_WIND 19
-#define TUTOR_MOVE_ENDURE 20
-#define TUTOR_MOVE_MUD_SLAP 21
-#define TUTOR_MOVE_ICE_PUNCH 22
-#define TUTOR_MOVE_SWAGGER 23
-#define TUTOR_MOVE_SLEEP_TALK 24
-#define TUTOR_MOVE_SWIFT 25
-#define TUTOR_MOVE_DEFENSE_CURL 26
-#define TUTOR_MOVE_THUNDER_PUNCH 27
-#define TUTOR_MOVE_FIRE_PUNCH 28
-#define TUTOR_MOVE_FURY_CUTTER 29
-
-const u16 gTutorMoves[] =
+const u16 gTutorMoves[TUTOR_MOVE_COUNT] =
{
[TUTOR_MOVE_MEGA_PUNCH] = MOVE_MEGA_PUNCH,
[TUTOR_MOVE_SWORDS_DANCE] = MOVE_SWORDS_DANCE,
@@ -63,5721 +32,5720 @@ const u16 gTutorMoves[] =
[TUTOR_MOVE_FURY_CUTTER] = MOVE_FURY_CUTTER,
};
-#define TUTOR_LEARNSET(moves) ((u32)(moves))
-#define TUTOR(move) ((u64)1 << (TUTOR_##move))
+#define TUTOR(move) (1u << (TUTOR_##move))
static const u32 sTutorLearnsets[] =
{
- [SPECIES_NONE] = TUTOR_LEARNSET(0),
-
- [SPECIES_BULBASAUR] = TUTOR_LEARNSET(TUTOR(MOVE_SWORDS_DANCE)
- | TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_DEFENSE_CURL)
- | TUTOR(MOVE_FURY_CUTTER)),
-
- [SPECIES_IVYSAUR] = TUTOR_LEARNSET(TUTOR(MOVE_SWORDS_DANCE)
- | TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_DEFENSE_CURL)
- | TUTOR(MOVE_FURY_CUTTER)),
-
- [SPECIES_VENUSAUR] = TUTOR_LEARNSET(TUTOR(MOVE_SWORDS_DANCE)
- | TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_DEFENSE_CURL)
- | TUTOR(MOVE_FURY_CUTTER)),
-
- [SPECIES_CHARMANDER] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_PUNCH)
- | TUTOR(MOVE_SWORDS_DANCE)
- | TUTOR(MOVE_MEGA_KICK)
- | TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_COUNTER)
- | TUTOR(MOVE_SEISMIC_TOSS)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_ROCK_SLIDE)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_DYNAMIC_PUNCH)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_SWIFT)
- | TUTOR(MOVE_DEFENSE_CURL)
- | TUTOR(MOVE_FIRE_PUNCH)
- | TUTOR(MOVE_FURY_CUTTER)),
-
- [SPECIES_CHARMELEON] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_PUNCH)
- | TUTOR(MOVE_SWORDS_DANCE)
- | TUTOR(MOVE_MEGA_KICK)
- | TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_COUNTER)
- | TUTOR(MOVE_SEISMIC_TOSS)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_ROCK_SLIDE)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_DYNAMIC_PUNCH)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_SWIFT)
- | TUTOR(MOVE_DEFENSE_CURL)
- | TUTOR(MOVE_FIRE_PUNCH)
- | TUTOR(MOVE_FURY_CUTTER)),
-
- [SPECIES_CHARIZARD] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_PUNCH)
- | TUTOR(MOVE_SWORDS_DANCE)
- | TUTOR(MOVE_MEGA_KICK)
- | TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_COUNTER)
- | TUTOR(MOVE_SEISMIC_TOSS)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_ROCK_SLIDE)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_DYNAMIC_PUNCH)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_SWIFT)
- | TUTOR(MOVE_DEFENSE_CURL)
- | TUTOR(MOVE_FIRE_PUNCH)
- | TUTOR(MOVE_FURY_CUTTER)),
-
- [SPECIES_SQUIRTLE] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_PUNCH)
- | TUTOR(MOVE_MEGA_KICK)
- | TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_COUNTER)
- | TUTOR(MOVE_SEISMIC_TOSS)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_DYNAMIC_PUNCH)
- | TUTOR(MOVE_ROLLOUT)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ICY_WIND)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_ICE_PUNCH)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_DEFENSE_CURL)),
-
- [SPECIES_WARTORTLE] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_PUNCH)
- | TUTOR(MOVE_MEGA_KICK)
- | TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_COUNTER)
- | TUTOR(MOVE_SEISMIC_TOSS)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_DYNAMIC_PUNCH)
- | TUTOR(MOVE_ROLLOUT)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ICY_WIND)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_ICE_PUNCH)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_DEFENSE_CURL)),
-
- [SPECIES_BLASTOISE] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_PUNCH)
- | TUTOR(MOVE_MEGA_KICK)
- | TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_COUNTER)
- | TUTOR(MOVE_SEISMIC_TOSS)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_DYNAMIC_PUNCH)
- | TUTOR(MOVE_ROLLOUT)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ICY_WIND)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_ICE_PUNCH)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_DEFENSE_CURL)),
-
- [SPECIES_CATERPIE] = TUTOR_LEARNSET(0),
-
- [SPECIES_METAPOD] = TUTOR_LEARNSET(0),
-
- [SPECIES_BUTTERFREE] = TUTOR_LEARNSET(TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_DREAM_EATER)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_SWIFT)),
-
- [SPECIES_WEEDLE] = TUTOR_LEARNSET(0),
-
- [SPECIES_KAKUNA] = TUTOR_LEARNSET(0),
-
- [SPECIES_BEEDRILL] = TUTOR_LEARNSET(TUTOR(MOVE_SWORDS_DANCE)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_SWIFT)
- | TUTOR(MOVE_FURY_CUTTER)),
-
- [SPECIES_PIDGEY] = TUTOR_LEARNSET(TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_SWIFT)),
-
- [SPECIES_PIDGEOTTO] = TUTOR_LEARNSET(TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_SWIFT)),
-
- [SPECIES_PIDGEOT] = TUTOR_LEARNSET(TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_SWIFT)),
-
- [SPECIES_RATTATA] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_COUNTER)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_THUNDER_WAVE)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ICY_WIND)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_SWIFT)
- | TUTOR(MOVE_DEFENSE_CURL)),
-
- [SPECIES_RATICATE] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_COUNTER)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_THUNDER_WAVE)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ICY_WIND)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_SWIFT)
- | TUTOR(MOVE_DEFENSE_CURL)),
-
- [SPECIES_SPEAROW] = TUTOR_LEARNSET(TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_SWIFT)),
-
- [SPECIES_FEAROW] = TUTOR_LEARNSET(TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_SWIFT)),
-
- [SPECIES_EKANS] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_ROCK_SLIDE)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)),
-
- [SPECIES_ARBOK] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_ROCK_SLIDE)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)),
-
- [SPECIES_PIKACHU] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_PUNCH)
- | TUTOR(MOVE_MEGA_KICK)
- | TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_COUNTER)
- | TUTOR(MOVE_SEISMIC_TOSS)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_THUNDER_WAVE)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_DYNAMIC_PUNCH)
- | TUTOR(MOVE_ROLLOUT)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_SWIFT)
- | TUTOR(MOVE_DEFENSE_CURL)
- | TUTOR(MOVE_THUNDER_PUNCH)),
-
- [SPECIES_RAICHU] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_PUNCH)
- | TUTOR(MOVE_MEGA_KICK)
- | TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_COUNTER)
- | TUTOR(MOVE_SEISMIC_TOSS)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_THUNDER_WAVE)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_DYNAMIC_PUNCH)
- | TUTOR(MOVE_ROLLOUT)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_SWIFT)
- | TUTOR(MOVE_DEFENSE_CURL)
- | TUTOR(MOVE_THUNDER_PUNCH)),
-
- [SPECIES_SANDSHREW] = TUTOR_LEARNSET(TUTOR(MOVE_SWORDS_DANCE)
- | TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_COUNTER)
- | TUTOR(MOVE_SEISMIC_TOSS)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_ROCK_SLIDE)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_DYNAMIC_PUNCH)
- | TUTOR(MOVE_ROLLOUT)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_SWIFT)
- | TUTOR(MOVE_DEFENSE_CURL)
- | TUTOR(MOVE_FURY_CUTTER)),
-
- [SPECIES_SANDSLASH] = TUTOR_LEARNSET(TUTOR(MOVE_SWORDS_DANCE)
- | TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_COUNTER)
- | TUTOR(MOVE_SEISMIC_TOSS)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_ROCK_SLIDE)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_DYNAMIC_PUNCH)
- | TUTOR(MOVE_ROLLOUT)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_SWIFT)
- | TUTOR(MOVE_DEFENSE_CURL)
- | TUTOR(MOVE_FURY_CUTTER)),
-
- [SPECIES_NIDORAN_F] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_COUNTER)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_DEFENSE_CURL)),
-
- [SPECIES_NIDORINA] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_COUNTER)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_DEFENSE_CURL)),
-
- [SPECIES_NIDOQUEEN] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_PUNCH)
- | TUTOR(MOVE_MEGA_KICK)
- | TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_COUNTER)
- | TUTOR(MOVE_SEISMIC_TOSS)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_ROCK_SLIDE)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_DYNAMIC_PUNCH)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ICY_WIND)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_ICE_PUNCH)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_DEFENSE_CURL)
- | TUTOR(MOVE_THUNDER_PUNCH)
- | TUTOR(MOVE_FIRE_PUNCH)
- | TUTOR(MOVE_FURY_CUTTER)),
-
- [SPECIES_NIDORAN_M] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_COUNTER)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_DEFENSE_CURL)),
-
- [SPECIES_NIDORINO] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_COUNTER)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_DEFENSE_CURL)),
-
- [SPECIES_NIDOKING] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_PUNCH)
- | TUTOR(MOVE_MEGA_KICK)
- | TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_COUNTER)
- | TUTOR(MOVE_SEISMIC_TOSS)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_ROCK_SLIDE)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_DYNAMIC_PUNCH)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ICY_WIND)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_ICE_PUNCH)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_DEFENSE_CURL)
- | TUTOR(MOVE_THUNDER_PUNCH)
- | TUTOR(MOVE_FIRE_PUNCH)
- | TUTOR(MOVE_FURY_CUTTER)),
-
- [SPECIES_CLEFAIRY] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_PUNCH)
- | TUTOR(MOVE_MEGA_KICK)
- | TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_COUNTER)
- | TUTOR(MOVE_SEISMIC_TOSS)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_METRONOME)
- | TUTOR(MOVE_SOFT_BOILED)
- | TUTOR(MOVE_DREAM_EATER)
- | TUTOR(MOVE_THUNDER_WAVE)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_DYNAMIC_PUNCH)
- | TUTOR(MOVE_ROLLOUT)
- | TUTOR(MOVE_PSYCH_UP)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_ICE_PUNCH)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_DEFENSE_CURL)
- | TUTOR(MOVE_THUNDER_PUNCH)
- | TUTOR(MOVE_FIRE_PUNCH)),
-
- [SPECIES_CLEFABLE] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_PUNCH)
- | TUTOR(MOVE_MEGA_KICK)
- | TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_COUNTER)
- | TUTOR(MOVE_SEISMIC_TOSS)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_METRONOME)
- | TUTOR(MOVE_SOFT_BOILED)
- | TUTOR(MOVE_DREAM_EATER)
- | TUTOR(MOVE_THUNDER_WAVE)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_DYNAMIC_PUNCH)
- | TUTOR(MOVE_ROLLOUT)
- | TUTOR(MOVE_PSYCH_UP)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_ICE_PUNCH)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_DEFENSE_CURL)
- | TUTOR(MOVE_THUNDER_PUNCH)
- | TUTOR(MOVE_FIRE_PUNCH)),
-
- [SPECIES_VULPIX] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_SWIFT)),
-
- [SPECIES_NINETALES] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_SWIFT)),
-
- [SPECIES_JIGGLYPUFF] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_PUNCH)
- | TUTOR(MOVE_MEGA_KICK)
- | TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_COUNTER)
- | TUTOR(MOVE_SEISMIC_TOSS)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_DREAM_EATER)
- | TUTOR(MOVE_THUNDER_WAVE)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_DYNAMIC_PUNCH)
- | TUTOR(MOVE_ROLLOUT)
- | TUTOR(MOVE_PSYCH_UP)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_ICE_PUNCH)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_DEFENSE_CURL)
- | TUTOR(MOVE_THUNDER_PUNCH)
- | TUTOR(MOVE_FIRE_PUNCH)),
-
- [SPECIES_WIGGLYTUFF] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_PUNCH)
- | TUTOR(MOVE_MEGA_KICK)
- | TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_COUNTER)
- | TUTOR(MOVE_SEISMIC_TOSS)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_DREAM_EATER)
- | TUTOR(MOVE_THUNDER_WAVE)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_DYNAMIC_PUNCH)
- | TUTOR(MOVE_ROLLOUT)
- | TUTOR(MOVE_PSYCH_UP)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_ICE_PUNCH)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_DEFENSE_CURL)
- | TUTOR(MOVE_THUNDER_PUNCH)
- | TUTOR(MOVE_FIRE_PUNCH)),
-
- [SPECIES_ZUBAT] = TUTOR_LEARNSET(TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_SWIFT)),
-
- [SPECIES_GOLBAT] = TUTOR_LEARNSET(TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_SWIFT)),
-
- [SPECIES_ODDISH] = TUTOR_LEARNSET(TUTOR(MOVE_SWORDS_DANCE)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)),
-
- [SPECIES_GLOOM] = TUTOR_LEARNSET(TUTOR(MOVE_SWORDS_DANCE)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)),
-
- [SPECIES_VILEPLUME] = TUTOR_LEARNSET(TUTOR(MOVE_SWORDS_DANCE)
- | TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)),
-
- [SPECIES_PARAS] = TUTOR_LEARNSET(TUTOR(MOVE_SWORDS_DANCE)
- | TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_COUNTER)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_FURY_CUTTER)),
-
- [SPECIES_PARASECT] = TUTOR_LEARNSET(TUTOR(MOVE_SWORDS_DANCE)
- | TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_COUNTER)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_FURY_CUTTER)),
-
- [SPECIES_VENONAT] = TUTOR_LEARNSET(TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_SWIFT)),
-
- [SPECIES_VENOMOTH] = TUTOR_LEARNSET(TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_SWIFT)),
-
- [SPECIES_DIGLETT] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_ROCK_SLIDE)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)),
-
- [SPECIES_DUGTRIO] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_ROCK_SLIDE)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)),
-
- [SPECIES_MEOWTH] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_DREAM_EATER)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_PSYCH_UP)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ICY_WIND)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_SWIFT)
- | TUTOR(MOVE_DEFENSE_CURL)),
-
- [SPECIES_PERSIAN] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_DREAM_EATER)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_PSYCH_UP)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ICY_WIND)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_SWIFT)
- | TUTOR(MOVE_DEFENSE_CURL)),
-
- [SPECIES_PSYDUCK] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_PUNCH)
- | TUTOR(MOVE_MEGA_KICK)
- | TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_COUNTER)
- | TUTOR(MOVE_SEISMIC_TOSS)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_DYNAMIC_PUNCH)
- | TUTOR(MOVE_PSYCH_UP)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ICY_WIND)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_ICE_PUNCH)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_SWIFT)),
-
- [SPECIES_GOLDUCK] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_PUNCH)
- | TUTOR(MOVE_MEGA_KICK)
- | TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_COUNTER)
- | TUTOR(MOVE_SEISMIC_TOSS)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_DYNAMIC_PUNCH)
- | TUTOR(MOVE_PSYCH_UP)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ICY_WIND)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_ICE_PUNCH)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_SWIFT)
- | TUTOR(MOVE_FURY_CUTTER)),
-
- [SPECIES_MANKEY] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_PUNCH)
- | TUTOR(MOVE_MEGA_KICK)
- | TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_COUNTER)
- | TUTOR(MOVE_SEISMIC_TOSS)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_METRONOME)
- | TUTOR(MOVE_ROCK_SLIDE)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_DYNAMIC_PUNCH)
- | TUTOR(MOVE_PSYCH_UP)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_ICE_PUNCH)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_SWIFT)
- | TUTOR(MOVE_DEFENSE_CURL)
- | TUTOR(MOVE_THUNDER_PUNCH)
- | TUTOR(MOVE_FIRE_PUNCH)),
-
- [SPECIES_PRIMEAPE] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_PUNCH)
- | TUTOR(MOVE_MEGA_KICK)
- | TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_COUNTER)
- | TUTOR(MOVE_SEISMIC_TOSS)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_METRONOME)
- | TUTOR(MOVE_ROCK_SLIDE)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_DYNAMIC_PUNCH)
- | TUTOR(MOVE_PSYCH_UP)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_ICE_PUNCH)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_SWIFT)
- | TUTOR(MOVE_DEFENSE_CURL)
- | TUTOR(MOVE_THUNDER_PUNCH)
- | TUTOR(MOVE_FIRE_PUNCH)),
-
- [SPECIES_GROWLITHE] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_SWIFT)),
-
- [SPECIES_ARCANINE] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_SWIFT)),
-
- [SPECIES_POLIWAG] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ICY_WIND)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_DEFENSE_CURL)),
-
- [SPECIES_POLIWHIRL] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_PUNCH)
- | TUTOR(MOVE_MEGA_KICK)
- | TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_COUNTER)
- | TUTOR(MOVE_SEISMIC_TOSS)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_METRONOME)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ICY_WIND)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_ICE_PUNCH)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_DEFENSE_CURL)),
-
- [SPECIES_POLIWRATH] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_PUNCH)
- | TUTOR(MOVE_MEGA_KICK)
- | TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_COUNTER)
- | TUTOR(MOVE_SEISMIC_TOSS)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_METRONOME)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_DYNAMIC_PUNCH)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ICY_WIND)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_ICE_PUNCH)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_DEFENSE_CURL)),
-
- [SPECIES_ABRA] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_PUNCH)
- | TUTOR(MOVE_MEGA_KICK)
- | TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_COUNTER)
- | TUTOR(MOVE_SEISMIC_TOSS)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_METRONOME)
- | TUTOR(MOVE_DREAM_EATER)
- | TUTOR(MOVE_THUNDER_WAVE)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_DYNAMIC_PUNCH)
- | TUTOR(MOVE_PSYCH_UP)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_ICE_PUNCH)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_THUNDER_PUNCH)
- | TUTOR(MOVE_FIRE_PUNCH)),
-
- [SPECIES_KADABRA] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_PUNCH)
- | TUTOR(MOVE_MEGA_KICK)
- | TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_COUNTER)
- | TUTOR(MOVE_SEISMIC_TOSS)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_METRONOME)
- | TUTOR(MOVE_DREAM_EATER)
- | TUTOR(MOVE_THUNDER_WAVE)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_DYNAMIC_PUNCH)
- | TUTOR(MOVE_PSYCH_UP)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_ICE_PUNCH)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_THUNDER_PUNCH)
- | TUTOR(MOVE_FIRE_PUNCH)),
-
- [SPECIES_ALAKAZAM] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_PUNCH)
- | TUTOR(MOVE_MEGA_KICK)
- | TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_COUNTER)
- | TUTOR(MOVE_SEISMIC_TOSS)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_METRONOME)
- | TUTOR(MOVE_DREAM_EATER)
- | TUTOR(MOVE_THUNDER_WAVE)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_DYNAMIC_PUNCH)
- | TUTOR(MOVE_PSYCH_UP)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_ICE_PUNCH)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_THUNDER_PUNCH)
- | TUTOR(MOVE_FIRE_PUNCH)),
-
- [SPECIES_MACHOP] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_PUNCH)
- | TUTOR(MOVE_MEGA_KICK)
- | TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_COUNTER)
- | TUTOR(MOVE_SEISMIC_TOSS)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_METRONOME)
- | TUTOR(MOVE_ROCK_SLIDE)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_DYNAMIC_PUNCH)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_ICE_PUNCH)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_THUNDER_PUNCH)
- | TUTOR(MOVE_FIRE_PUNCH)),
-
- [SPECIES_MACHOKE] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_PUNCH)
- | TUTOR(MOVE_MEGA_KICK)
- | TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_COUNTER)
- | TUTOR(MOVE_SEISMIC_TOSS)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_METRONOME)
- | TUTOR(MOVE_ROCK_SLIDE)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_DYNAMIC_PUNCH)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_ICE_PUNCH)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_THUNDER_PUNCH)
- | TUTOR(MOVE_FIRE_PUNCH)),
-
- [SPECIES_MACHAMP] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_PUNCH)
- | TUTOR(MOVE_MEGA_KICK)
- | TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_COUNTER)
- | TUTOR(MOVE_SEISMIC_TOSS)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_METRONOME)
- | TUTOR(MOVE_ROCK_SLIDE)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_DYNAMIC_PUNCH)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_ICE_PUNCH)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_THUNDER_PUNCH)
- | TUTOR(MOVE_FIRE_PUNCH)),
-
- [SPECIES_BELLSPROUT] = TUTOR_LEARNSET(TUTOR(MOVE_SWORDS_DANCE)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)),
-
- [SPECIES_WEEPINBELL] = TUTOR_LEARNSET(TUTOR(MOVE_SWORDS_DANCE)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)),
-
- [SPECIES_VICTREEBEL] = TUTOR_LEARNSET(TUTOR(MOVE_SWORDS_DANCE)
- | TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)),
-
- [SPECIES_TENTACOOL] = TUTOR_LEARNSET(TUTOR(MOVE_SWORDS_DANCE)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ICY_WIND)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)),
-
- [SPECIES_TENTACRUEL] = TUTOR_LEARNSET(TUTOR(MOVE_SWORDS_DANCE)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ICY_WIND)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)),
-
- [SPECIES_GEODUDE] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_PUNCH)
- | TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_COUNTER)
- | TUTOR(MOVE_SEISMIC_TOSS)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_METRONOME)
- | TUTOR(MOVE_EXPLOSION)
- | TUTOR(MOVE_ROCK_SLIDE)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_DYNAMIC_PUNCH)
- | TUTOR(MOVE_ROLLOUT)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_DEFENSE_CURL)
- | TUTOR(MOVE_FIRE_PUNCH)),
-
- [SPECIES_GRAVELER] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_PUNCH)
- | TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_COUNTER)
- | TUTOR(MOVE_SEISMIC_TOSS)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_METRONOME)
- | TUTOR(MOVE_EXPLOSION)
- | TUTOR(MOVE_ROCK_SLIDE)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_DYNAMIC_PUNCH)
- | TUTOR(MOVE_ROLLOUT)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_DEFENSE_CURL)
- | TUTOR(MOVE_FIRE_PUNCH)),
-
- [SPECIES_GOLEM] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_PUNCH)
- | TUTOR(MOVE_MEGA_KICK)
- | TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_COUNTER)
- | TUTOR(MOVE_SEISMIC_TOSS)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_METRONOME)
- | TUTOR(MOVE_EXPLOSION)
- | TUTOR(MOVE_ROCK_SLIDE)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_DYNAMIC_PUNCH)
- | TUTOR(MOVE_ROLLOUT)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_DEFENSE_CURL)
- | TUTOR(MOVE_FIRE_PUNCH)
- | TUTOR(MOVE_FURY_CUTTER)),
-
- [SPECIES_PONYTA] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_SWIFT)),
-
- [SPECIES_RAPIDASH] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_SWIFT)),
-
- [SPECIES_SLOWPOKE] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_DREAM_EATER)
- | TUTOR(MOVE_THUNDER_WAVE)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_PSYCH_UP)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ICY_WIND)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_SWIFT)),
-
- [SPECIES_SLOWBRO] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_PUNCH)
- | TUTOR(MOVE_MEGA_KICK)
- | TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_COUNTER)
- | TUTOR(MOVE_SEISMIC_TOSS)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_DREAM_EATER)
- | TUTOR(MOVE_THUNDER_WAVE)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_DYNAMIC_PUNCH)
- | TUTOR(MOVE_PSYCH_UP)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ICY_WIND)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_ICE_PUNCH)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_SWIFT)
- | TUTOR(MOVE_FURY_CUTTER)),
-
- [SPECIES_MAGNEMITE] = TUTOR_LEARNSET(TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_THUNDER_WAVE)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_ROLLOUT)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_SWIFT)),
-
- [SPECIES_MAGNETON] = TUTOR_LEARNSET(TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_THUNDER_WAVE)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_ROLLOUT)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_SWIFT)),
-
- [SPECIES_FARFETCHD] = TUTOR_LEARNSET(TUTOR(MOVE_SWORDS_DANCE)
- | TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_PSYCH_UP)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_SWIFT)),
-
- [SPECIES_DODUO] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_SWIFT)),
-
- [SPECIES_DODRIO] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_SWIFT)),
-
- [SPECIES_SEEL] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ICY_WIND)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)),
-
- [SPECIES_DEWGONG] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ICY_WIND)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)),
-
- [SPECIES_GRIMER] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_EXPLOSION)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_DYNAMIC_PUNCH)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_ICE_PUNCH)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_THUNDER_PUNCH)
- | TUTOR(MOVE_FIRE_PUNCH)),
-
- [SPECIES_MUK] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_EXPLOSION)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_DYNAMIC_PUNCH)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_ICE_PUNCH)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_THUNDER_PUNCH)
- | TUTOR(MOVE_FIRE_PUNCH)),
-
- [SPECIES_SHELLDER] = TUTOR_LEARNSET(TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_EXPLOSION)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ICY_WIND)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_SWIFT)),
-
- [SPECIES_CLOYSTER] = TUTOR_LEARNSET(TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_EXPLOSION)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ICY_WIND)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_SWIFT)),
-
- [SPECIES_GASTLY] = TUTOR_LEARNSET(TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_DREAM_EATER)
- | TUTOR(MOVE_EXPLOSION)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_PSYCH_UP)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)),
-
- [SPECIES_HAUNTER] = TUTOR_LEARNSET(TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_DREAM_EATER)
- | TUTOR(MOVE_EXPLOSION)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_PSYCH_UP)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)),
-
- [SPECIES_GENGAR] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_PUNCH)
- | TUTOR(MOVE_MEGA_KICK)
- | TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_COUNTER)
- | TUTOR(MOVE_SEISMIC_TOSS)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_METRONOME)
- | TUTOR(MOVE_DREAM_EATER)
- | TUTOR(MOVE_EXPLOSION)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_DYNAMIC_PUNCH)
- | TUTOR(MOVE_PSYCH_UP)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_ICE_PUNCH)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_THUNDER_PUNCH)
- | TUTOR(MOVE_FIRE_PUNCH)),
-
- [SPECIES_ONIX] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_EXPLOSION)
- | TUTOR(MOVE_ROCK_SLIDE)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_PSYCH_UP)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)),
-
- [SPECIES_DROWZEE] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_PUNCH)
- | TUTOR(MOVE_MEGA_KICK)
- | TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_COUNTER)
- | TUTOR(MOVE_SEISMIC_TOSS)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_METRONOME)
- | TUTOR(MOVE_DREAM_EATER)
- | TUTOR(MOVE_THUNDER_WAVE)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_DYNAMIC_PUNCH)
- | TUTOR(MOVE_PSYCH_UP)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_ICE_PUNCH)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_THUNDER_PUNCH)
- | TUTOR(MOVE_FIRE_PUNCH)),
-
- [SPECIES_HYPNO] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_PUNCH)
- | TUTOR(MOVE_MEGA_KICK)
- | TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_COUNTER)
- | TUTOR(MOVE_SEISMIC_TOSS)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_METRONOME)
- | TUTOR(MOVE_DREAM_EATER)
- | TUTOR(MOVE_THUNDER_WAVE)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_DYNAMIC_PUNCH)
- | TUTOR(MOVE_PSYCH_UP)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_ICE_PUNCH)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_THUNDER_PUNCH)
- | TUTOR(MOVE_FIRE_PUNCH)),
-
- [SPECIES_KRABBY] = TUTOR_LEARNSET(TUTOR(MOVE_SWORDS_DANCE)
- | TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ICY_WIND)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_FURY_CUTTER)),
-
- [SPECIES_KINGLER] = TUTOR_LEARNSET(TUTOR(MOVE_SWORDS_DANCE)
- | TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ICY_WIND)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_FURY_CUTTER)),
-
- [SPECIES_VOLTORB] = TUTOR_LEARNSET(TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_THUNDER_WAVE)
- | TUTOR(MOVE_EXPLOSION)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_ROLLOUT)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_SWIFT)),
-
- [SPECIES_ELECTRODE] = TUTOR_LEARNSET(TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_THUNDER_WAVE)
- | TUTOR(MOVE_EXPLOSION)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_ROLLOUT)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_SWIFT)),
-
- [SPECIES_EXEGGCUTE] = TUTOR_LEARNSET(TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_DREAM_EATER)
- | TUTOR(MOVE_EXPLOSION)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_ROLLOUT)
- | TUTOR(MOVE_PSYCH_UP)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)),
-
- [SPECIES_EXEGGUTOR] = TUTOR_LEARNSET(TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_DREAM_EATER)
- | TUTOR(MOVE_EXPLOSION)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_ROLLOUT)
- | TUTOR(MOVE_PSYCH_UP)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)),
-
- [SPECIES_CUBONE] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_PUNCH)
- | TUTOR(MOVE_SWORDS_DANCE)
- | TUTOR(MOVE_MEGA_KICK)
- | TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_COUNTER)
- | TUTOR(MOVE_SEISMIC_TOSS)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_ROCK_SLIDE)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_DYNAMIC_PUNCH)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ICY_WIND)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_THUNDER_PUNCH)
- | TUTOR(MOVE_FIRE_PUNCH)),
-
- [SPECIES_MAROWAK] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_PUNCH)
- | TUTOR(MOVE_SWORDS_DANCE)
- | TUTOR(MOVE_MEGA_KICK)
- | TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_COUNTER)
- | TUTOR(MOVE_SEISMIC_TOSS)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_ROCK_SLIDE)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_DYNAMIC_PUNCH)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ICY_WIND)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_THUNDER_PUNCH)
- | TUTOR(MOVE_FIRE_PUNCH)),
-
- [SPECIES_HITMONLEE] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_PUNCH)
- | TUTOR(MOVE_MEGA_KICK)
- | TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_COUNTER)
- | TUTOR(MOVE_SEISMIC_TOSS)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_METRONOME)
- | TUTOR(MOVE_ROCK_SLIDE)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_DYNAMIC_PUNCH)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_SWIFT)),
-
- [SPECIES_HITMONCHAN] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_PUNCH)
- | TUTOR(MOVE_MEGA_KICK)
- | TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_COUNTER)
- | TUTOR(MOVE_SEISMIC_TOSS)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_METRONOME)
- | TUTOR(MOVE_ROCK_SLIDE)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_DYNAMIC_PUNCH)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_ICE_PUNCH)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_SWIFT)
- | TUTOR(MOVE_THUNDER_PUNCH)
- | TUTOR(MOVE_FIRE_PUNCH)),
-
- [SPECIES_LICKITUNG] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_PUNCH)
- | TUTOR(MOVE_SWORDS_DANCE)
- | TUTOR(MOVE_MEGA_KICK)
- | TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_COUNTER)
- | TUTOR(MOVE_SEISMIC_TOSS)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_DREAM_EATER)
- | TUTOR(MOVE_ROCK_SLIDE)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_DYNAMIC_PUNCH)
- | TUTOR(MOVE_ROLLOUT)
- | TUTOR(MOVE_PSYCH_UP)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ICY_WIND)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_ICE_PUNCH)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_DEFENSE_CURL)
- | TUTOR(MOVE_THUNDER_PUNCH)
- | TUTOR(MOVE_FIRE_PUNCH)),
-
- [SPECIES_KOFFING] = TUTOR_LEARNSET(TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_EXPLOSION)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_ROLLOUT)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)),
-
- [SPECIES_WEEZING] = TUTOR_LEARNSET(TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_EXPLOSION)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_ROLLOUT)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)),
-
- [SPECIES_RHYHORN] = TUTOR_LEARNSET(TUTOR(MOVE_SWORDS_DANCE)
- | TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_COUNTER)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_ROCK_SLIDE)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_ROLLOUT)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ICY_WIND)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)),
-
- [SPECIES_RHYDON] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_PUNCH)
- | TUTOR(MOVE_SWORDS_DANCE)
- | TUTOR(MOVE_MEGA_KICK)
- | TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_COUNTER)
- | TUTOR(MOVE_SEISMIC_TOSS)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_ROCK_SLIDE)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_DYNAMIC_PUNCH)
- | TUTOR(MOVE_ROLLOUT)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ICY_WIND)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_THUNDER_PUNCH)
- | TUTOR(MOVE_FIRE_PUNCH)
- | TUTOR(MOVE_FURY_CUTTER)),
-
- [SPECIES_CHANSEY] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_PUNCH)
- | TUTOR(MOVE_MEGA_KICK)
- | TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_COUNTER)
- | TUTOR(MOVE_SEISMIC_TOSS)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_METRONOME)
- | TUTOR(MOVE_SOFT_BOILED)
- | TUTOR(MOVE_DREAM_EATER)
- | TUTOR(MOVE_THUNDER_WAVE)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_DYNAMIC_PUNCH)
- | TUTOR(MOVE_ROLLOUT)
- | TUTOR(MOVE_PSYCH_UP)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ICY_WIND)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_DEFENSE_CURL)),
-
- [SPECIES_TANGELA] = TUTOR_LEARNSET(TUTOR(MOVE_SWORDS_DANCE)
- | TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_PSYCH_UP)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)),
-
- [SPECIES_KANGASKHAN] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_PUNCH)
- | TUTOR(MOVE_MEGA_KICK)
- | TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_COUNTER)
- | TUTOR(MOVE_SEISMIC_TOSS)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_ROCK_SLIDE)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_DYNAMIC_PUNCH)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ICY_WIND)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_ICE_PUNCH)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_THUNDER_PUNCH)
- | TUTOR(MOVE_FIRE_PUNCH)
- | TUTOR(MOVE_FURY_CUTTER)),
-
- [SPECIES_HORSEA] = TUTOR_LEARNSET(TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ICY_WIND)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_SWIFT)),
-
- [SPECIES_SEADRA] = TUTOR_LEARNSET(TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ICY_WIND)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_SWIFT)),
-
- [SPECIES_GOLDEEN] = TUTOR_LEARNSET(TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ICY_WIND)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_SWIFT)),
-
- [SPECIES_SEAKING] = TUTOR_LEARNSET(TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ICY_WIND)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_SWIFT)),
-
- [SPECIES_STARYU] = TUTOR_LEARNSET(TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_THUNDER_WAVE)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_PSYCH_UP)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ICY_WIND)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_SWIFT)),
-
- [SPECIES_STARMIE] = TUTOR_LEARNSET(TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_DREAM_EATER)
- | TUTOR(MOVE_THUNDER_WAVE)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_PSYCH_UP)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ICY_WIND)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_SWIFT)),
-
- [SPECIES_MR_MIME] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_PUNCH)
- | TUTOR(MOVE_MEGA_KICK)
- | TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_COUNTER)
- | TUTOR(MOVE_SEISMIC_TOSS)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_METRONOME)
- | TUTOR(MOVE_DREAM_EATER)
- | TUTOR(MOVE_THUNDER_WAVE)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_PSYCH_UP)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_ICE_PUNCH)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_THUNDER_PUNCH)
- | TUTOR(MOVE_FIRE_PUNCH)),
-
- [SPECIES_SCYTHER] = TUTOR_LEARNSET(TUTOR(MOVE_SWORDS_DANCE)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_COUNTER)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_SWIFT)
- | TUTOR(MOVE_FURY_CUTTER)),
-
- [SPECIES_JYNX] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_PUNCH)
- | TUTOR(MOVE_MEGA_KICK)
- | TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_COUNTER)
- | TUTOR(MOVE_SEISMIC_TOSS)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_METRONOME)
- | TUTOR(MOVE_DREAM_EATER)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_DYNAMIC_PUNCH)
- | TUTOR(MOVE_PSYCH_UP)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ICY_WIND)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_ICE_PUNCH)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)),
-
- [SPECIES_ELECTABUZZ] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_PUNCH)
- | TUTOR(MOVE_MEGA_KICK)
- | TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_COUNTER)
- | TUTOR(MOVE_SEISMIC_TOSS)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_THUNDER_WAVE)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_DYNAMIC_PUNCH)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_ICE_PUNCH)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_SWIFT)
- | TUTOR(MOVE_THUNDER_PUNCH)
- | TUTOR(MOVE_FIRE_PUNCH)),
-
- [SPECIES_MAGMAR] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_PUNCH)
- | TUTOR(MOVE_MEGA_KICK)
- | TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_COUNTER)
- | TUTOR(MOVE_SEISMIC_TOSS)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_DYNAMIC_PUNCH)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_THUNDER_PUNCH)
- | TUTOR(MOVE_FIRE_PUNCH)),
-
- [SPECIES_PINSIR] = TUTOR_LEARNSET(TUTOR(MOVE_SWORDS_DANCE)
- | TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_SEISMIC_TOSS)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_ROCK_SLIDE)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_FURY_CUTTER)),
-
- [SPECIES_TAUROS] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ICY_WIND)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)),
-
- [SPECIES_MAGIKARP] = TUTOR_LEARNSET(0),
-
- [SPECIES_GYARADOS] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_THUNDER_WAVE)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ICY_WIND)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)),
-
- [SPECIES_LAPRAS] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_DREAM_EATER)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ICY_WIND)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)),
-
- [SPECIES_DITTO] = TUTOR_LEARNSET(0),
-
- [SPECIES_EEVEE] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_SWIFT)),
-
- [SPECIES_VAPOREON] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ICY_WIND)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_SWIFT)),
-
- [SPECIES_JOLTEON] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_THUNDER_WAVE)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_SWIFT)),
-
- [SPECIES_FLAREON] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_SWIFT)),
-
- [SPECIES_PORYGON] = TUTOR_LEARNSET(TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_DREAM_EATER)
- | TUTOR(MOVE_THUNDER_WAVE)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_PSYCH_UP)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ICY_WIND)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_SWIFT)),
-
- [SPECIES_OMANYTE] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_ROCK_SLIDE)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_ROLLOUT)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ICY_WIND)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)),
-
- [SPECIES_OMASTAR] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_SEISMIC_TOSS)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_ROCK_SLIDE)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_ROLLOUT)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ICY_WIND)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)),
-
- [SPECIES_KABUTO] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_ROCK_SLIDE)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_ROLLOUT)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ICY_WIND)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)),
-
- [SPECIES_KABUTOPS] = TUTOR_LEARNSET(TUTOR(MOVE_SWORDS_DANCE)
- | TUTOR(MOVE_MEGA_KICK)
- | TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_SEISMIC_TOSS)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_ROCK_SLIDE)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_ROLLOUT)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ICY_WIND)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_FURY_CUTTER)),
-
- [SPECIES_AERODACTYL] = TUTOR_LEARNSET(TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_ROCK_SLIDE)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_SWIFT)),
-
- [SPECIES_SNORLAX] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_PUNCH)
- | TUTOR(MOVE_MEGA_KICK)
- | TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_COUNTER)
- | TUTOR(MOVE_SEISMIC_TOSS)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_METRONOME)
- | TUTOR(MOVE_ROCK_SLIDE)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_DYNAMIC_PUNCH)
- | TUTOR(MOVE_ROLLOUT)
- | TUTOR(MOVE_PSYCH_UP)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ICY_WIND)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_ICE_PUNCH)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_DEFENSE_CURL)
- | TUTOR(MOVE_THUNDER_PUNCH)
- | TUTOR(MOVE_FIRE_PUNCH)),
-
- [SPECIES_ARTICUNO] = TUTOR_LEARNSET(TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ICY_WIND)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_SWIFT)),
-
- [SPECIES_ZAPDOS] = TUTOR_LEARNSET(TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_THUNDER_WAVE)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_SWIFT)),
-
- [SPECIES_MOLTRES] = TUTOR_LEARNSET(TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_SWIFT)),
-
- [SPECIES_DRATINI] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_THUNDER_WAVE)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ICY_WIND)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_SWIFT)),
-
- [SPECIES_DRAGONAIR] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_THUNDER_WAVE)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ICY_WIND)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_SWIFT)),
-
- [SPECIES_DRAGONITE] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_THUNDER_WAVE)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_DYNAMIC_PUNCH)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ICY_WIND)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_ICE_PUNCH)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_SWIFT)
- | TUTOR(MOVE_THUNDER_PUNCH)
- | TUTOR(MOVE_FIRE_PUNCH)
- | TUTOR(MOVE_FURY_CUTTER)),
-
- [SPECIES_MEWTWO] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_PUNCH)
- | TUTOR(MOVE_MEGA_KICK)
- | TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_COUNTER)
- | TUTOR(MOVE_SEISMIC_TOSS)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_METRONOME)
- | TUTOR(MOVE_DREAM_EATER)
- | TUTOR(MOVE_THUNDER_WAVE)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_DYNAMIC_PUNCH)
- | TUTOR(MOVE_PSYCH_UP)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ICY_WIND)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_ICE_PUNCH)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_SWIFT)
- | TUTOR(MOVE_THUNDER_PUNCH)
- | TUTOR(MOVE_FIRE_PUNCH)),
-
- [SPECIES_MEW] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_PUNCH)
- | TUTOR(MOVE_SWORDS_DANCE)
- | TUTOR(MOVE_MEGA_KICK)
- | TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_COUNTER)
- | TUTOR(MOVE_SEISMIC_TOSS)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_METRONOME)
- | TUTOR(MOVE_SOFT_BOILED)
- | TUTOR(MOVE_DREAM_EATER)
- | TUTOR(MOVE_THUNDER_WAVE)
- | TUTOR(MOVE_EXPLOSION)
- | TUTOR(MOVE_ROCK_SLIDE)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_DYNAMIC_PUNCH)
- | TUTOR(MOVE_ROLLOUT)
- | TUTOR(MOVE_PSYCH_UP)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ICY_WIND)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_ICE_PUNCH)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_SWIFT)
- | TUTOR(MOVE_DEFENSE_CURL)
- | TUTOR(MOVE_THUNDER_PUNCH)
- | TUTOR(MOVE_FIRE_PUNCH)
- | TUTOR(MOVE_FURY_CUTTER)),
-
- [SPECIES_CHIKORITA] = TUTOR_LEARNSET(TUTOR(MOVE_SWORDS_DANCE)
- | TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_COUNTER)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)),
-
- [SPECIES_BAYLEEF] = TUTOR_LEARNSET(TUTOR(MOVE_SWORDS_DANCE)
- | TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_COUNTER)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_FURY_CUTTER)),
-
- [SPECIES_MEGANIUM] = TUTOR_LEARNSET(TUTOR(MOVE_SWORDS_DANCE)
- | TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_COUNTER)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_FURY_CUTTER)),
-
- [SPECIES_CYNDAQUIL] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_ROLLOUT)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_SWIFT)
- | TUTOR(MOVE_DEFENSE_CURL)),
-
- [SPECIES_QUILAVA] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_ROLLOUT)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_SWIFT)
- | TUTOR(MOVE_DEFENSE_CURL)
- | TUTOR(MOVE_FURY_CUTTER)),
-
- [SPECIES_TYPHLOSION] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_PUNCH)
- | TUTOR(MOVE_MEGA_KICK)
- | TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_COUNTER)
- | TUTOR(MOVE_SEISMIC_TOSS)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_ROCK_SLIDE)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_DYNAMIC_PUNCH)
- | TUTOR(MOVE_ROLLOUT)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_SWIFT)
- | TUTOR(MOVE_DEFENSE_CURL)
- | TUTOR(MOVE_THUNDER_PUNCH)
- | TUTOR(MOVE_FIRE_PUNCH)
- | TUTOR(MOVE_FURY_CUTTER)),
-
- [SPECIES_TOTODILE] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_PUNCH)
- | TUTOR(MOVE_SWORDS_DANCE)
- | TUTOR(MOVE_MEGA_KICK)
- | TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_COUNTER)
- | TUTOR(MOVE_SEISMIC_TOSS)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_ROCK_SLIDE)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_DYNAMIC_PUNCH)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ICY_WIND)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_ICE_PUNCH)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)),
-
- [SPECIES_CROCONAW] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_PUNCH)
- | TUTOR(MOVE_SWORDS_DANCE)
- | TUTOR(MOVE_MEGA_KICK)
- | TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_COUNTER)
- | TUTOR(MOVE_SEISMIC_TOSS)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_ROCK_SLIDE)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_DYNAMIC_PUNCH)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ICY_WIND)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_ICE_PUNCH)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_FURY_CUTTER)),
-
- [SPECIES_FERALIGATR] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_PUNCH)
- | TUTOR(MOVE_SWORDS_DANCE)
- | TUTOR(MOVE_MEGA_KICK)
- | TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_COUNTER)
- | TUTOR(MOVE_SEISMIC_TOSS)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_ROCK_SLIDE)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_DYNAMIC_PUNCH)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ICY_WIND)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_ICE_PUNCH)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_FURY_CUTTER)),
-
- [SPECIES_SENTRET] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_DYNAMIC_PUNCH)
- | TUTOR(MOVE_ROLLOUT)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_ICE_PUNCH)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_SWIFT)
- | TUTOR(MOVE_DEFENSE_CURL)
- | TUTOR(MOVE_THUNDER_PUNCH)
- | TUTOR(MOVE_FIRE_PUNCH)
- | TUTOR(MOVE_FURY_CUTTER)),
-
- [SPECIES_FURRET] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_DYNAMIC_PUNCH)
- | TUTOR(MOVE_ROLLOUT)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_ICE_PUNCH)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_SWIFT)
- | TUTOR(MOVE_DEFENSE_CURL)
- | TUTOR(MOVE_THUNDER_PUNCH)
- | TUTOR(MOVE_FIRE_PUNCH)
- | TUTOR(MOVE_FURY_CUTTER)),
-
- [SPECIES_HOOTHOOT] = TUTOR_LEARNSET(TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_DREAM_EATER)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_SWIFT)),
-
- [SPECIES_NOCTOWL] = TUTOR_LEARNSET(TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_DREAM_EATER)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_SWIFT)),
-
- [SPECIES_LEDYBA] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_PUNCH)
- | TUTOR(MOVE_SWORDS_DANCE)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_DYNAMIC_PUNCH)
- | TUTOR(MOVE_ROLLOUT)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_ICE_PUNCH)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_SWIFT)
- | TUTOR(MOVE_THUNDER_PUNCH)),
-
- [SPECIES_LEDIAN] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_PUNCH)
- | TUTOR(MOVE_SWORDS_DANCE)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_DYNAMIC_PUNCH)
- | TUTOR(MOVE_ROLLOUT)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_ICE_PUNCH)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_SWIFT)
- | TUTOR(MOVE_THUNDER_PUNCH)),
-
- [SPECIES_SPINARAK] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)),
-
- [SPECIES_ARIADOS] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)),
-
- [SPECIES_CROBAT] = TUTOR_LEARNSET(TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_SWIFT)),
-
- [SPECIES_CHINCHOU] = TUTOR_LEARNSET(TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_THUNDER_WAVE)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)),
-
- [SPECIES_LANTURN] = TUTOR_LEARNSET(TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_THUNDER_WAVE)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)),
-
- [SPECIES_PICHU] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_PUNCH)
- | TUTOR(MOVE_MEGA_KICK)
- | TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_COUNTER)
- | TUTOR(MOVE_SEISMIC_TOSS)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_THUNDER_WAVE)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_ROLLOUT)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_SWIFT)
- | TUTOR(MOVE_DEFENSE_CURL)),
-
- [SPECIES_CLEFFA] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_PUNCH)
- | TUTOR(MOVE_MEGA_KICK)
- | TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_COUNTER)
- | TUTOR(MOVE_SEISMIC_TOSS)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_METRONOME)
- | TUTOR(MOVE_SOFT_BOILED)
- | TUTOR(MOVE_DREAM_EATER)
- | TUTOR(MOVE_THUNDER_WAVE)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_ROLLOUT)
- | TUTOR(MOVE_PSYCH_UP)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ICY_WIND)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_DEFENSE_CURL)),
-
- [SPECIES_IGGLYBUFF] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_PUNCH)
- | TUTOR(MOVE_MEGA_KICK)
- | TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_COUNTER)
- | TUTOR(MOVE_SEISMIC_TOSS)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_DREAM_EATER)
- | TUTOR(MOVE_THUNDER_WAVE)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_ROLLOUT)
- | TUTOR(MOVE_PSYCH_UP)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ICY_WIND)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_DEFENSE_CURL)),
-
- [SPECIES_TOGEPI] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_PUNCH)
- | TUTOR(MOVE_MEGA_KICK)
- | TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_COUNTER)
- | TUTOR(MOVE_SEISMIC_TOSS)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_METRONOME)
- | TUTOR(MOVE_SOFT_BOILED)
- | TUTOR(MOVE_DREAM_EATER)
- | TUTOR(MOVE_THUNDER_WAVE)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_ROLLOUT)
- | TUTOR(MOVE_PSYCH_UP)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_SWIFT)
- | TUTOR(MOVE_DEFENSE_CURL)),
-
- [SPECIES_TOGETIC] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_PUNCH)
- | TUTOR(MOVE_MEGA_KICK)
- | TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_COUNTER)
- | TUTOR(MOVE_SEISMIC_TOSS)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_METRONOME)
- | TUTOR(MOVE_SOFT_BOILED)
- | TUTOR(MOVE_DREAM_EATER)
- | TUTOR(MOVE_THUNDER_WAVE)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_ROLLOUT)
- | TUTOR(MOVE_PSYCH_UP)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_SWIFT)
- | TUTOR(MOVE_DEFENSE_CURL)),
-
- [SPECIES_NATU] = TUTOR_LEARNSET(TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_DREAM_EATER)
- | TUTOR(MOVE_THUNDER_WAVE)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_PSYCH_UP)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_SWIFT)),
-
- [SPECIES_XATU] = TUTOR_LEARNSET(TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_DREAM_EATER)
- | TUTOR(MOVE_THUNDER_WAVE)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_PSYCH_UP)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_SWIFT)),
-
- [SPECIES_MAREEP] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_THUNDER_WAVE)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_SWIFT)
- | TUTOR(MOVE_DEFENSE_CURL)),
-
- [SPECIES_FLAAFFY] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_PUNCH)
- | TUTOR(MOVE_MEGA_KICK)
- | TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_COUNTER)
- | TUTOR(MOVE_SEISMIC_TOSS)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_THUNDER_WAVE)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_DYNAMIC_PUNCH)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_SWIFT)
- | TUTOR(MOVE_DEFENSE_CURL)
- | TUTOR(MOVE_THUNDER_PUNCH)
- | TUTOR(MOVE_FIRE_PUNCH)),
-
- [SPECIES_AMPHAROS] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_PUNCH)
- | TUTOR(MOVE_MEGA_KICK)
- | TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_COUNTER)
- | TUTOR(MOVE_SEISMIC_TOSS)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_THUNDER_WAVE)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_DYNAMIC_PUNCH)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_SWIFT)
- | TUTOR(MOVE_DEFENSE_CURL)
- | TUTOR(MOVE_THUNDER_PUNCH)
- | TUTOR(MOVE_FIRE_PUNCH)),
-
- [SPECIES_BELLOSSOM] = TUTOR_LEARNSET(TUTOR(MOVE_SWORDS_DANCE)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)),
-
- [SPECIES_MARILL] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_PUNCH)
- | TUTOR(MOVE_MEGA_KICK)
- | TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_SEISMIC_TOSS)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_DYNAMIC_PUNCH)
- | TUTOR(MOVE_ROLLOUT)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ICY_WIND)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_ICE_PUNCH)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_SWIFT)
- | TUTOR(MOVE_DEFENSE_CURL)),
-
- [SPECIES_AZUMARILL] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_PUNCH)
- | TUTOR(MOVE_MEGA_KICK)
- | TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_SEISMIC_TOSS)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_DYNAMIC_PUNCH)
- | TUTOR(MOVE_ROLLOUT)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ICY_WIND)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_ICE_PUNCH)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_SWIFT)
- | TUTOR(MOVE_DEFENSE_CURL)),
-
- [SPECIES_SUDOWOODO] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_PUNCH)
- | TUTOR(MOVE_MEGA_KICK)
- | TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_COUNTER)
- | TUTOR(MOVE_SEISMIC_TOSS)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_EXPLOSION)
- | TUTOR(MOVE_ROCK_SLIDE)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_DYNAMIC_PUNCH)
- | TUTOR(MOVE_ROLLOUT)
- | TUTOR(MOVE_PSYCH_UP)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_ICE_PUNCH)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_DEFENSE_CURL)
- | TUTOR(MOVE_THUNDER_PUNCH)
- | TUTOR(MOVE_FIRE_PUNCH)),
-
- [SPECIES_POLITOED] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_PUNCH)
- | TUTOR(MOVE_MEGA_KICK)
- | TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_COUNTER)
- | TUTOR(MOVE_SEISMIC_TOSS)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_METRONOME)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_DYNAMIC_PUNCH)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ICY_WIND)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_DEFENSE_CURL)),
-
- [SPECIES_HOPPIP] = TUTOR_LEARNSET(TUTOR(MOVE_SWORDS_DANCE)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_DEFENSE_CURL)),
-
- [SPECIES_SKIPLOOM] = TUTOR_LEARNSET(TUTOR(MOVE_SWORDS_DANCE)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_DEFENSE_CURL)),
-
- [SPECIES_JUMPLUFF] = TUTOR_LEARNSET(TUTOR(MOVE_SWORDS_DANCE)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_DEFENSE_CURL)),
-
- [SPECIES_AIPOM] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_PUNCH)
- | TUTOR(MOVE_MEGA_KICK)
- | TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_COUNTER)
- | TUTOR(MOVE_SEISMIC_TOSS)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_METRONOME)
- | TUTOR(MOVE_DREAM_EATER)
- | TUTOR(MOVE_THUNDER_WAVE)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_DYNAMIC_PUNCH)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_ICE_PUNCH)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_SWIFT)
- | TUTOR(MOVE_DEFENSE_CURL)
- | TUTOR(MOVE_THUNDER_PUNCH)
- | TUTOR(MOVE_FIRE_PUNCH)
- | TUTOR(MOVE_FURY_CUTTER)),
-
- [SPECIES_SUNKERN] = TUTOR_LEARNSET(TUTOR(MOVE_SWORDS_DANCE)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)),
-
- [SPECIES_SUNFLORA] = TUTOR_LEARNSET(TUTOR(MOVE_SWORDS_DANCE)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)),
-
- [SPECIES_YANMA] = TUTOR_LEARNSET(TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_DREAM_EATER)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_SWIFT)),
-
- [SPECIES_WOOPER] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_DYNAMIC_PUNCH)
- | TUTOR(MOVE_ROLLOUT)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_ICE_PUNCH)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_DEFENSE_CURL)),
-
- [SPECIES_QUAGSIRE] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_PUNCH)
- | TUTOR(MOVE_MEGA_KICK)
- | TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_COUNTER)
- | TUTOR(MOVE_SEISMIC_TOSS)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_DYNAMIC_PUNCH)
- | TUTOR(MOVE_ROLLOUT)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_ICE_PUNCH)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_DEFENSE_CURL)),
-
- [SPECIES_ESPEON] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_DREAM_EATER)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_PSYCH_UP)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_SWIFT)),
-
- [SPECIES_UMBREON] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_DREAM_EATER)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_PSYCH_UP)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_SWIFT)),
-
- [SPECIES_MURKROW] = TUTOR_LEARNSET(TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_DREAM_EATER)
- | TUTOR(MOVE_THUNDER_WAVE)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_PSYCH_UP)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ICY_WIND)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_SWIFT)),
-
- [SPECIES_SLOWKING] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_PUNCH)
- | TUTOR(MOVE_MEGA_KICK)
- | TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_COUNTER)
- | TUTOR(MOVE_SEISMIC_TOSS)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_DREAM_EATER)
- | TUTOR(MOVE_THUNDER_WAVE)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_DYNAMIC_PUNCH)
- | TUTOR(MOVE_PSYCH_UP)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ICY_WIND)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_ICE_PUNCH)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_SWIFT)
- | TUTOR(MOVE_FURY_CUTTER)),
-
- [SPECIES_MISDREAVUS] = TUTOR_LEARNSET(TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_DREAM_EATER)
- | TUTOR(MOVE_THUNDER_WAVE)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_PSYCH_UP)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_SWIFT)
- | TUTOR(MOVE_DEFENSE_CURL)),
-
- [SPECIES_UNOWN] = TUTOR_LEARNSET(0),
-
- [SPECIES_WOBBUFFET] = TUTOR_LEARNSET(0),
-
- [SPECIES_GIRAFARIG] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_DREAM_EATER)
- | TUTOR(MOVE_THUNDER_WAVE)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_PSYCH_UP)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_SWIFT)),
-
- [SPECIES_PINECO] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_COUNTER)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_EXPLOSION)
- | TUTOR(MOVE_ROCK_SLIDE)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_ROLLOUT)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_DEFENSE_CURL)),
-
- [SPECIES_FORRETRESS] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_COUNTER)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_EXPLOSION)
- | TUTOR(MOVE_ROCK_SLIDE)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_ROLLOUT)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_DEFENSE_CURL)),
-
- [SPECIES_DUNSPARCE] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_COUNTER)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_DREAM_EATER)
- | TUTOR(MOVE_THUNDER_WAVE)
- | TUTOR(MOVE_ROCK_SLIDE)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_ROLLOUT)
- | TUTOR(MOVE_PSYCH_UP)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_DEFENSE_CURL)),
-
- [SPECIES_GLIGAR] = TUTOR_LEARNSET(TUTOR(MOVE_SWORDS_DANCE)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_COUNTER)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_DREAM_EATER)
- | TUTOR(MOVE_ROCK_SLIDE)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_SWIFT)
- | TUTOR(MOVE_FURY_CUTTER)),
-
- [SPECIES_STEELIX] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_EXPLOSION)
- | TUTOR(MOVE_ROCK_SLIDE)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_ROLLOUT)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_DEFENSE_CURL)),
-
- [SPECIES_SNUBBULL] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_PUNCH)
- | TUTOR(MOVE_MEGA_KICK)
- | TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_COUNTER)
- | TUTOR(MOVE_SEISMIC_TOSS)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_METRONOME)
- | TUTOR(MOVE_THUNDER_WAVE)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_DYNAMIC_PUNCH)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_ICE_PUNCH)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_DEFENSE_CURL)
- | TUTOR(MOVE_THUNDER_PUNCH)
- | TUTOR(MOVE_FIRE_PUNCH)),
-
- [SPECIES_GRANBULL] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_PUNCH)
- | TUTOR(MOVE_MEGA_KICK)
- | TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_COUNTER)
- | TUTOR(MOVE_SEISMIC_TOSS)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_METRONOME)
- | TUTOR(MOVE_THUNDER_WAVE)
- | TUTOR(MOVE_ROCK_SLIDE)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_DYNAMIC_PUNCH)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_ICE_PUNCH)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_DEFENSE_CURL)
- | TUTOR(MOVE_THUNDER_PUNCH)
- | TUTOR(MOVE_FIRE_PUNCH)),
-
- [SPECIES_QWILFISH] = TUTOR_LEARNSET(TUTOR(MOVE_SWORDS_DANCE)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_THUNDER_WAVE)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_ROLLOUT)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ICY_WIND)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_SWIFT)
- | TUTOR(MOVE_DEFENSE_CURL)),
-
- [SPECIES_SCIZOR] = TUTOR_LEARNSET(TUTOR(MOVE_SWORDS_DANCE)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_COUNTER)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_SWIFT)
- | TUTOR(MOVE_FURY_CUTTER)),
-
- [SPECIES_SHUCKLE] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_ROCK_SLIDE)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_ROLLOUT)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_DEFENSE_CURL)),
-
- [SPECIES_HERACROSS] = TUTOR_LEARNSET(TUTOR(MOVE_SWORDS_DANCE)
- | TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_COUNTER)
- | TUTOR(MOVE_SEISMIC_TOSS)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_ROCK_SLIDE)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_FURY_CUTTER)),
-
- [SPECIES_SNEASEL] = TUTOR_LEARNSET(TUTOR(MOVE_SWORDS_DANCE)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_COUNTER)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_DREAM_EATER)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_DYNAMIC_PUNCH)
- | TUTOR(MOVE_PSYCH_UP)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ICY_WIND)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_ICE_PUNCH)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_SWIFT)
- | TUTOR(MOVE_DEFENSE_CURL)
- | TUTOR(MOVE_FURY_CUTTER)),
-
- [SPECIES_TEDDIURSA] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_PUNCH)
- | TUTOR(MOVE_SWORDS_DANCE)
- | TUTOR(MOVE_MEGA_KICK)
- | TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_COUNTER)
- | TUTOR(MOVE_SEISMIC_TOSS)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_METRONOME)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_DYNAMIC_PUNCH)
- | TUTOR(MOVE_ROLLOUT)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_ICE_PUNCH)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_SWIFT)
- | TUTOR(MOVE_DEFENSE_CURL)
- | TUTOR(MOVE_THUNDER_PUNCH)
- | TUTOR(MOVE_FIRE_PUNCH)
- | TUTOR(MOVE_FURY_CUTTER)),
-
- [SPECIES_URSARING] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_PUNCH)
- | TUTOR(MOVE_SWORDS_DANCE)
- | TUTOR(MOVE_MEGA_KICK)
- | TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_COUNTER)
- | TUTOR(MOVE_SEISMIC_TOSS)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_METRONOME)
- | TUTOR(MOVE_ROCK_SLIDE)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_DYNAMIC_PUNCH)
- | TUTOR(MOVE_ROLLOUT)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_ICE_PUNCH)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_SWIFT)
- | TUTOR(MOVE_DEFENSE_CURL)
- | TUTOR(MOVE_THUNDER_PUNCH)
- | TUTOR(MOVE_FIRE_PUNCH)
- | TUTOR(MOVE_FURY_CUTTER)),
-
- [SPECIES_SLUGMA] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_ROCK_SLIDE)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_ROLLOUT)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_DEFENSE_CURL)),
-
- [SPECIES_MAGCARGO] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_ROCK_SLIDE)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_ROLLOUT)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_DEFENSE_CURL)),
-
- [SPECIES_SWINUB] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_ROCK_SLIDE)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ICY_WIND)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_DEFENSE_CURL)),
-
- [SPECIES_PILOSWINE] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_ROCK_SLIDE)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ICY_WIND)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_DEFENSE_CURL)),
-
- [SPECIES_CORSOLA] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_EXPLOSION)
- | TUTOR(MOVE_ROCK_SLIDE)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_ROLLOUT)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_DEFENSE_CURL)),
-
- [SPECIES_REMORAID] = TUTOR_LEARNSET(TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_THUNDER_WAVE)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_SWIFT)
- | TUTOR(MOVE_DEFENSE_CURL)),
-
- [SPECIES_OCTILLERY] = TUTOR_LEARNSET(TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_SEISMIC_TOSS)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_THUNDER_WAVE)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_SWIFT)
- | TUTOR(MOVE_DEFENSE_CURL)),
-
- [SPECIES_DELIBIRD] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_PUNCH)
- | TUTOR(MOVE_MEGA_KICK)
- | TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_COUNTER)
- | TUTOR(MOVE_SEISMIC_TOSS)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ICY_WIND)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_SWIFT)),
-
- [SPECIES_MANTINE] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ICY_WIND)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_SWIFT)),
-
- [SPECIES_SKARMORY] = TUTOR_LEARNSET(TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_COUNTER)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_ROCK_SLIDE)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_SWIFT)),
-
- [SPECIES_HOUNDOUR] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_COUNTER)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_DREAM_EATER)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_SWIFT)),
-
- [SPECIES_HOUNDOOM] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_COUNTER)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_DREAM_EATER)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_SWIFT)),
-
- [SPECIES_KINGDRA] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ICY_WIND)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_SWIFT)),
-
- [SPECIES_PHANPY] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_COUNTER)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_ROLLOUT)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_DEFENSE_CURL)),
-
- [SPECIES_DONPHAN] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_COUNTER)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_ROCK_SLIDE)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_ROLLOUT)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_DEFENSE_CURL)),
-
- [SPECIES_PORYGON2] = TUTOR_LEARNSET(TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_DREAM_EATER)
- | TUTOR(MOVE_THUNDER_WAVE)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_PSYCH_UP)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ICY_WIND)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_SWIFT)
- | TUTOR(MOVE_DEFENSE_CURL)),
-
- [SPECIES_STANTLER] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_DREAM_EATER)
- | TUTOR(MOVE_THUNDER_WAVE)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_PSYCH_UP)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_SWIFT)),
-
- [SPECIES_SMEARGLE] = TUTOR_LEARNSET(0),
-
- [SPECIES_TYROGUE] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_KICK)
- | TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_COUNTER)
- | TUTOR(MOVE_SEISMIC_TOSS)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_ROCK_SLIDE)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_SWIFT)),
-
- [SPECIES_HITMONTOP] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_KICK)
- | TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_COUNTER)
- | TUTOR(MOVE_SEISMIC_TOSS)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_ROCK_SLIDE)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_SWIFT)),
-
- [SPECIES_SMOOCHUM] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_PUNCH)
- | TUTOR(MOVE_MEGA_KICK)
- | TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_COUNTER)
- | TUTOR(MOVE_SEISMIC_TOSS)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_METRONOME)
- | TUTOR(MOVE_DREAM_EATER)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_DYNAMIC_PUNCH)
- | TUTOR(MOVE_PSYCH_UP)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ICY_WIND)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_ICE_PUNCH)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)),
-
- [SPECIES_ELEKID] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_PUNCH)
- | TUTOR(MOVE_MEGA_KICK)
- | TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_COUNTER)
- | TUTOR(MOVE_SEISMIC_TOSS)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_THUNDER_WAVE)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_DYNAMIC_PUNCH)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_ICE_PUNCH)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_SWIFT)
- | TUTOR(MOVE_THUNDER_PUNCH)
- | TUTOR(MOVE_FIRE_PUNCH)),
-
- [SPECIES_MAGBY] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_PUNCH)
- | TUTOR(MOVE_MEGA_KICK)
- | TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_COUNTER)
- | TUTOR(MOVE_SEISMIC_TOSS)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_DYNAMIC_PUNCH)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_THUNDER_PUNCH)
- | TUTOR(MOVE_FIRE_PUNCH)),
-
- [SPECIES_MILTANK] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_PUNCH)
- | TUTOR(MOVE_MEGA_KICK)
- | TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_COUNTER)
- | TUTOR(MOVE_SEISMIC_TOSS)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_METRONOME)
- | TUTOR(MOVE_THUNDER_WAVE)
- | TUTOR(MOVE_ROCK_SLIDE)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_DYNAMIC_PUNCH)
- | TUTOR(MOVE_ROLLOUT)
- | TUTOR(MOVE_PSYCH_UP)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ICY_WIND)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_ICE_PUNCH)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_DEFENSE_CURL)
- | TUTOR(MOVE_THUNDER_PUNCH)
- | TUTOR(MOVE_FIRE_PUNCH)),
-
- [SPECIES_BLISSEY] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_PUNCH)
- | TUTOR(MOVE_MEGA_KICK)
- | TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_COUNTER)
- | TUTOR(MOVE_SEISMIC_TOSS)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_METRONOME)
- | TUTOR(MOVE_SOFT_BOILED)
- | TUTOR(MOVE_DREAM_EATER)
- | TUTOR(MOVE_THUNDER_WAVE)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_DYNAMIC_PUNCH)
- | TUTOR(MOVE_ROLLOUT)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ICY_WIND)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_DEFENSE_CURL)),
-
- [SPECIES_RAIKOU] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_THUNDER_WAVE)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_PSYCH_UP)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_SWIFT)),
-
- [SPECIES_ENTEI] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_PSYCH_UP)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_SWIFT)),
-
- [SPECIES_SUICUNE] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_PSYCH_UP)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ICY_WIND)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_SWIFT)),
-
- [SPECIES_LARVITAR] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_ROCK_SLIDE)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)),
-
- [SPECIES_PUPITAR] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_ROCK_SLIDE)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)),
-
- [SPECIES_TYRANITAR] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_PUNCH)
- | TUTOR(MOVE_MEGA_KICK)
- | TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_COUNTER)
- | TUTOR(MOVE_SEISMIC_TOSS)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_THUNDER_WAVE)
- | TUTOR(MOVE_ROCK_SLIDE)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_DYNAMIC_PUNCH)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_FIRE_PUNCH)
- | TUTOR(MOVE_FURY_CUTTER)),
-
- [SPECIES_LUGIA] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_DREAM_EATER)
- | TUTOR(MOVE_THUNDER_WAVE)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_PSYCH_UP)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ICY_WIND)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_SWIFT)),
-
- [SPECIES_HO_OH] = TUTOR_LEARNSET(TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_DREAM_EATER)
- | TUTOR(MOVE_THUNDER_WAVE)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_PSYCH_UP)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_SWIFT)),
-
- [SPECIES_CELEBI] = TUTOR_LEARNSET(TUTOR(MOVE_SWORDS_DANCE)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_METRONOME)
- | TUTOR(MOVE_DREAM_EATER)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_PSYCH_UP)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_SWIFT)
- | TUTOR(MOVE_DEFENSE_CURL)),
-
- [SPECIES_TREECKO] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_PUNCH)
- | TUTOR(MOVE_SWORDS_DANCE)
- | TUTOR(MOVE_MEGA_KICK)
- | TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_COUNTER)
- | TUTOR(MOVE_SEISMIC_TOSS)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_DYNAMIC_PUNCH)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_SWIFT)
- | TUTOR(MOVE_THUNDER_PUNCH)
- | TUTOR(MOVE_FURY_CUTTER)),
-
- [SPECIES_GROVYLE] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_PUNCH)
- | TUTOR(MOVE_SWORDS_DANCE)
- | TUTOR(MOVE_MEGA_KICK)
- | TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_COUNTER)
- | TUTOR(MOVE_SEISMIC_TOSS)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_DYNAMIC_PUNCH)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_SWIFT)
- | TUTOR(MOVE_THUNDER_PUNCH)
- | TUTOR(MOVE_FURY_CUTTER)),
-
- [SPECIES_SCEPTILE] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_PUNCH)
- | TUTOR(MOVE_SWORDS_DANCE)
- | TUTOR(MOVE_MEGA_KICK)
- | TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_COUNTER)
- | TUTOR(MOVE_SEISMIC_TOSS)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_DYNAMIC_PUNCH)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_SWIFT)
- | TUTOR(MOVE_THUNDER_PUNCH)
- | TUTOR(MOVE_FURY_CUTTER)),
-
- [SPECIES_TORCHIC] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_PUNCH)
- | TUTOR(MOVE_SWORDS_DANCE)
- | TUTOR(MOVE_MEGA_KICK)
- | TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_COUNTER)
- | TUTOR(MOVE_SEISMIC_TOSS)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_ROCK_SLIDE)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_SWIFT)),
-
- [SPECIES_COMBUSKEN] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_PUNCH)
- | TUTOR(MOVE_SWORDS_DANCE)
- | TUTOR(MOVE_MEGA_KICK)
- | TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_COUNTER)
- | TUTOR(MOVE_SEISMIC_TOSS)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_ROCK_SLIDE)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_DYNAMIC_PUNCH)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_SWIFT)
- | TUTOR(MOVE_THUNDER_PUNCH)
- | TUTOR(MOVE_FIRE_PUNCH)
- | TUTOR(MOVE_FURY_CUTTER)),
-
- [SPECIES_BLAZIKEN] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_PUNCH)
- | TUTOR(MOVE_SWORDS_DANCE)
- | TUTOR(MOVE_MEGA_KICK)
- | TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_COUNTER)
- | TUTOR(MOVE_SEISMIC_TOSS)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_ROCK_SLIDE)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_DYNAMIC_PUNCH)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_SWIFT)
- | TUTOR(MOVE_THUNDER_PUNCH)
- | TUTOR(MOVE_FIRE_PUNCH)
- | TUTOR(MOVE_FURY_CUTTER)),
-
- [SPECIES_MUDKIP] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_ROLLOUT)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ICY_WIND)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_DEFENSE_CURL)),
-
- [SPECIES_MARSHTOMP] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_PUNCH)
- | TUTOR(MOVE_MEGA_KICK)
- | TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_COUNTER)
- | TUTOR(MOVE_SEISMIC_TOSS)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_ROCK_SLIDE)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_DYNAMIC_PUNCH)
- | TUTOR(MOVE_ROLLOUT)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ICY_WIND)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_ICE_PUNCH)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_DEFENSE_CURL)),
-
- [SPECIES_SWAMPERT] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_PUNCH)
- | TUTOR(MOVE_MEGA_KICK)
- | TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_COUNTER)
- | TUTOR(MOVE_SEISMIC_TOSS)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_ROCK_SLIDE)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_DYNAMIC_PUNCH)
- | TUTOR(MOVE_ROLLOUT)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ICY_WIND)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_ICE_PUNCH)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_DEFENSE_CURL)),
-
- [SPECIES_POOCHYENA] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_COUNTER)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_PSYCH_UP)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)),
-
- [SPECIES_MIGHTYENA] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_COUNTER)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_PSYCH_UP)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)),
-
- [SPECIES_ZIGZAGOON] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_THUNDER_WAVE)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_ROLLOUT)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ICY_WIND)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_SWIFT)
- | TUTOR(MOVE_DEFENSE_CURL)
- | TUTOR(MOVE_FURY_CUTTER)),
-
- [SPECIES_LINOONE] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_THUNDER_WAVE)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_ROLLOUT)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ICY_WIND)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_SWIFT)
- | TUTOR(MOVE_DEFENSE_CURL)
- | TUTOR(MOVE_FURY_CUTTER)),
-
- [SPECIES_WURMPLE] = TUTOR_LEARNSET(0),
-
- [SPECIES_SILCOON] = TUTOR_LEARNSET(0),
-
- [SPECIES_BEAUTIFLY] = TUTOR_LEARNSET(TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_SWIFT)),
-
- [SPECIES_CASCOON] = TUTOR_LEARNSET(0),
-
- [SPECIES_DUSTOX] = TUTOR_LEARNSET(TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_SWIFT)),
-
- [SPECIES_LOTAD] = TUTOR_LEARNSET(TUTOR(MOVE_SWORDS_DANCE)
- | TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ICY_WIND)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)),
-
- [SPECIES_LOMBRE] = TUTOR_LEARNSET(TUTOR(MOVE_SWORDS_DANCE)
- | TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_DYNAMIC_PUNCH)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ICY_WIND)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_ICE_PUNCH)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_THUNDER_PUNCH)
- | TUTOR(MOVE_FIRE_PUNCH)),
-
- [SPECIES_LUDICOLO] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_PUNCH)
- | TUTOR(MOVE_SWORDS_DANCE)
- | TUTOR(MOVE_MEGA_KICK)
- | TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_COUNTER)
- | TUTOR(MOVE_SEISMIC_TOSS)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_METRONOME)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_DYNAMIC_PUNCH)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ICY_WIND)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_ICE_PUNCH)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_THUNDER_PUNCH)
- | TUTOR(MOVE_FIRE_PUNCH)),
-
- [SPECIES_SEEDOT] = TUTOR_LEARNSET(TUTOR(MOVE_SWORDS_DANCE)
- | TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_EXPLOSION)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_ROLLOUT)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_DEFENSE_CURL)),
-
- [SPECIES_NUZLEAF] = TUTOR_LEARNSET(TUTOR(MOVE_SWORDS_DANCE)
- | TUTOR(MOVE_MEGA_KICK)
- | TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_EXPLOSION)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_ROLLOUT)
- | TUTOR(MOVE_PSYCH_UP)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_SWIFT)
- | TUTOR(MOVE_DEFENSE_CURL)
- | TUTOR(MOVE_FURY_CUTTER)),
-
- [SPECIES_SHIFTRY] = TUTOR_LEARNSET(TUTOR(MOVE_SWORDS_DANCE)
- | TUTOR(MOVE_MEGA_KICK)
- | TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_EXPLOSION)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_ROLLOUT)
- | TUTOR(MOVE_PSYCH_UP)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_SWIFT)
- | TUTOR(MOVE_DEFENSE_CURL)
- | TUTOR(MOVE_FURY_CUTTER)),
-
- [SPECIES_NINCADA] = TUTOR_LEARNSET(TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_FURY_CUTTER)),
-
- [SPECIES_NINJASK] = TUTOR_LEARNSET(TUTOR(MOVE_SWORDS_DANCE)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_SWIFT)
- | TUTOR(MOVE_FURY_CUTTER)),
-
- [SPECIES_SHEDINJA] = TUTOR_LEARNSET(TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_DREAM_EATER)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_FURY_CUTTER)),
-
- [SPECIES_TAILLOW] = TUTOR_LEARNSET(TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_COUNTER)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_SWIFT)),
-
- [SPECIES_SWELLOW] = TUTOR_LEARNSET(TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_COUNTER)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_SWIFT)),
-
- [SPECIES_SHROOMISH] = TUTOR_LEARNSET(TUTOR(MOVE_SWORDS_DANCE)
- | TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)),
-
- [SPECIES_BRELOOM] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_PUNCH)
- | TUTOR(MOVE_SWORDS_DANCE)
- | TUTOR(MOVE_MEGA_KICK)
- | TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_COUNTER)
- | TUTOR(MOVE_SEISMIC_TOSS)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_DYNAMIC_PUNCH)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_THUNDER_PUNCH)
- | TUTOR(MOVE_FURY_CUTTER)),
-
- [SPECIES_SPINDA] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_PUNCH)
- | TUTOR(MOVE_MEGA_KICK)
- | TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_COUNTER)
- | TUTOR(MOVE_SEISMIC_TOSS)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_METRONOME)
- | TUTOR(MOVE_DREAM_EATER)
- | TUTOR(MOVE_ROCK_SLIDE)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_DYNAMIC_PUNCH)
- | TUTOR(MOVE_ROLLOUT)
- | TUTOR(MOVE_PSYCH_UP)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ICY_WIND)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_ICE_PUNCH)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_SWIFT)
- | TUTOR(MOVE_DEFENSE_CURL)
- | TUTOR(MOVE_THUNDER_PUNCH)
- | TUTOR(MOVE_FIRE_PUNCH)),
-
- [SPECIES_WINGULL] = TUTOR_LEARNSET(TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ICY_WIND)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_SWIFT)),
-
- [SPECIES_PELIPPER] = TUTOR_LEARNSET(TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ICY_WIND)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_SWIFT)),
-
- [SPECIES_SURSKIT] = TUTOR_LEARNSET(TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_PSYCH_UP)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ICY_WIND)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_SWIFT)),
-
- [SPECIES_MASQUERAIN] = TUTOR_LEARNSET(TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_PSYCH_UP)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ICY_WIND)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_SWIFT)),
-
- [SPECIES_WAILMER] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_ROLLOUT)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ICY_WIND)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_DEFENSE_CURL)),
-
- [SPECIES_WAILORD] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_ROLLOUT)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ICY_WIND)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_DEFENSE_CURL)),
-
- [SPECIES_SKITTY] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_DREAM_EATER)
- | TUTOR(MOVE_THUNDER_WAVE)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_ROLLOUT)
- | TUTOR(MOVE_PSYCH_UP)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ICY_WIND)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_SWIFT)
- | TUTOR(MOVE_DEFENSE_CURL)),
-
- [SPECIES_DELCATTY] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_DREAM_EATER)
- | TUTOR(MOVE_THUNDER_WAVE)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_ROLLOUT)
- | TUTOR(MOVE_PSYCH_UP)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ICY_WIND)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_SWIFT)
- | TUTOR(MOVE_DEFENSE_CURL)),
-
- [SPECIES_KECLEON] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_PUNCH)
- | TUTOR(MOVE_MEGA_KICK)
- | TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_COUNTER)
- | TUTOR(MOVE_SEISMIC_TOSS)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_METRONOME)
- | TUTOR(MOVE_THUNDER_WAVE)
- | TUTOR(MOVE_ROCK_SLIDE)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_DYNAMIC_PUNCH)
- | TUTOR(MOVE_ROLLOUT)
- | TUTOR(MOVE_PSYCH_UP)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ICY_WIND)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_ICE_PUNCH)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_SWIFT)
- | TUTOR(MOVE_DEFENSE_CURL)
- | TUTOR(MOVE_THUNDER_PUNCH)
- | TUTOR(MOVE_FIRE_PUNCH)
- | TUTOR(MOVE_FURY_CUTTER)),
-
- [SPECIES_BALTOY] = TUTOR_LEARNSET(TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_DREAM_EATER)
- | TUTOR(MOVE_EXPLOSION)
- | TUTOR(MOVE_ROCK_SLIDE)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_PSYCH_UP)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)),
-
- [SPECIES_CLAYDOL] = TUTOR_LEARNSET(TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_DREAM_EATER)
- | TUTOR(MOVE_EXPLOSION)
- | TUTOR(MOVE_ROCK_SLIDE)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_PSYCH_UP)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)),
-
- [SPECIES_NOSEPASS] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_THUNDER_WAVE)
- | TUTOR(MOVE_EXPLOSION)
- | TUTOR(MOVE_ROCK_SLIDE)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_DYNAMIC_PUNCH)
- | TUTOR(MOVE_ROLLOUT)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_ICE_PUNCH)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_DEFENSE_CURL)
- | TUTOR(MOVE_THUNDER_PUNCH)
- | TUTOR(MOVE_FIRE_PUNCH)),
-
- [SPECIES_TORKOAL] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_EXPLOSION)
- | TUTOR(MOVE_ROCK_SLIDE)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)),
-
- [SPECIES_SABLEYE] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_PUNCH)
- | TUTOR(MOVE_MEGA_KICK)
- | TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_COUNTER)
- | TUTOR(MOVE_SEISMIC_TOSS)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_METRONOME)
- | TUTOR(MOVE_DREAM_EATER)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_DYNAMIC_PUNCH)
- | TUTOR(MOVE_PSYCH_UP)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_ICE_PUNCH)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_THUNDER_PUNCH)
- | TUTOR(MOVE_FIRE_PUNCH)
- | TUTOR(MOVE_FURY_CUTTER)),
-
- [SPECIES_BARBOACH] = TUTOR_LEARNSET(TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ICY_WIND)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)),
-
- [SPECIES_WHISCASH] = TUTOR_LEARNSET(TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_ROCK_SLIDE)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ICY_WIND)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)),
-
- [SPECIES_LUVDISC] = TUTOR_LEARNSET(TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_PSYCH_UP)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ICY_WIND)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_SWIFT)),
-
- [SPECIES_CORPHISH] = TUTOR_LEARNSET(TUTOR(MOVE_SWORDS_DANCE)
- | TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_COUNTER)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ICY_WIND)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_FURY_CUTTER)),
-
- [SPECIES_CRAWDAUNT] = TUTOR_LEARNSET(TUTOR(MOVE_SWORDS_DANCE)
- | TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_COUNTER)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ICY_WIND)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_SWIFT)
- | TUTOR(MOVE_FURY_CUTTER)),
-
- [SPECIES_FEEBAS] = TUTOR_LEARNSET(TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ICY_WIND)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_SWIFT)),
-
- [SPECIES_MILOTIC] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_PSYCH_UP)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ICY_WIND)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_SWIFT)),
-
- [SPECIES_CARVANHA] = TUTOR_LEARNSET(TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ICY_WIND)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_SWIFT)
- | TUTOR(MOVE_FURY_CUTTER)),
-
- [SPECIES_SHARPEDO] = TUTOR_LEARNSET(TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ICY_WIND)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_SWIFT)
- | TUTOR(MOVE_FURY_CUTTER)),
-
- [SPECIES_TRAPINCH] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_ROCK_SLIDE)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)),
-
- [SPECIES_VIBRAVA] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_ROCK_SLIDE)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_SWIFT)),
-
- [SPECIES_FLYGON] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_ROCK_SLIDE)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_SWIFT)
- | TUTOR(MOVE_FIRE_PUNCH)
- | TUTOR(MOVE_FURY_CUTTER)),
-
- [SPECIES_MAKUHITA] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_PUNCH)
- | TUTOR(MOVE_MEGA_KICK)
- | TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_COUNTER)
- | TUTOR(MOVE_SEISMIC_TOSS)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_METRONOME)
- | TUTOR(MOVE_ROCK_SLIDE)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_DYNAMIC_PUNCH)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_ICE_PUNCH)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_THUNDER_PUNCH)
- | TUTOR(MOVE_FIRE_PUNCH)),
-
- [SPECIES_HARIYAMA] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_PUNCH)
- | TUTOR(MOVE_MEGA_KICK)
- | TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_COUNTER)
- | TUTOR(MOVE_SEISMIC_TOSS)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_METRONOME)
- | TUTOR(MOVE_ROCK_SLIDE)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_DYNAMIC_PUNCH)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_ICE_PUNCH)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_THUNDER_PUNCH)
- | TUTOR(MOVE_FIRE_PUNCH)),
-
- [SPECIES_ELECTRIKE] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_THUNDER_WAVE)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_SWIFT)),
-
- [SPECIES_MANECTRIC] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_THUNDER_WAVE)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_SWIFT)),
-
- [SPECIES_NUMEL] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_ROCK_SLIDE)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_ROLLOUT)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_DEFENSE_CURL)),
-
- [SPECIES_CAMERUPT] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_EXPLOSION)
- | TUTOR(MOVE_ROCK_SLIDE)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_ROLLOUT)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_DEFENSE_CURL)),
-
- [SPECIES_SPHEAL] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_ROCK_SLIDE)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_ROLLOUT)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ICY_WIND)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_DEFENSE_CURL)),
-
- [SPECIES_SEALEO] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_ROCK_SLIDE)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_ROLLOUT)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ICY_WIND)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_DEFENSE_CURL)),
-
- [SPECIES_WALREIN] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_ROCK_SLIDE)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_ROLLOUT)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ICY_WIND)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_DEFENSE_CURL)),
-
- [SPECIES_CACNEA] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_PUNCH)
- | TUTOR(MOVE_SWORDS_DANCE)
- | TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_COUNTER)
- | TUTOR(MOVE_SEISMIC_TOSS)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_DYNAMIC_PUNCH)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_THUNDER_PUNCH)
- | TUTOR(MOVE_FURY_CUTTER)),
-
- [SPECIES_CACTURNE] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_PUNCH)
- | TUTOR(MOVE_SWORDS_DANCE)
- | TUTOR(MOVE_MEGA_KICK)
- | TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_COUNTER)
- | TUTOR(MOVE_SEISMIC_TOSS)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_DYNAMIC_PUNCH)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_THUNDER_PUNCH)
- | TUTOR(MOVE_FURY_CUTTER)),
-
- [SPECIES_SNORUNT] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ICY_WIND)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)),
-
- [SPECIES_GLALIE] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_EXPLOSION)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_ROLLOUT)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ICY_WIND)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_DEFENSE_CURL)),
-
- [SPECIES_LUNATONE] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_DREAM_EATER)
- | TUTOR(MOVE_EXPLOSION)
- | TUTOR(MOVE_ROCK_SLIDE)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_ROLLOUT)
- | TUTOR(MOVE_PSYCH_UP)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_SWIFT)
- | TUTOR(MOVE_DEFENSE_CURL)),
-
- [SPECIES_SOLROCK] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_DREAM_EATER)
- | TUTOR(MOVE_EXPLOSION)
- | TUTOR(MOVE_ROCK_SLIDE)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_ROLLOUT)
- | TUTOR(MOVE_PSYCH_UP)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_SWIFT)
- | TUTOR(MOVE_DEFENSE_CURL)),
-
- [SPECIES_AZURILL] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_ROLLOUT)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ICY_WIND)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_SWIFT)
- | TUTOR(MOVE_DEFENSE_CURL)),
-
- [SPECIES_SPOINK] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_DREAM_EATER)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_PSYCH_UP)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ICY_WIND)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_SWIFT)),
-
- [SPECIES_GRUMPIG] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_PUNCH)
- | TUTOR(MOVE_MEGA_KICK)
- | TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_COUNTER)
- | TUTOR(MOVE_SEISMIC_TOSS)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_DREAM_EATER)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_DYNAMIC_PUNCH)
- | TUTOR(MOVE_PSYCH_UP)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ICY_WIND)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_ICE_PUNCH)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_SWIFT)
- | TUTOR(MOVE_THUNDER_PUNCH)
- | TUTOR(MOVE_FIRE_PUNCH)),
-
- [SPECIES_PLUSLE] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_PUNCH)
- | TUTOR(MOVE_MEGA_KICK)
- | TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_COUNTER)
- | TUTOR(MOVE_SEISMIC_TOSS)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_METRONOME)
- | TUTOR(MOVE_THUNDER_WAVE)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_DYNAMIC_PUNCH)
- | TUTOR(MOVE_ROLLOUT)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_SWIFT)
- | TUTOR(MOVE_DEFENSE_CURL)
- | TUTOR(MOVE_THUNDER_PUNCH)),
-
- [SPECIES_MINUN] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_PUNCH)
- | TUTOR(MOVE_MEGA_KICK)
- | TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_COUNTER)
- | TUTOR(MOVE_SEISMIC_TOSS)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_METRONOME)
- | TUTOR(MOVE_THUNDER_WAVE)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_DYNAMIC_PUNCH)
- | TUTOR(MOVE_ROLLOUT)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_SWIFT)
- | TUTOR(MOVE_DEFENSE_CURL)
- | TUTOR(MOVE_THUNDER_PUNCH)),
-
- [SPECIES_MAWILE] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_PUNCH)
- | TUTOR(MOVE_SWORDS_DANCE)
- | TUTOR(MOVE_MEGA_KICK)
- | TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_COUNTER)
- | TUTOR(MOVE_SEISMIC_TOSS)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_ROCK_SLIDE)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_DYNAMIC_PUNCH)
- | TUTOR(MOVE_PSYCH_UP)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ICY_WIND)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_ICE_PUNCH)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_THUNDER_PUNCH)),
-
- [SPECIES_MEDITITE] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_PUNCH)
- | TUTOR(MOVE_MEGA_KICK)
- | TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_COUNTER)
- | TUTOR(MOVE_SEISMIC_TOSS)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_METRONOME)
- | TUTOR(MOVE_DREAM_EATER)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_DYNAMIC_PUNCH)
- | TUTOR(MOVE_PSYCH_UP)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_ICE_PUNCH)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_SWIFT)
- | TUTOR(MOVE_THUNDER_PUNCH)
- | TUTOR(MOVE_FIRE_PUNCH)),
-
- [SPECIES_MEDICHAM] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_PUNCH)
- | TUTOR(MOVE_MEGA_KICK)
- | TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_COUNTER)
- | TUTOR(MOVE_SEISMIC_TOSS)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_METRONOME)
- | TUTOR(MOVE_DREAM_EATER)
- | TUTOR(MOVE_ROCK_SLIDE)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_DYNAMIC_PUNCH)
- | TUTOR(MOVE_PSYCH_UP)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_ICE_PUNCH)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_SWIFT)
- | TUTOR(MOVE_THUNDER_PUNCH)
- | TUTOR(MOVE_FIRE_PUNCH)),
-
- [SPECIES_SWABLU] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_DREAM_EATER)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_PSYCH_UP)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_SWIFT)),
-
- [SPECIES_ALTARIA] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_DREAM_EATER)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_PSYCH_UP)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_SWIFT)),
-
- [SPECIES_WYNAUT] = TUTOR_LEARNSET(0),
-
- [SPECIES_DUSKULL] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_DREAM_EATER)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_PSYCH_UP)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ICY_WIND)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)),
-
- [SPECIES_DUSCLOPS] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_PUNCH)
- | TUTOR(MOVE_MEGA_KICK)
- | TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_COUNTER)
- | TUTOR(MOVE_SEISMIC_TOSS)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_METRONOME)
- | TUTOR(MOVE_DREAM_EATER)
- | TUTOR(MOVE_ROCK_SLIDE)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_DYNAMIC_PUNCH)
- | TUTOR(MOVE_PSYCH_UP)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ICY_WIND)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_ICE_PUNCH)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_THUNDER_PUNCH)
- | TUTOR(MOVE_FIRE_PUNCH)),
-
- [SPECIES_ROSELIA] = TUTOR_LEARNSET(TUTOR(MOVE_SWORDS_DANCE)
- | TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_PSYCH_UP)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_SWIFT)
- | TUTOR(MOVE_FURY_CUTTER)),
-
- [SPECIES_SLAKOTH] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_PUNCH)
- | TUTOR(MOVE_MEGA_KICK)
- | TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_COUNTER)
- | TUTOR(MOVE_SEISMIC_TOSS)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_ROCK_SLIDE)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_DYNAMIC_PUNCH)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ICY_WIND)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_ICE_PUNCH)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_THUNDER_PUNCH)
- | TUTOR(MOVE_FIRE_PUNCH)
- | TUTOR(MOVE_FURY_CUTTER)),
-
- [SPECIES_VIGOROTH] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_PUNCH)
- | TUTOR(MOVE_MEGA_KICK)
- | TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_COUNTER)
- | TUTOR(MOVE_SEISMIC_TOSS)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_ROCK_SLIDE)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_DYNAMIC_PUNCH)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ICY_WIND)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_ICE_PUNCH)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_THUNDER_PUNCH)
- | TUTOR(MOVE_FIRE_PUNCH)
- | TUTOR(MOVE_FURY_CUTTER)),
-
- [SPECIES_SLAKING] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_PUNCH)
- | TUTOR(MOVE_MEGA_KICK)
- | TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_COUNTER)
- | TUTOR(MOVE_SEISMIC_TOSS)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_ROCK_SLIDE)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_DYNAMIC_PUNCH)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ICY_WIND)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_ICE_PUNCH)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_THUNDER_PUNCH)
- | TUTOR(MOVE_FIRE_PUNCH)
- | TUTOR(MOVE_FURY_CUTTER)),
-
- [SPECIES_GULPIN] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_COUNTER)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_DREAM_EATER)
- | TUTOR(MOVE_EXPLOSION)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_DYNAMIC_PUNCH)
- | TUTOR(MOVE_ROLLOUT)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_ICE_PUNCH)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_DEFENSE_CURL)
- | TUTOR(MOVE_THUNDER_PUNCH)
- | TUTOR(MOVE_FIRE_PUNCH)),
-
- [SPECIES_SWALOT] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_COUNTER)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_DREAM_EATER)
- | TUTOR(MOVE_EXPLOSION)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_DYNAMIC_PUNCH)
- | TUTOR(MOVE_ROLLOUT)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_ICE_PUNCH)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_DEFENSE_CURL)
- | TUTOR(MOVE_THUNDER_PUNCH)
- | TUTOR(MOVE_FIRE_PUNCH)),
-
- [SPECIES_TROPIUS] = TUTOR_LEARNSET(TUTOR(MOVE_SWORDS_DANCE)
- | TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_FURY_CUTTER)),
-
- [SPECIES_WHISMUR] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_PUNCH)
- | TUTOR(MOVE_MEGA_KICK)
- | TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_COUNTER)
- | TUTOR(MOVE_SEISMIC_TOSS)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_DYNAMIC_PUNCH)
- | TUTOR(MOVE_ROLLOUT)
- | TUTOR(MOVE_PSYCH_UP)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ICY_WIND)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_ICE_PUNCH)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_DEFENSE_CURL)
- | TUTOR(MOVE_THUNDER_PUNCH)
- | TUTOR(MOVE_FIRE_PUNCH)),
-
- [SPECIES_LOUDRED] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_PUNCH)
- | TUTOR(MOVE_MEGA_KICK)
- | TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_COUNTER)
- | TUTOR(MOVE_SEISMIC_TOSS)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_ROCK_SLIDE)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_DYNAMIC_PUNCH)
- | TUTOR(MOVE_ROLLOUT)
- | TUTOR(MOVE_PSYCH_UP)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ICY_WIND)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_ICE_PUNCH)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_DEFENSE_CURL)
- | TUTOR(MOVE_THUNDER_PUNCH)
- | TUTOR(MOVE_FIRE_PUNCH)),
-
- [SPECIES_EXPLOUD] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_PUNCH)
- | TUTOR(MOVE_MEGA_KICK)
- | TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_COUNTER)
- | TUTOR(MOVE_SEISMIC_TOSS)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_ROCK_SLIDE)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_DYNAMIC_PUNCH)
- | TUTOR(MOVE_ROLLOUT)
- | TUTOR(MOVE_PSYCH_UP)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ICY_WIND)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_ICE_PUNCH)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_DEFENSE_CURL)
- | TUTOR(MOVE_THUNDER_PUNCH)
- | TUTOR(MOVE_FIRE_PUNCH)),
-
- [SPECIES_CLAMPERL] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ICY_WIND)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)),
-
- [SPECIES_HUNTAIL] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ICY_WIND)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_SWIFT)),
-
- [SPECIES_GOREBYSS] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ICY_WIND)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_SWIFT)),
-
- [SPECIES_ABSOL] = TUTOR_LEARNSET(TUTOR(MOVE_SWORDS_DANCE)
- | TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_COUNTER)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_DREAM_EATER)
- | TUTOR(MOVE_THUNDER_WAVE)
- | TUTOR(MOVE_ROCK_SLIDE)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_PSYCH_UP)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ICY_WIND)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_SWIFT)
- | TUTOR(MOVE_FURY_CUTTER)),
-
- [SPECIES_SHUPPET] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_DREAM_EATER)
- | TUTOR(MOVE_THUNDER_WAVE)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_PSYCH_UP)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ICY_WIND)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)),
-
- [SPECIES_BANETTE] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_METRONOME)
- | TUTOR(MOVE_DREAM_EATER)
- | TUTOR(MOVE_THUNDER_WAVE)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_PSYCH_UP)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ICY_WIND)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)),
-
- [SPECIES_SEVIPER] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_SWIFT)
- | TUTOR(MOVE_FURY_CUTTER)),
-
- [SPECIES_ZANGOOSE] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_PUNCH)
- | TUTOR(MOVE_SWORDS_DANCE)
- | TUTOR(MOVE_MEGA_KICK)
- | TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_COUNTER)
- | TUTOR(MOVE_SEISMIC_TOSS)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_THUNDER_WAVE)
- | TUTOR(MOVE_ROCK_SLIDE)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_DYNAMIC_PUNCH)
- | TUTOR(MOVE_ROLLOUT)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ICY_WIND)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_ICE_PUNCH)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_SWIFT)
- | TUTOR(MOVE_DEFENSE_CURL)
- | TUTOR(MOVE_THUNDER_PUNCH)
- | TUTOR(MOVE_FIRE_PUNCH)
- | TUTOR(MOVE_FURY_CUTTER)),
-
- [SPECIES_RELICANTH] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_ROCK_SLIDE)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_PSYCH_UP)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ICY_WIND)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)),
-
- [SPECIES_ARON] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_ROCK_SLIDE)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_ROLLOUT)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_DEFENSE_CURL)
- | TUTOR(MOVE_FURY_CUTTER)),
-
- [SPECIES_LAIRON] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_ROCK_SLIDE)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_ROLLOUT)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_DEFENSE_CURL)
- | TUTOR(MOVE_FURY_CUTTER)),
-
- [SPECIES_AGGRON] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_PUNCH)
- | TUTOR(MOVE_MEGA_KICK)
- | TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_COUNTER)
- | TUTOR(MOVE_SEISMIC_TOSS)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_THUNDER_WAVE)
- | TUTOR(MOVE_ROCK_SLIDE)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_DYNAMIC_PUNCH)
- | TUTOR(MOVE_ROLLOUT)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ICY_WIND)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_ICE_PUNCH)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_DEFENSE_CURL)
- | TUTOR(MOVE_THUNDER_PUNCH)
- | TUTOR(MOVE_FIRE_PUNCH)
- | TUTOR(MOVE_FURY_CUTTER)),
-
- [SPECIES_CASTFORM] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_THUNDER_WAVE)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_PSYCH_UP)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ICY_WIND)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_SWIFT)
- | TUTOR(MOVE_DEFENSE_CURL)),
-
- [SPECIES_VOLBEAT] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_PUNCH)
- | TUTOR(MOVE_MEGA_KICK)
- | TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_COUNTER)
- | TUTOR(MOVE_SEISMIC_TOSS)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_METRONOME)
- | TUTOR(MOVE_THUNDER_WAVE)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_DYNAMIC_PUNCH)
- | TUTOR(MOVE_PSYCH_UP)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_ICE_PUNCH)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_SWIFT)
- | TUTOR(MOVE_THUNDER_PUNCH)),
-
- [SPECIES_ILLUMISE] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_PUNCH)
- | TUTOR(MOVE_MEGA_KICK)
- | TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_COUNTER)
- | TUTOR(MOVE_SEISMIC_TOSS)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_METRONOME)
- | TUTOR(MOVE_THUNDER_WAVE)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_DYNAMIC_PUNCH)
- | TUTOR(MOVE_PSYCH_UP)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_ICE_PUNCH)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_SWIFT)
- | TUTOR(MOVE_THUNDER_PUNCH)),
-
- [SPECIES_LILEEP] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_ROCK_SLIDE)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_PSYCH_UP)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)),
-
- [SPECIES_CRADILY] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_ROCK_SLIDE)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_PSYCH_UP)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)),
-
- [SPECIES_ANORITH] = TUTOR_LEARNSET(TUTOR(MOVE_SWORDS_DANCE)
- | TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_ROCK_SLIDE)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_FURY_CUTTER)),
-
- [SPECIES_ARMALDO] = TUTOR_LEARNSET(TUTOR(MOVE_SWORDS_DANCE)
- | TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_SEISMIC_TOSS)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_ROCK_SLIDE)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_FURY_CUTTER)),
-
- [SPECIES_RALTS] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_DREAM_EATER)
- | TUTOR(MOVE_THUNDER_WAVE)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_PSYCH_UP)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ICY_WIND)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_ICE_PUNCH)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_DEFENSE_CURL)
- | TUTOR(MOVE_THUNDER_PUNCH)
- | TUTOR(MOVE_FIRE_PUNCH)),
-
- [SPECIES_KIRLIA] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_DREAM_EATER)
- | TUTOR(MOVE_THUNDER_WAVE)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_PSYCH_UP)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ICY_WIND)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_ICE_PUNCH)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_DEFENSE_CURL)
- | TUTOR(MOVE_THUNDER_PUNCH)
- | TUTOR(MOVE_FIRE_PUNCH)),
-
- [SPECIES_GARDEVOIR] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_DREAM_EATER)
- | TUTOR(MOVE_THUNDER_WAVE)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_PSYCH_UP)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ICY_WIND)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_ICE_PUNCH)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_DEFENSE_CURL)
- | TUTOR(MOVE_THUNDER_PUNCH)
- | TUTOR(MOVE_FIRE_PUNCH)),
-
- [SPECIES_BAGON] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_ROCK_SLIDE)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_FURY_CUTTER)),
-
- [SPECIES_SHELGON] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_ROCK_SLIDE)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_ROLLOUT)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_DEFENSE_CURL)
- | TUTOR(MOVE_FURY_CUTTER)),
-
- [SPECIES_SALAMENCE] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_ROCK_SLIDE)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_ROLLOUT)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_SWIFT)
- | TUTOR(MOVE_DEFENSE_CURL)
- | TUTOR(MOVE_FURY_CUTTER)),
-
- [SPECIES_BELDUM] = TUTOR_LEARNSET(0),
-
- [SPECIES_METANG] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_EXPLOSION)
- | TUTOR(MOVE_ROCK_SLIDE)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_DYNAMIC_PUNCH)
- | TUTOR(MOVE_ROLLOUT)
- | TUTOR(MOVE_PSYCH_UP)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ICY_WIND)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_ICE_PUNCH)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_SWIFT)
- | TUTOR(MOVE_DEFENSE_CURL)
- | TUTOR(MOVE_THUNDER_PUNCH)
- | TUTOR(MOVE_FURY_CUTTER)),
-
- [SPECIES_METAGROSS] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_EXPLOSION)
- | TUTOR(MOVE_ROCK_SLIDE)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_DYNAMIC_PUNCH)
- | TUTOR(MOVE_ROLLOUT)
- | TUTOR(MOVE_PSYCH_UP)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ICY_WIND)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_ICE_PUNCH)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_SWIFT)
- | TUTOR(MOVE_DEFENSE_CURL)
- | TUTOR(MOVE_THUNDER_PUNCH)
- | TUTOR(MOVE_FURY_CUTTER)),
-
- [SPECIES_REGIROCK] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_PUNCH)
- | TUTOR(MOVE_MEGA_KICK)
- | TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_COUNTER)
- | TUTOR(MOVE_SEISMIC_TOSS)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_THUNDER_WAVE)
- | TUTOR(MOVE_EXPLOSION)
- | TUTOR(MOVE_ROCK_SLIDE)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_DYNAMIC_PUNCH)
- | TUTOR(MOVE_ROLLOUT)
- | TUTOR(MOVE_PSYCH_UP)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_ICE_PUNCH)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_DEFENSE_CURL)
- | TUTOR(MOVE_THUNDER_PUNCH)
- | TUTOR(MOVE_FIRE_PUNCH)),
-
- [SPECIES_REGICE] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_PUNCH)
- | TUTOR(MOVE_MEGA_KICK)
- | TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_COUNTER)
- | TUTOR(MOVE_SEISMIC_TOSS)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_THUNDER_WAVE)
- | TUTOR(MOVE_EXPLOSION)
- | TUTOR(MOVE_ROCK_SLIDE)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_DYNAMIC_PUNCH)
- | TUTOR(MOVE_ROLLOUT)
- | TUTOR(MOVE_PSYCH_UP)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ICY_WIND)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_ICE_PUNCH)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_DEFENSE_CURL)
- | TUTOR(MOVE_THUNDER_PUNCH)),
-
- [SPECIES_REGISTEEL] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_PUNCH)
- | TUTOR(MOVE_MEGA_KICK)
- | TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_COUNTER)
- | TUTOR(MOVE_SEISMIC_TOSS)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_THUNDER_WAVE)
- | TUTOR(MOVE_EXPLOSION)
- | TUTOR(MOVE_ROCK_SLIDE)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_DYNAMIC_PUNCH)
- | TUTOR(MOVE_ROLLOUT)
- | TUTOR(MOVE_PSYCH_UP)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_ICE_PUNCH)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_DEFENSE_CURL)
- | TUTOR(MOVE_THUNDER_PUNCH)),
-
- [SPECIES_KYOGRE] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_THUNDER_WAVE)
- | TUTOR(MOVE_ROCK_SLIDE)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_PSYCH_UP)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ICY_WIND)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_SWIFT)
- | TUTOR(MOVE_DEFENSE_CURL)),
-
- [SPECIES_GROUDON] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_PUNCH)
- | TUTOR(MOVE_SWORDS_DANCE)
- | TUTOR(MOVE_MEGA_KICK)
- | TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_COUNTER)
- | TUTOR(MOVE_SEISMIC_TOSS)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_THUNDER_WAVE)
- | TUTOR(MOVE_ROCK_SLIDE)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_DYNAMIC_PUNCH)
- | TUTOR(MOVE_ROLLOUT)
- | TUTOR(MOVE_PSYCH_UP)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_SWIFT)
- | TUTOR(MOVE_DEFENSE_CURL)
- | TUTOR(MOVE_THUNDER_PUNCH)
- | TUTOR(MOVE_FIRE_PUNCH)
- | TUTOR(MOVE_FURY_CUTTER)),
-
- [SPECIES_RAYQUAZA] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_THUNDER_WAVE)
- | TUTOR(MOVE_ROCK_SLIDE)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_PSYCH_UP)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ICY_WIND)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_SWIFT)
- | TUTOR(MOVE_FURY_CUTTER)),
-
- [SPECIES_LATIAS] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_DREAM_EATER)
- | TUTOR(MOVE_THUNDER_WAVE)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_PSYCH_UP)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ICY_WIND)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_SWIFT)
- | TUTOR(MOVE_FURY_CUTTER)),
-
- [SPECIES_LATIOS] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_DREAM_EATER)
- | TUTOR(MOVE_THUNDER_WAVE)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_PSYCH_UP)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ICY_WIND)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_SWIFT)
- | TUTOR(MOVE_FURY_CUTTER)),
-
- [SPECIES_JIRACHI] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_METRONOME)
- | TUTOR(MOVE_DREAM_EATER)
- | TUTOR(MOVE_THUNDER_WAVE)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_DYNAMIC_PUNCH)
- | TUTOR(MOVE_PSYCH_UP)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ICY_WIND)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_ICE_PUNCH)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_SWIFT)
- | TUTOR(MOVE_DEFENSE_CURL)
- | TUTOR(MOVE_THUNDER_PUNCH)
- | TUTOR(MOVE_FIRE_PUNCH)),
-
- [SPECIES_DEOXYS] = TUTOR_LEARNSET(TUTOR(MOVE_MEGA_PUNCH)
- | TUTOR(MOVE_MEGA_KICK)
- | TUTOR(MOVE_BODY_SLAM)
- | TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_COUNTER)
- | TUTOR(MOVE_SEISMIC_TOSS)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_DREAM_EATER)
- | TUTOR(MOVE_THUNDER_WAVE)
- | TUTOR(MOVE_ROCK_SLIDE)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_DYNAMIC_PUNCH)
- | TUTOR(MOVE_PSYCH_UP)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ICY_WIND)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_MUD_SLAP)
- | TUTOR(MOVE_ICE_PUNCH)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_SWIFT)
- | TUTOR(MOVE_THUNDER_PUNCH)
- | TUTOR(MOVE_FIRE_PUNCH)),
-
- [SPECIES_CHIMECHO] = TUTOR_LEARNSET(TUTOR(MOVE_DOUBLE_EDGE)
- | TUTOR(MOVE_MIMIC)
- | TUTOR(MOVE_DREAM_EATER)
- | TUTOR(MOVE_SUBSTITUTE)
- | TUTOR(MOVE_ROLLOUT)
- | TUTOR(MOVE_PSYCH_UP)
- | TUTOR(MOVE_SNORE)
- | TUTOR(MOVE_ICY_WIND)
- | TUTOR(MOVE_ENDURE)
- | TUTOR(MOVE_SWAGGER)
- | TUTOR(MOVE_SLEEP_TALK)
- | TUTOR(MOVE_DEFENSE_CURL)),
+ [SPECIES_NONE] = (0),
+
+ [SPECIES_BULBASAUR] = (TUTOR(MOVE_SWORDS_DANCE)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_DEFENSE_CURL)
+ | TUTOR(MOVE_FURY_CUTTER)),
+
+ [SPECIES_IVYSAUR] = (TUTOR(MOVE_SWORDS_DANCE)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_DEFENSE_CURL)
+ | TUTOR(MOVE_FURY_CUTTER)),
+
+ [SPECIES_VENUSAUR] = (TUTOR(MOVE_SWORDS_DANCE)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_DEFENSE_CURL)
+ | TUTOR(MOVE_FURY_CUTTER)),
+
+ [SPECIES_CHARMANDER] = (TUTOR(MOVE_MEGA_PUNCH)
+ | TUTOR(MOVE_SWORDS_DANCE)
+ | TUTOR(MOVE_MEGA_KICK)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_ROCK_SLIDE)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_DYNAMIC_PUNCH)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_SWIFT)
+ | TUTOR(MOVE_DEFENSE_CURL)
+ | TUTOR(MOVE_FIRE_PUNCH)
+ | TUTOR(MOVE_FURY_CUTTER)),
+
+ [SPECIES_CHARMELEON] = (TUTOR(MOVE_MEGA_PUNCH)
+ | TUTOR(MOVE_SWORDS_DANCE)
+ | TUTOR(MOVE_MEGA_KICK)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_ROCK_SLIDE)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_DYNAMIC_PUNCH)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_SWIFT)
+ | TUTOR(MOVE_DEFENSE_CURL)
+ | TUTOR(MOVE_FIRE_PUNCH)
+ | TUTOR(MOVE_FURY_CUTTER)),
+
+ [SPECIES_CHARIZARD] = (TUTOR(MOVE_MEGA_PUNCH)
+ | TUTOR(MOVE_SWORDS_DANCE)
+ | TUTOR(MOVE_MEGA_KICK)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_ROCK_SLIDE)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_DYNAMIC_PUNCH)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_SWIFT)
+ | TUTOR(MOVE_DEFENSE_CURL)
+ | TUTOR(MOVE_FIRE_PUNCH)
+ | TUTOR(MOVE_FURY_CUTTER)),
+
+ [SPECIES_SQUIRTLE] = (TUTOR(MOVE_MEGA_PUNCH)
+ | TUTOR(MOVE_MEGA_KICK)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_DYNAMIC_PUNCH)
+ | TUTOR(MOVE_ROLLOUT)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ICY_WIND)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_ICE_PUNCH)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_DEFENSE_CURL)),
+
+ [SPECIES_WARTORTLE] = (TUTOR(MOVE_MEGA_PUNCH)
+ | TUTOR(MOVE_MEGA_KICK)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_DYNAMIC_PUNCH)
+ | TUTOR(MOVE_ROLLOUT)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ICY_WIND)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_ICE_PUNCH)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_DEFENSE_CURL)),
+
+ [SPECIES_BLASTOISE] = (TUTOR(MOVE_MEGA_PUNCH)
+ | TUTOR(MOVE_MEGA_KICK)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_DYNAMIC_PUNCH)
+ | TUTOR(MOVE_ROLLOUT)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ICY_WIND)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_ICE_PUNCH)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_DEFENSE_CURL)),
+
+ [SPECIES_CATERPIE] = (0),
+
+ [SPECIES_METAPOD] = (0),
+
+ [SPECIES_BUTTERFREE] = (TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_DREAM_EATER)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_SWIFT)),
+
+ [SPECIES_WEEDLE] = (0),
+
+ [SPECIES_KAKUNA] = (0),
+
+ [SPECIES_BEEDRILL] = (TUTOR(MOVE_SWORDS_DANCE)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_SWIFT)
+ | TUTOR(MOVE_FURY_CUTTER)),
+
+ [SPECIES_PIDGEY] = (TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_SWIFT)),
+
+ [SPECIES_PIDGEOTTO] = (TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_SWIFT)),
+
+ [SPECIES_PIDGEOT] = (TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_SWIFT)),
+
+ [SPECIES_RATTATA] = (TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_THUNDER_WAVE)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ICY_WIND)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_SWIFT)
+ | TUTOR(MOVE_DEFENSE_CURL)),
+
+ [SPECIES_RATICATE] = (TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_THUNDER_WAVE)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ICY_WIND)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_SWIFT)
+ | TUTOR(MOVE_DEFENSE_CURL)),
+
+ [SPECIES_SPEAROW] = (TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_SWIFT)),
+
+ [SPECIES_FEAROW] = (TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_SWIFT)),
+
+ [SPECIES_EKANS] = (TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_ROCK_SLIDE)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)),
+
+ [SPECIES_ARBOK] = (TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_ROCK_SLIDE)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)),
+
+ [SPECIES_PIKACHU] = (TUTOR(MOVE_MEGA_PUNCH)
+ | TUTOR(MOVE_MEGA_KICK)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_THUNDER_WAVE)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_DYNAMIC_PUNCH)
+ | TUTOR(MOVE_ROLLOUT)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_SWIFT)
+ | TUTOR(MOVE_DEFENSE_CURL)
+ | TUTOR(MOVE_THUNDER_PUNCH)),
+
+ [SPECIES_RAICHU] = (TUTOR(MOVE_MEGA_PUNCH)
+ | TUTOR(MOVE_MEGA_KICK)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_THUNDER_WAVE)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_DYNAMIC_PUNCH)
+ | TUTOR(MOVE_ROLLOUT)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_SWIFT)
+ | TUTOR(MOVE_DEFENSE_CURL)
+ | TUTOR(MOVE_THUNDER_PUNCH)),
+
+ [SPECIES_SANDSHREW] = (TUTOR(MOVE_SWORDS_DANCE)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_ROCK_SLIDE)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_DYNAMIC_PUNCH)
+ | TUTOR(MOVE_ROLLOUT)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_SWIFT)
+ | TUTOR(MOVE_DEFENSE_CURL)
+ | TUTOR(MOVE_FURY_CUTTER)),
+
+ [SPECIES_SANDSLASH] = (TUTOR(MOVE_SWORDS_DANCE)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_ROCK_SLIDE)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_DYNAMIC_PUNCH)
+ | TUTOR(MOVE_ROLLOUT)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_SWIFT)
+ | TUTOR(MOVE_DEFENSE_CURL)
+ | TUTOR(MOVE_FURY_CUTTER)),
+
+ [SPECIES_NIDORAN_F] = (TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_DEFENSE_CURL)),
+
+ [SPECIES_NIDORINA] = (TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_DEFENSE_CURL)),
+
+ [SPECIES_NIDOQUEEN] = (TUTOR(MOVE_MEGA_PUNCH)
+ | TUTOR(MOVE_MEGA_KICK)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_ROCK_SLIDE)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_DYNAMIC_PUNCH)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ICY_WIND)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_ICE_PUNCH)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_DEFENSE_CURL)
+ | TUTOR(MOVE_THUNDER_PUNCH)
+ | TUTOR(MOVE_FIRE_PUNCH)
+ | TUTOR(MOVE_FURY_CUTTER)),
+
+ [SPECIES_NIDORAN_M] = (TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_DEFENSE_CURL)),
+
+ [SPECIES_NIDORINO] = (TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_DEFENSE_CURL)),
+
+ [SPECIES_NIDOKING] = (TUTOR(MOVE_MEGA_PUNCH)
+ | TUTOR(MOVE_MEGA_KICK)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_ROCK_SLIDE)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_DYNAMIC_PUNCH)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ICY_WIND)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_ICE_PUNCH)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_DEFENSE_CURL)
+ | TUTOR(MOVE_THUNDER_PUNCH)
+ | TUTOR(MOVE_FIRE_PUNCH)
+ | TUTOR(MOVE_FURY_CUTTER)),
+
+ [SPECIES_CLEFAIRY] = (TUTOR(MOVE_MEGA_PUNCH)
+ | TUTOR(MOVE_MEGA_KICK)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_METRONOME)
+ | TUTOR(MOVE_SOFT_BOILED)
+ | TUTOR(MOVE_DREAM_EATER)
+ | TUTOR(MOVE_THUNDER_WAVE)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_DYNAMIC_PUNCH)
+ | TUTOR(MOVE_ROLLOUT)
+ | TUTOR(MOVE_PSYCH_UP)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_ICE_PUNCH)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_DEFENSE_CURL)
+ | TUTOR(MOVE_THUNDER_PUNCH)
+ | TUTOR(MOVE_FIRE_PUNCH)),
+
+ [SPECIES_CLEFABLE] = (TUTOR(MOVE_MEGA_PUNCH)
+ | TUTOR(MOVE_MEGA_KICK)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_METRONOME)
+ | TUTOR(MOVE_SOFT_BOILED)
+ | TUTOR(MOVE_DREAM_EATER)
+ | TUTOR(MOVE_THUNDER_WAVE)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_DYNAMIC_PUNCH)
+ | TUTOR(MOVE_ROLLOUT)
+ | TUTOR(MOVE_PSYCH_UP)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_ICE_PUNCH)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_DEFENSE_CURL)
+ | TUTOR(MOVE_THUNDER_PUNCH)
+ | TUTOR(MOVE_FIRE_PUNCH)),
+
+ [SPECIES_VULPIX] = (TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_SWIFT)),
+
+ [SPECIES_NINETALES] = (TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_SWIFT)),
+
+ [SPECIES_JIGGLYPUFF] = (TUTOR(MOVE_MEGA_PUNCH)
+ | TUTOR(MOVE_MEGA_KICK)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_DREAM_EATER)
+ | TUTOR(MOVE_THUNDER_WAVE)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_DYNAMIC_PUNCH)
+ | TUTOR(MOVE_ROLLOUT)
+ | TUTOR(MOVE_PSYCH_UP)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_ICE_PUNCH)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_DEFENSE_CURL)
+ | TUTOR(MOVE_THUNDER_PUNCH)
+ | TUTOR(MOVE_FIRE_PUNCH)),
+
+ [SPECIES_WIGGLYTUFF] = (TUTOR(MOVE_MEGA_PUNCH)
+ | TUTOR(MOVE_MEGA_KICK)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_DREAM_EATER)
+ | TUTOR(MOVE_THUNDER_WAVE)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_DYNAMIC_PUNCH)
+ | TUTOR(MOVE_ROLLOUT)
+ | TUTOR(MOVE_PSYCH_UP)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_ICE_PUNCH)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_DEFENSE_CURL)
+ | TUTOR(MOVE_THUNDER_PUNCH)
+ | TUTOR(MOVE_FIRE_PUNCH)),
+
+ [SPECIES_ZUBAT] = (TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_SWIFT)),
+
+ [SPECIES_GOLBAT] = (TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_SWIFT)),
+
+ [SPECIES_ODDISH] = (TUTOR(MOVE_SWORDS_DANCE)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)),
+
+ [SPECIES_GLOOM] = (TUTOR(MOVE_SWORDS_DANCE)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)),
+
+ [SPECIES_VILEPLUME] = (TUTOR(MOVE_SWORDS_DANCE)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)),
+
+ [SPECIES_PARAS] = (TUTOR(MOVE_SWORDS_DANCE)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_FURY_CUTTER)),
+
+ [SPECIES_PARASECT] = (TUTOR(MOVE_SWORDS_DANCE)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_FURY_CUTTER)),
+
+ [SPECIES_VENONAT] = (TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_SWIFT)),
+
+ [SPECIES_VENOMOTH] = (TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_SWIFT)),
+
+ [SPECIES_DIGLETT] = (TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_ROCK_SLIDE)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)),
+
+ [SPECIES_DUGTRIO] = (TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_ROCK_SLIDE)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)),
+
+ [SPECIES_MEOWTH] = (TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_DREAM_EATER)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_PSYCH_UP)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ICY_WIND)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_SWIFT)
+ | TUTOR(MOVE_DEFENSE_CURL)),
+
+ [SPECIES_PERSIAN] = (TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_DREAM_EATER)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_PSYCH_UP)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ICY_WIND)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_SWIFT)
+ | TUTOR(MOVE_DEFENSE_CURL)),
+
+ [SPECIES_PSYDUCK] = (TUTOR(MOVE_MEGA_PUNCH)
+ | TUTOR(MOVE_MEGA_KICK)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_DYNAMIC_PUNCH)
+ | TUTOR(MOVE_PSYCH_UP)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ICY_WIND)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_ICE_PUNCH)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_SWIFT)),
+
+ [SPECIES_GOLDUCK] = (TUTOR(MOVE_MEGA_PUNCH)
+ | TUTOR(MOVE_MEGA_KICK)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_DYNAMIC_PUNCH)
+ | TUTOR(MOVE_PSYCH_UP)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ICY_WIND)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_ICE_PUNCH)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_SWIFT)
+ | TUTOR(MOVE_FURY_CUTTER)),
+
+ [SPECIES_MANKEY] = (TUTOR(MOVE_MEGA_PUNCH)
+ | TUTOR(MOVE_MEGA_KICK)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_METRONOME)
+ | TUTOR(MOVE_ROCK_SLIDE)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_DYNAMIC_PUNCH)
+ | TUTOR(MOVE_PSYCH_UP)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_ICE_PUNCH)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_SWIFT)
+ | TUTOR(MOVE_DEFENSE_CURL)
+ | TUTOR(MOVE_THUNDER_PUNCH)
+ | TUTOR(MOVE_FIRE_PUNCH)),
+
+ [SPECIES_PRIMEAPE] = (TUTOR(MOVE_MEGA_PUNCH)
+ | TUTOR(MOVE_MEGA_KICK)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_METRONOME)
+ | TUTOR(MOVE_ROCK_SLIDE)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_DYNAMIC_PUNCH)
+ | TUTOR(MOVE_PSYCH_UP)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_ICE_PUNCH)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_SWIFT)
+ | TUTOR(MOVE_DEFENSE_CURL)
+ | TUTOR(MOVE_THUNDER_PUNCH)
+ | TUTOR(MOVE_FIRE_PUNCH)),
+
+ [SPECIES_GROWLITHE] = (TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_SWIFT)),
+
+ [SPECIES_ARCANINE] = (TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_SWIFT)),
+
+ [SPECIES_POLIWAG] = (TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ICY_WIND)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_DEFENSE_CURL)),
+
+ [SPECIES_POLIWHIRL] = (TUTOR(MOVE_MEGA_PUNCH)
+ | TUTOR(MOVE_MEGA_KICK)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_METRONOME)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ICY_WIND)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_ICE_PUNCH)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_DEFENSE_CURL)),
+
+ [SPECIES_POLIWRATH] = (TUTOR(MOVE_MEGA_PUNCH)
+ | TUTOR(MOVE_MEGA_KICK)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_METRONOME)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_DYNAMIC_PUNCH)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ICY_WIND)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_ICE_PUNCH)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_DEFENSE_CURL)),
+
+ [SPECIES_ABRA] = (TUTOR(MOVE_MEGA_PUNCH)
+ | TUTOR(MOVE_MEGA_KICK)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_METRONOME)
+ | TUTOR(MOVE_DREAM_EATER)
+ | TUTOR(MOVE_THUNDER_WAVE)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_DYNAMIC_PUNCH)
+ | TUTOR(MOVE_PSYCH_UP)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_ICE_PUNCH)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_THUNDER_PUNCH)
+ | TUTOR(MOVE_FIRE_PUNCH)),
+
+ [SPECIES_KADABRA] = (TUTOR(MOVE_MEGA_PUNCH)
+ | TUTOR(MOVE_MEGA_KICK)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_METRONOME)
+ | TUTOR(MOVE_DREAM_EATER)
+ | TUTOR(MOVE_THUNDER_WAVE)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_DYNAMIC_PUNCH)
+ | TUTOR(MOVE_PSYCH_UP)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_ICE_PUNCH)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_THUNDER_PUNCH)
+ | TUTOR(MOVE_FIRE_PUNCH)),
+
+ [SPECIES_ALAKAZAM] = (TUTOR(MOVE_MEGA_PUNCH)
+ | TUTOR(MOVE_MEGA_KICK)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_METRONOME)
+ | TUTOR(MOVE_DREAM_EATER)
+ | TUTOR(MOVE_THUNDER_WAVE)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_DYNAMIC_PUNCH)
+ | TUTOR(MOVE_PSYCH_UP)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_ICE_PUNCH)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_THUNDER_PUNCH)
+ | TUTOR(MOVE_FIRE_PUNCH)),
+
+ [SPECIES_MACHOP] = (TUTOR(MOVE_MEGA_PUNCH)
+ | TUTOR(MOVE_MEGA_KICK)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_METRONOME)
+ | TUTOR(MOVE_ROCK_SLIDE)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_DYNAMIC_PUNCH)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_ICE_PUNCH)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_THUNDER_PUNCH)
+ | TUTOR(MOVE_FIRE_PUNCH)),
+
+ [SPECIES_MACHOKE] = (TUTOR(MOVE_MEGA_PUNCH)
+ | TUTOR(MOVE_MEGA_KICK)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_METRONOME)
+ | TUTOR(MOVE_ROCK_SLIDE)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_DYNAMIC_PUNCH)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_ICE_PUNCH)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_THUNDER_PUNCH)
+ | TUTOR(MOVE_FIRE_PUNCH)),
+
+ [SPECIES_MACHAMP] = (TUTOR(MOVE_MEGA_PUNCH)
+ | TUTOR(MOVE_MEGA_KICK)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_METRONOME)
+ | TUTOR(MOVE_ROCK_SLIDE)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_DYNAMIC_PUNCH)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_ICE_PUNCH)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_THUNDER_PUNCH)
+ | TUTOR(MOVE_FIRE_PUNCH)),
+
+ [SPECIES_BELLSPROUT] = (TUTOR(MOVE_SWORDS_DANCE)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)),
+
+ [SPECIES_WEEPINBELL] = (TUTOR(MOVE_SWORDS_DANCE)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)),
+
+ [SPECIES_VICTREEBEL] = (TUTOR(MOVE_SWORDS_DANCE)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)),
+
+ [SPECIES_TENTACOOL] = (TUTOR(MOVE_SWORDS_DANCE)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ICY_WIND)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)),
+
+ [SPECIES_TENTACRUEL] = (TUTOR(MOVE_SWORDS_DANCE)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ICY_WIND)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)),
+
+ [SPECIES_GEODUDE] = (TUTOR(MOVE_MEGA_PUNCH)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_METRONOME)
+ | TUTOR(MOVE_EXPLOSION)
+ | TUTOR(MOVE_ROCK_SLIDE)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_DYNAMIC_PUNCH)
+ | TUTOR(MOVE_ROLLOUT)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_DEFENSE_CURL)
+ | TUTOR(MOVE_FIRE_PUNCH)),
+
+ [SPECIES_GRAVELER] = (TUTOR(MOVE_MEGA_PUNCH)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_METRONOME)
+ | TUTOR(MOVE_EXPLOSION)
+ | TUTOR(MOVE_ROCK_SLIDE)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_DYNAMIC_PUNCH)
+ | TUTOR(MOVE_ROLLOUT)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_DEFENSE_CURL)
+ | TUTOR(MOVE_FIRE_PUNCH)),
+
+ [SPECIES_GOLEM] = (TUTOR(MOVE_MEGA_PUNCH)
+ | TUTOR(MOVE_MEGA_KICK)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_METRONOME)
+ | TUTOR(MOVE_EXPLOSION)
+ | TUTOR(MOVE_ROCK_SLIDE)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_DYNAMIC_PUNCH)
+ | TUTOR(MOVE_ROLLOUT)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_DEFENSE_CURL)
+ | TUTOR(MOVE_FIRE_PUNCH)
+ | TUTOR(MOVE_FURY_CUTTER)),
+
+ [SPECIES_PONYTA] = (TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_SWIFT)),
+
+ [SPECIES_RAPIDASH] = (TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_SWIFT)),
+
+ [SPECIES_SLOWPOKE] = (TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_DREAM_EATER)
+ | TUTOR(MOVE_THUNDER_WAVE)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_PSYCH_UP)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ICY_WIND)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_SWIFT)),
+
+ [SPECIES_SLOWBRO] = (TUTOR(MOVE_MEGA_PUNCH)
+ | TUTOR(MOVE_MEGA_KICK)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_DREAM_EATER)
+ | TUTOR(MOVE_THUNDER_WAVE)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_DYNAMIC_PUNCH)
+ | TUTOR(MOVE_PSYCH_UP)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ICY_WIND)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_ICE_PUNCH)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_SWIFT)
+ | TUTOR(MOVE_FURY_CUTTER)),
+
+ [SPECIES_MAGNEMITE] = (TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_THUNDER_WAVE)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_ROLLOUT)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_SWIFT)),
+
+ [SPECIES_MAGNETON] = (TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_THUNDER_WAVE)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_ROLLOUT)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_SWIFT)),
+
+ [SPECIES_FARFETCHD] = (TUTOR(MOVE_SWORDS_DANCE)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_PSYCH_UP)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_SWIFT)),
+
+ [SPECIES_DODUO] = (TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_SWIFT)),
+
+ [SPECIES_DODRIO] = (TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_SWIFT)),
+
+ [SPECIES_SEEL] = (TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ICY_WIND)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)),
+
+ [SPECIES_DEWGONG] = (TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ICY_WIND)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)),
+
+ [SPECIES_GRIMER] = (TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_EXPLOSION)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_DYNAMIC_PUNCH)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_ICE_PUNCH)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_THUNDER_PUNCH)
+ | TUTOR(MOVE_FIRE_PUNCH)),
+
+ [SPECIES_MUK] = (TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_EXPLOSION)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_DYNAMIC_PUNCH)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_ICE_PUNCH)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_THUNDER_PUNCH)
+ | TUTOR(MOVE_FIRE_PUNCH)),
+
+ [SPECIES_SHELLDER] = (TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_EXPLOSION)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ICY_WIND)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_SWIFT)),
+
+ [SPECIES_CLOYSTER] = (TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_EXPLOSION)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ICY_WIND)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_SWIFT)),
+
+ [SPECIES_GASTLY] = (TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_DREAM_EATER)
+ | TUTOR(MOVE_EXPLOSION)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_PSYCH_UP)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)),
+
+ [SPECIES_HAUNTER] = (TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_DREAM_EATER)
+ | TUTOR(MOVE_EXPLOSION)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_PSYCH_UP)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)),
+
+ [SPECIES_GENGAR] = (TUTOR(MOVE_MEGA_PUNCH)
+ | TUTOR(MOVE_MEGA_KICK)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_METRONOME)
+ | TUTOR(MOVE_DREAM_EATER)
+ | TUTOR(MOVE_EXPLOSION)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_DYNAMIC_PUNCH)
+ | TUTOR(MOVE_PSYCH_UP)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_ICE_PUNCH)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_THUNDER_PUNCH)
+ | TUTOR(MOVE_FIRE_PUNCH)),
+
+ [SPECIES_ONIX] = (TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_EXPLOSION)
+ | TUTOR(MOVE_ROCK_SLIDE)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_PSYCH_UP)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)),
+
+ [SPECIES_DROWZEE] = (TUTOR(MOVE_MEGA_PUNCH)
+ | TUTOR(MOVE_MEGA_KICK)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_METRONOME)
+ | TUTOR(MOVE_DREAM_EATER)
+ | TUTOR(MOVE_THUNDER_WAVE)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_DYNAMIC_PUNCH)
+ | TUTOR(MOVE_PSYCH_UP)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_ICE_PUNCH)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_THUNDER_PUNCH)
+ | TUTOR(MOVE_FIRE_PUNCH)),
+
+ [SPECIES_HYPNO] = (TUTOR(MOVE_MEGA_PUNCH)
+ | TUTOR(MOVE_MEGA_KICK)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_METRONOME)
+ | TUTOR(MOVE_DREAM_EATER)
+ | TUTOR(MOVE_THUNDER_WAVE)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_DYNAMIC_PUNCH)
+ | TUTOR(MOVE_PSYCH_UP)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_ICE_PUNCH)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_THUNDER_PUNCH)
+ | TUTOR(MOVE_FIRE_PUNCH)),
+
+ [SPECIES_KRABBY] = (TUTOR(MOVE_SWORDS_DANCE)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ICY_WIND)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_FURY_CUTTER)),
+
+ [SPECIES_KINGLER] = (TUTOR(MOVE_SWORDS_DANCE)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ICY_WIND)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_FURY_CUTTER)),
+
+ [SPECIES_VOLTORB] = (TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_THUNDER_WAVE)
+ | TUTOR(MOVE_EXPLOSION)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_ROLLOUT)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_SWIFT)),
+
+ [SPECIES_ELECTRODE] = (TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_THUNDER_WAVE)
+ | TUTOR(MOVE_EXPLOSION)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_ROLLOUT)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_SWIFT)),
+
+ [SPECIES_EXEGGCUTE] = (TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_DREAM_EATER)
+ | TUTOR(MOVE_EXPLOSION)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_ROLLOUT)
+ | TUTOR(MOVE_PSYCH_UP)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)),
+
+ [SPECIES_EXEGGUTOR] = (TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_DREAM_EATER)
+ | TUTOR(MOVE_EXPLOSION)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_ROLLOUT)
+ | TUTOR(MOVE_PSYCH_UP)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)),
+
+ [SPECIES_CUBONE] = (TUTOR(MOVE_MEGA_PUNCH)
+ | TUTOR(MOVE_SWORDS_DANCE)
+ | TUTOR(MOVE_MEGA_KICK)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_ROCK_SLIDE)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_DYNAMIC_PUNCH)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ICY_WIND)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_THUNDER_PUNCH)
+ | TUTOR(MOVE_FIRE_PUNCH)),
+
+ [SPECIES_MAROWAK] = (TUTOR(MOVE_MEGA_PUNCH)
+ | TUTOR(MOVE_SWORDS_DANCE)
+ | TUTOR(MOVE_MEGA_KICK)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_ROCK_SLIDE)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_DYNAMIC_PUNCH)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ICY_WIND)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_THUNDER_PUNCH)
+ | TUTOR(MOVE_FIRE_PUNCH)),
+
+ [SPECIES_HITMONLEE] = (TUTOR(MOVE_MEGA_PUNCH)
+ | TUTOR(MOVE_MEGA_KICK)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_METRONOME)
+ | TUTOR(MOVE_ROCK_SLIDE)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_DYNAMIC_PUNCH)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_SWIFT)),
+
+ [SPECIES_HITMONCHAN] = (TUTOR(MOVE_MEGA_PUNCH)
+ | TUTOR(MOVE_MEGA_KICK)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_METRONOME)
+ | TUTOR(MOVE_ROCK_SLIDE)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_DYNAMIC_PUNCH)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_ICE_PUNCH)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_SWIFT)
+ | TUTOR(MOVE_THUNDER_PUNCH)
+ | TUTOR(MOVE_FIRE_PUNCH)),
+
+ [SPECIES_LICKITUNG] = (TUTOR(MOVE_MEGA_PUNCH)
+ | TUTOR(MOVE_SWORDS_DANCE)
+ | TUTOR(MOVE_MEGA_KICK)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_DREAM_EATER)
+ | TUTOR(MOVE_ROCK_SLIDE)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_DYNAMIC_PUNCH)
+ | TUTOR(MOVE_ROLLOUT)
+ | TUTOR(MOVE_PSYCH_UP)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ICY_WIND)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_ICE_PUNCH)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_DEFENSE_CURL)
+ | TUTOR(MOVE_THUNDER_PUNCH)
+ | TUTOR(MOVE_FIRE_PUNCH)),
+
+ [SPECIES_KOFFING] = (TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_EXPLOSION)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_ROLLOUT)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)),
+
+ [SPECIES_WEEZING] = (TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_EXPLOSION)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_ROLLOUT)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)),
+
+ [SPECIES_RHYHORN] = (TUTOR(MOVE_SWORDS_DANCE)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_ROCK_SLIDE)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_ROLLOUT)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ICY_WIND)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)),
+
+ [SPECIES_RHYDON] = (TUTOR(MOVE_MEGA_PUNCH)
+ | TUTOR(MOVE_SWORDS_DANCE)
+ | TUTOR(MOVE_MEGA_KICK)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_ROCK_SLIDE)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_DYNAMIC_PUNCH)
+ | TUTOR(MOVE_ROLLOUT)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ICY_WIND)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_THUNDER_PUNCH)
+ | TUTOR(MOVE_FIRE_PUNCH)
+ | TUTOR(MOVE_FURY_CUTTER)),
+
+ [SPECIES_CHANSEY] = (TUTOR(MOVE_MEGA_PUNCH)
+ | TUTOR(MOVE_MEGA_KICK)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_METRONOME)
+ | TUTOR(MOVE_SOFT_BOILED)
+ | TUTOR(MOVE_DREAM_EATER)
+ | TUTOR(MOVE_THUNDER_WAVE)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_DYNAMIC_PUNCH)
+ | TUTOR(MOVE_ROLLOUT)
+ | TUTOR(MOVE_PSYCH_UP)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ICY_WIND)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_DEFENSE_CURL)),
+
+ [SPECIES_TANGELA] = (TUTOR(MOVE_SWORDS_DANCE)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_PSYCH_UP)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)),
+
+ [SPECIES_KANGASKHAN] = (TUTOR(MOVE_MEGA_PUNCH)
+ | TUTOR(MOVE_MEGA_KICK)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_ROCK_SLIDE)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_DYNAMIC_PUNCH)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ICY_WIND)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_ICE_PUNCH)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_THUNDER_PUNCH)
+ | TUTOR(MOVE_FIRE_PUNCH)
+ | TUTOR(MOVE_FURY_CUTTER)),
+
+ [SPECIES_HORSEA] = (TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ICY_WIND)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_SWIFT)),
+
+ [SPECIES_SEADRA] = (TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ICY_WIND)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_SWIFT)),
+
+ [SPECIES_GOLDEEN] = (TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ICY_WIND)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_SWIFT)),
+
+ [SPECIES_SEAKING] = (TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ICY_WIND)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_SWIFT)),
+
+ [SPECIES_STARYU] = (TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_THUNDER_WAVE)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_PSYCH_UP)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ICY_WIND)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_SWIFT)),
+
+ [SPECIES_STARMIE] = (TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_DREAM_EATER)
+ | TUTOR(MOVE_THUNDER_WAVE)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_PSYCH_UP)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ICY_WIND)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_SWIFT)),
+
+ [SPECIES_MR_MIME] = (TUTOR(MOVE_MEGA_PUNCH)
+ | TUTOR(MOVE_MEGA_KICK)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_METRONOME)
+ | TUTOR(MOVE_DREAM_EATER)
+ | TUTOR(MOVE_THUNDER_WAVE)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_PSYCH_UP)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_ICE_PUNCH)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_THUNDER_PUNCH)
+ | TUTOR(MOVE_FIRE_PUNCH)),
+
+ [SPECIES_SCYTHER] = (TUTOR(MOVE_SWORDS_DANCE)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_SWIFT)
+ | TUTOR(MOVE_FURY_CUTTER)),
+
+ [SPECIES_JYNX] = (TUTOR(MOVE_MEGA_PUNCH)
+ | TUTOR(MOVE_MEGA_KICK)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_METRONOME)
+ | TUTOR(MOVE_DREAM_EATER)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_DYNAMIC_PUNCH)
+ | TUTOR(MOVE_PSYCH_UP)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ICY_WIND)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_ICE_PUNCH)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)),
+
+ [SPECIES_ELECTABUZZ] = (TUTOR(MOVE_MEGA_PUNCH)
+ | TUTOR(MOVE_MEGA_KICK)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_THUNDER_WAVE)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_DYNAMIC_PUNCH)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_ICE_PUNCH)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_SWIFT)
+ | TUTOR(MOVE_THUNDER_PUNCH)
+ | TUTOR(MOVE_FIRE_PUNCH)),
+
+ [SPECIES_MAGMAR] = (TUTOR(MOVE_MEGA_PUNCH)
+ | TUTOR(MOVE_MEGA_KICK)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_DYNAMIC_PUNCH)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_THUNDER_PUNCH)
+ | TUTOR(MOVE_FIRE_PUNCH)),
+
+ [SPECIES_PINSIR] = (TUTOR(MOVE_SWORDS_DANCE)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_ROCK_SLIDE)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_FURY_CUTTER)),
+
+ [SPECIES_TAUROS] = (TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ICY_WIND)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)),
+
+ [SPECIES_MAGIKARP] = (0),
+
+ [SPECIES_GYARADOS] = (TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_THUNDER_WAVE)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ICY_WIND)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)),
+
+ [SPECIES_LAPRAS] = (TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_DREAM_EATER)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ICY_WIND)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)),
+
+ [SPECIES_DITTO] = (0),
+
+ [SPECIES_EEVEE] = (TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_SWIFT)),
+
+ [SPECIES_VAPOREON] = (TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ICY_WIND)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_SWIFT)),
+
+ [SPECIES_JOLTEON] = (TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_THUNDER_WAVE)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_SWIFT)),
+
+ [SPECIES_FLAREON] = (TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_SWIFT)),
+
+ [SPECIES_PORYGON] = (TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_DREAM_EATER)
+ | TUTOR(MOVE_THUNDER_WAVE)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_PSYCH_UP)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ICY_WIND)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_SWIFT)),
+
+ [SPECIES_OMANYTE] = (TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_ROCK_SLIDE)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_ROLLOUT)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ICY_WIND)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)),
+
+ [SPECIES_OMASTAR] = (TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_ROCK_SLIDE)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_ROLLOUT)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ICY_WIND)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)),
+
+ [SPECIES_KABUTO] = (TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_ROCK_SLIDE)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_ROLLOUT)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ICY_WIND)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)),
+
+ [SPECIES_KABUTOPS] = (TUTOR(MOVE_SWORDS_DANCE)
+ | TUTOR(MOVE_MEGA_KICK)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_ROCK_SLIDE)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_ROLLOUT)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ICY_WIND)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_FURY_CUTTER)),
+
+ [SPECIES_AERODACTYL] = (TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_ROCK_SLIDE)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_SWIFT)),
+
+ [SPECIES_SNORLAX] = (TUTOR(MOVE_MEGA_PUNCH)
+ | TUTOR(MOVE_MEGA_KICK)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_METRONOME)
+ | TUTOR(MOVE_ROCK_SLIDE)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_DYNAMIC_PUNCH)
+ | TUTOR(MOVE_ROLLOUT)
+ | TUTOR(MOVE_PSYCH_UP)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ICY_WIND)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_ICE_PUNCH)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_DEFENSE_CURL)
+ | TUTOR(MOVE_THUNDER_PUNCH)
+ | TUTOR(MOVE_FIRE_PUNCH)),
+
+ [SPECIES_ARTICUNO] = (TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ICY_WIND)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_SWIFT)),
+
+ [SPECIES_ZAPDOS] = (TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_THUNDER_WAVE)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_SWIFT)),
+
+ [SPECIES_MOLTRES] = (TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_SWIFT)),
+
+ [SPECIES_DRATINI] = (TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_THUNDER_WAVE)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ICY_WIND)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_SWIFT)),
+
+ [SPECIES_DRAGONAIR] = (TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_THUNDER_WAVE)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ICY_WIND)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_SWIFT)),
+
+ [SPECIES_DRAGONITE] = (TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_THUNDER_WAVE)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_DYNAMIC_PUNCH)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ICY_WIND)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_ICE_PUNCH)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_SWIFT)
+ | TUTOR(MOVE_THUNDER_PUNCH)
+ | TUTOR(MOVE_FIRE_PUNCH)
+ | TUTOR(MOVE_FURY_CUTTER)),
+
+ [SPECIES_MEWTWO] = (TUTOR(MOVE_MEGA_PUNCH)
+ | TUTOR(MOVE_MEGA_KICK)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_METRONOME)
+ | TUTOR(MOVE_DREAM_EATER)
+ | TUTOR(MOVE_THUNDER_WAVE)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_DYNAMIC_PUNCH)
+ | TUTOR(MOVE_PSYCH_UP)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ICY_WIND)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_ICE_PUNCH)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_SWIFT)
+ | TUTOR(MOVE_THUNDER_PUNCH)
+ | TUTOR(MOVE_FIRE_PUNCH)),
+
+ [SPECIES_MEW] = (TUTOR(MOVE_MEGA_PUNCH)
+ | TUTOR(MOVE_SWORDS_DANCE)
+ | TUTOR(MOVE_MEGA_KICK)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_METRONOME)
+ | TUTOR(MOVE_SOFT_BOILED)
+ | TUTOR(MOVE_DREAM_EATER)
+ | TUTOR(MOVE_THUNDER_WAVE)
+ | TUTOR(MOVE_EXPLOSION)
+ | TUTOR(MOVE_ROCK_SLIDE)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_DYNAMIC_PUNCH)
+ | TUTOR(MOVE_ROLLOUT)
+ | TUTOR(MOVE_PSYCH_UP)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ICY_WIND)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_ICE_PUNCH)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_SWIFT)
+ | TUTOR(MOVE_DEFENSE_CURL)
+ | TUTOR(MOVE_THUNDER_PUNCH)
+ | TUTOR(MOVE_FIRE_PUNCH)
+ | TUTOR(MOVE_FURY_CUTTER)),
+
+ [SPECIES_CHIKORITA] = (TUTOR(MOVE_SWORDS_DANCE)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)),
+
+ [SPECIES_BAYLEEF] = (TUTOR(MOVE_SWORDS_DANCE)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_FURY_CUTTER)),
+
+ [SPECIES_MEGANIUM] = (TUTOR(MOVE_SWORDS_DANCE)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_FURY_CUTTER)),
+
+ [SPECIES_CYNDAQUIL] = (TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_ROLLOUT)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_SWIFT)
+ | TUTOR(MOVE_DEFENSE_CURL)),
+
+ [SPECIES_QUILAVA] = (TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_ROLLOUT)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_SWIFT)
+ | TUTOR(MOVE_DEFENSE_CURL)
+ | TUTOR(MOVE_FURY_CUTTER)),
+
+ [SPECIES_TYPHLOSION] = (TUTOR(MOVE_MEGA_PUNCH)
+ | TUTOR(MOVE_MEGA_KICK)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_ROCK_SLIDE)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_DYNAMIC_PUNCH)
+ | TUTOR(MOVE_ROLLOUT)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_SWIFT)
+ | TUTOR(MOVE_DEFENSE_CURL)
+ | TUTOR(MOVE_THUNDER_PUNCH)
+ | TUTOR(MOVE_FIRE_PUNCH)
+ | TUTOR(MOVE_FURY_CUTTER)),
+
+ [SPECIES_TOTODILE] = (TUTOR(MOVE_MEGA_PUNCH)
+ | TUTOR(MOVE_SWORDS_DANCE)
+ | TUTOR(MOVE_MEGA_KICK)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_ROCK_SLIDE)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_DYNAMIC_PUNCH)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ICY_WIND)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_ICE_PUNCH)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)),
+
+ [SPECIES_CROCONAW] = (TUTOR(MOVE_MEGA_PUNCH)
+ | TUTOR(MOVE_SWORDS_DANCE)
+ | TUTOR(MOVE_MEGA_KICK)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_ROCK_SLIDE)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_DYNAMIC_PUNCH)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ICY_WIND)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_ICE_PUNCH)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_FURY_CUTTER)),
+
+ [SPECIES_FERALIGATR] = (TUTOR(MOVE_MEGA_PUNCH)
+ | TUTOR(MOVE_SWORDS_DANCE)
+ | TUTOR(MOVE_MEGA_KICK)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_ROCK_SLIDE)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_DYNAMIC_PUNCH)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ICY_WIND)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_ICE_PUNCH)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_FURY_CUTTER)),
+
+ [SPECIES_SENTRET] = (TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_DYNAMIC_PUNCH)
+ | TUTOR(MOVE_ROLLOUT)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_ICE_PUNCH)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_SWIFT)
+ | TUTOR(MOVE_DEFENSE_CURL)
+ | TUTOR(MOVE_THUNDER_PUNCH)
+ | TUTOR(MOVE_FIRE_PUNCH)
+ | TUTOR(MOVE_FURY_CUTTER)),
+
+ [SPECIES_FURRET] = (TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_DYNAMIC_PUNCH)
+ | TUTOR(MOVE_ROLLOUT)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_ICE_PUNCH)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_SWIFT)
+ | TUTOR(MOVE_DEFENSE_CURL)
+ | TUTOR(MOVE_THUNDER_PUNCH)
+ | TUTOR(MOVE_FIRE_PUNCH)
+ | TUTOR(MOVE_FURY_CUTTER)),
+
+ [SPECIES_HOOTHOOT] = (TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_DREAM_EATER)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_SWIFT)),
+
+ [SPECIES_NOCTOWL] = (TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_DREAM_EATER)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_SWIFT)),
+
+ [SPECIES_LEDYBA] = (TUTOR(MOVE_MEGA_PUNCH)
+ | TUTOR(MOVE_SWORDS_DANCE)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_DYNAMIC_PUNCH)
+ | TUTOR(MOVE_ROLLOUT)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_ICE_PUNCH)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_SWIFT)
+ | TUTOR(MOVE_THUNDER_PUNCH)),
+
+ [SPECIES_LEDIAN] = (TUTOR(MOVE_MEGA_PUNCH)
+ | TUTOR(MOVE_SWORDS_DANCE)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_DYNAMIC_PUNCH)
+ | TUTOR(MOVE_ROLLOUT)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_ICE_PUNCH)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_SWIFT)
+ | TUTOR(MOVE_THUNDER_PUNCH)),
+
+ [SPECIES_SPINARAK] = (TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)),
+
+ [SPECIES_ARIADOS] = (TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)),
+
+ [SPECIES_CROBAT] = (TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_SWIFT)),
+
+ [SPECIES_CHINCHOU] = (TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_THUNDER_WAVE)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)),
+
+ [SPECIES_LANTURN] = (TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_THUNDER_WAVE)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)),
+
+ [SPECIES_PICHU] = (TUTOR(MOVE_MEGA_PUNCH)
+ | TUTOR(MOVE_MEGA_KICK)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_THUNDER_WAVE)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_ROLLOUT)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_SWIFT)
+ | TUTOR(MOVE_DEFENSE_CURL)),
+
+ [SPECIES_CLEFFA] = (TUTOR(MOVE_MEGA_PUNCH)
+ | TUTOR(MOVE_MEGA_KICK)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_METRONOME)
+ | TUTOR(MOVE_SOFT_BOILED)
+ | TUTOR(MOVE_DREAM_EATER)
+ | TUTOR(MOVE_THUNDER_WAVE)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_ROLLOUT)
+ | TUTOR(MOVE_PSYCH_UP)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ICY_WIND)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_DEFENSE_CURL)),
+
+ [SPECIES_IGGLYBUFF] = (TUTOR(MOVE_MEGA_PUNCH)
+ | TUTOR(MOVE_MEGA_KICK)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_DREAM_EATER)
+ | TUTOR(MOVE_THUNDER_WAVE)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_ROLLOUT)
+ | TUTOR(MOVE_PSYCH_UP)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ICY_WIND)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_DEFENSE_CURL)),
+
+ [SPECIES_TOGEPI] = (TUTOR(MOVE_MEGA_PUNCH)
+ | TUTOR(MOVE_MEGA_KICK)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_METRONOME)
+ | TUTOR(MOVE_SOFT_BOILED)
+ | TUTOR(MOVE_DREAM_EATER)
+ | TUTOR(MOVE_THUNDER_WAVE)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_ROLLOUT)
+ | TUTOR(MOVE_PSYCH_UP)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_SWIFT)
+ | TUTOR(MOVE_DEFENSE_CURL)),
+
+ [SPECIES_TOGETIC] = (TUTOR(MOVE_MEGA_PUNCH)
+ | TUTOR(MOVE_MEGA_KICK)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_METRONOME)
+ | TUTOR(MOVE_SOFT_BOILED)
+ | TUTOR(MOVE_DREAM_EATER)
+ | TUTOR(MOVE_THUNDER_WAVE)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_ROLLOUT)
+ | TUTOR(MOVE_PSYCH_UP)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_SWIFT)
+ | TUTOR(MOVE_DEFENSE_CURL)),
+
+ [SPECIES_NATU] = (TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_DREAM_EATER)
+ | TUTOR(MOVE_THUNDER_WAVE)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_PSYCH_UP)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_SWIFT)),
+
+ [SPECIES_XATU] = (TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_DREAM_EATER)
+ | TUTOR(MOVE_THUNDER_WAVE)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_PSYCH_UP)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_SWIFT)),
+
+ [SPECIES_MAREEP] = (TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_THUNDER_WAVE)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_SWIFT)
+ | TUTOR(MOVE_DEFENSE_CURL)),
+
+ [SPECIES_FLAAFFY] = (TUTOR(MOVE_MEGA_PUNCH)
+ | TUTOR(MOVE_MEGA_KICK)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_THUNDER_WAVE)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_DYNAMIC_PUNCH)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_SWIFT)
+ | TUTOR(MOVE_DEFENSE_CURL)
+ | TUTOR(MOVE_THUNDER_PUNCH)
+ | TUTOR(MOVE_FIRE_PUNCH)),
+
+ [SPECIES_AMPHAROS] = (TUTOR(MOVE_MEGA_PUNCH)
+ | TUTOR(MOVE_MEGA_KICK)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_THUNDER_WAVE)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_DYNAMIC_PUNCH)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_SWIFT)
+ | TUTOR(MOVE_DEFENSE_CURL)
+ | TUTOR(MOVE_THUNDER_PUNCH)
+ | TUTOR(MOVE_FIRE_PUNCH)),
+
+ [SPECIES_BELLOSSOM] = (TUTOR(MOVE_SWORDS_DANCE)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)),
+
+ [SPECIES_MARILL] = (TUTOR(MOVE_MEGA_PUNCH)
+ | TUTOR(MOVE_MEGA_KICK)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_DYNAMIC_PUNCH)
+ | TUTOR(MOVE_ROLLOUT)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ICY_WIND)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_ICE_PUNCH)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_SWIFT)
+ | TUTOR(MOVE_DEFENSE_CURL)),
+
+ [SPECIES_AZUMARILL] = (TUTOR(MOVE_MEGA_PUNCH)
+ | TUTOR(MOVE_MEGA_KICK)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_DYNAMIC_PUNCH)
+ | TUTOR(MOVE_ROLLOUT)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ICY_WIND)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_ICE_PUNCH)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_SWIFT)
+ | TUTOR(MOVE_DEFENSE_CURL)),
+
+ [SPECIES_SUDOWOODO] = (TUTOR(MOVE_MEGA_PUNCH)
+ | TUTOR(MOVE_MEGA_KICK)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_EXPLOSION)
+ | TUTOR(MOVE_ROCK_SLIDE)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_DYNAMIC_PUNCH)
+ | TUTOR(MOVE_ROLLOUT)
+ | TUTOR(MOVE_PSYCH_UP)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_ICE_PUNCH)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_DEFENSE_CURL)
+ | TUTOR(MOVE_THUNDER_PUNCH)
+ | TUTOR(MOVE_FIRE_PUNCH)),
+
+ [SPECIES_POLITOED] = (TUTOR(MOVE_MEGA_PUNCH)
+ | TUTOR(MOVE_MEGA_KICK)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_METRONOME)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_DYNAMIC_PUNCH)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ICY_WIND)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_DEFENSE_CURL)),
+
+ [SPECIES_HOPPIP] = (TUTOR(MOVE_SWORDS_DANCE)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_DEFENSE_CURL)),
+
+ [SPECIES_SKIPLOOM] = (TUTOR(MOVE_SWORDS_DANCE)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_DEFENSE_CURL)),
+
+ [SPECIES_JUMPLUFF] = (TUTOR(MOVE_SWORDS_DANCE)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_DEFENSE_CURL)),
+
+ [SPECIES_AIPOM] = (TUTOR(MOVE_MEGA_PUNCH)
+ | TUTOR(MOVE_MEGA_KICK)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_METRONOME)
+ | TUTOR(MOVE_DREAM_EATER)
+ | TUTOR(MOVE_THUNDER_WAVE)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_DYNAMIC_PUNCH)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_ICE_PUNCH)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_SWIFT)
+ | TUTOR(MOVE_DEFENSE_CURL)
+ | TUTOR(MOVE_THUNDER_PUNCH)
+ | TUTOR(MOVE_FIRE_PUNCH)
+ | TUTOR(MOVE_FURY_CUTTER)),
+
+ [SPECIES_SUNKERN] = (TUTOR(MOVE_SWORDS_DANCE)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)),
+
+ [SPECIES_SUNFLORA] = (TUTOR(MOVE_SWORDS_DANCE)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)),
+
+ [SPECIES_YANMA] = (TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_DREAM_EATER)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_SWIFT)),
+
+ [SPECIES_WOOPER] = (TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_DYNAMIC_PUNCH)
+ | TUTOR(MOVE_ROLLOUT)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_ICE_PUNCH)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_DEFENSE_CURL)),
+
+ [SPECIES_QUAGSIRE] = (TUTOR(MOVE_MEGA_PUNCH)
+ | TUTOR(MOVE_MEGA_KICK)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_DYNAMIC_PUNCH)
+ | TUTOR(MOVE_ROLLOUT)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_ICE_PUNCH)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_DEFENSE_CURL)),
+
+ [SPECIES_ESPEON] = (TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_DREAM_EATER)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_PSYCH_UP)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_SWIFT)),
+
+ [SPECIES_UMBREON] = (TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_DREAM_EATER)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_PSYCH_UP)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_SWIFT)),
+
+ [SPECIES_MURKROW] = (TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_DREAM_EATER)
+ | TUTOR(MOVE_THUNDER_WAVE)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_PSYCH_UP)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ICY_WIND)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_SWIFT)),
+
+ [SPECIES_SLOWKING] = (TUTOR(MOVE_MEGA_PUNCH)
+ | TUTOR(MOVE_MEGA_KICK)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_DREAM_EATER)
+ | TUTOR(MOVE_THUNDER_WAVE)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_DYNAMIC_PUNCH)
+ | TUTOR(MOVE_PSYCH_UP)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ICY_WIND)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_ICE_PUNCH)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_SWIFT)
+ | TUTOR(MOVE_FURY_CUTTER)),
+
+ [SPECIES_MISDREAVUS] = (TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_DREAM_EATER)
+ | TUTOR(MOVE_THUNDER_WAVE)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_PSYCH_UP)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_SWIFT)
+ | TUTOR(MOVE_DEFENSE_CURL)),
+
+ [SPECIES_UNOWN] = (0),
+
+ [SPECIES_WOBBUFFET] = (0),
+
+ [SPECIES_GIRAFARIG] = (TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_DREAM_EATER)
+ | TUTOR(MOVE_THUNDER_WAVE)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_PSYCH_UP)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_SWIFT)),
+
+ [SPECIES_PINECO] = (TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_EXPLOSION)
+ | TUTOR(MOVE_ROCK_SLIDE)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_ROLLOUT)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_DEFENSE_CURL)),
+
+ [SPECIES_FORRETRESS] = (TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_EXPLOSION)
+ | TUTOR(MOVE_ROCK_SLIDE)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_ROLLOUT)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_DEFENSE_CURL)),
+
+ [SPECIES_DUNSPARCE] = (TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_DREAM_EATER)
+ | TUTOR(MOVE_THUNDER_WAVE)
+ | TUTOR(MOVE_ROCK_SLIDE)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_ROLLOUT)
+ | TUTOR(MOVE_PSYCH_UP)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_DEFENSE_CURL)),
+
+ [SPECIES_GLIGAR] = (TUTOR(MOVE_SWORDS_DANCE)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_DREAM_EATER)
+ | TUTOR(MOVE_ROCK_SLIDE)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_SWIFT)
+ | TUTOR(MOVE_FURY_CUTTER)),
+
+ [SPECIES_STEELIX] = (TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_EXPLOSION)
+ | TUTOR(MOVE_ROCK_SLIDE)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_ROLLOUT)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_DEFENSE_CURL)),
+
+ [SPECIES_SNUBBULL] = (TUTOR(MOVE_MEGA_PUNCH)
+ | TUTOR(MOVE_MEGA_KICK)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_METRONOME)
+ | TUTOR(MOVE_THUNDER_WAVE)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_DYNAMIC_PUNCH)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_ICE_PUNCH)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_DEFENSE_CURL)
+ | TUTOR(MOVE_THUNDER_PUNCH)
+ | TUTOR(MOVE_FIRE_PUNCH)),
+
+ [SPECIES_GRANBULL] = (TUTOR(MOVE_MEGA_PUNCH)
+ | TUTOR(MOVE_MEGA_KICK)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_METRONOME)
+ | TUTOR(MOVE_THUNDER_WAVE)
+ | TUTOR(MOVE_ROCK_SLIDE)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_DYNAMIC_PUNCH)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_ICE_PUNCH)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_DEFENSE_CURL)
+ | TUTOR(MOVE_THUNDER_PUNCH)
+ | TUTOR(MOVE_FIRE_PUNCH)),
+
+ [SPECIES_QWILFISH] = (TUTOR(MOVE_SWORDS_DANCE)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_THUNDER_WAVE)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_ROLLOUT)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ICY_WIND)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_SWIFT)
+ | TUTOR(MOVE_DEFENSE_CURL)),
+
+ [SPECIES_SCIZOR] = (TUTOR(MOVE_SWORDS_DANCE)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_SWIFT)
+ | TUTOR(MOVE_FURY_CUTTER)),
+
+ [SPECIES_SHUCKLE] = (TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_ROCK_SLIDE)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_ROLLOUT)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_DEFENSE_CURL)),
+
+ [SPECIES_HERACROSS] = (TUTOR(MOVE_SWORDS_DANCE)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_ROCK_SLIDE)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_FURY_CUTTER)),
+
+ [SPECIES_SNEASEL] = (TUTOR(MOVE_SWORDS_DANCE)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_DREAM_EATER)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_DYNAMIC_PUNCH)
+ | TUTOR(MOVE_PSYCH_UP)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ICY_WIND)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_ICE_PUNCH)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_SWIFT)
+ | TUTOR(MOVE_DEFENSE_CURL)
+ | TUTOR(MOVE_FURY_CUTTER)),
+
+ [SPECIES_TEDDIURSA] = (TUTOR(MOVE_MEGA_PUNCH)
+ | TUTOR(MOVE_SWORDS_DANCE)
+ | TUTOR(MOVE_MEGA_KICK)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_METRONOME)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_DYNAMIC_PUNCH)
+ | TUTOR(MOVE_ROLLOUT)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_ICE_PUNCH)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_SWIFT)
+ | TUTOR(MOVE_DEFENSE_CURL)
+ | TUTOR(MOVE_THUNDER_PUNCH)
+ | TUTOR(MOVE_FIRE_PUNCH)
+ | TUTOR(MOVE_FURY_CUTTER)),
+
+ [SPECIES_URSARING] = (TUTOR(MOVE_MEGA_PUNCH)
+ | TUTOR(MOVE_SWORDS_DANCE)
+ | TUTOR(MOVE_MEGA_KICK)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_METRONOME)
+ | TUTOR(MOVE_ROCK_SLIDE)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_DYNAMIC_PUNCH)
+ | TUTOR(MOVE_ROLLOUT)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_ICE_PUNCH)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_SWIFT)
+ | TUTOR(MOVE_DEFENSE_CURL)
+ | TUTOR(MOVE_THUNDER_PUNCH)
+ | TUTOR(MOVE_FIRE_PUNCH)
+ | TUTOR(MOVE_FURY_CUTTER)),
+
+ [SPECIES_SLUGMA] = (TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_ROCK_SLIDE)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_ROLLOUT)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_DEFENSE_CURL)),
+
+ [SPECIES_MAGCARGO] = (TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_ROCK_SLIDE)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_ROLLOUT)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_DEFENSE_CURL)),
+
+ [SPECIES_SWINUB] = (TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_ROCK_SLIDE)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ICY_WIND)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_DEFENSE_CURL)),
+
+ [SPECIES_PILOSWINE] = (TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_ROCK_SLIDE)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ICY_WIND)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_DEFENSE_CURL)),
+
+ [SPECIES_CORSOLA] = (TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_EXPLOSION)
+ | TUTOR(MOVE_ROCK_SLIDE)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_ROLLOUT)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_DEFENSE_CURL)),
+
+ [SPECIES_REMORAID] = (TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_THUNDER_WAVE)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_SWIFT)
+ | TUTOR(MOVE_DEFENSE_CURL)),
+
+ [SPECIES_OCTILLERY] = (TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_THUNDER_WAVE)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_SWIFT)
+ | TUTOR(MOVE_DEFENSE_CURL)),
+
+ [SPECIES_DELIBIRD] = (TUTOR(MOVE_MEGA_PUNCH)
+ | TUTOR(MOVE_MEGA_KICK)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ICY_WIND)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_SWIFT)),
+
+ [SPECIES_MANTINE] = (TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ICY_WIND)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_SWIFT)),
+
+ [SPECIES_SKARMORY] = (TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_ROCK_SLIDE)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_SWIFT)),
+
+ [SPECIES_HOUNDOUR] = (TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_DREAM_EATER)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_SWIFT)),
+
+ [SPECIES_HOUNDOOM] = (TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_DREAM_EATER)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_SWIFT)),
+
+ [SPECIES_KINGDRA] = (TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ICY_WIND)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_SWIFT)),
+
+ [SPECIES_PHANPY] = (TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_ROLLOUT)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_DEFENSE_CURL)),
+
+ [SPECIES_DONPHAN] = (TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_ROCK_SLIDE)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_ROLLOUT)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_DEFENSE_CURL)),
+
+ [SPECIES_PORYGON2] = (TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_DREAM_EATER)
+ | TUTOR(MOVE_THUNDER_WAVE)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_PSYCH_UP)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ICY_WIND)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_SWIFT)
+ | TUTOR(MOVE_DEFENSE_CURL)),
+
+ [SPECIES_STANTLER] = (TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_DREAM_EATER)
+ | TUTOR(MOVE_THUNDER_WAVE)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_PSYCH_UP)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_SWIFT)),
+
+ [SPECIES_SMEARGLE] = (0),
+
+ [SPECIES_TYROGUE] = (TUTOR(MOVE_MEGA_KICK)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_ROCK_SLIDE)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_SWIFT)),
+
+ [SPECIES_HITMONTOP] = (TUTOR(MOVE_MEGA_KICK)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_ROCK_SLIDE)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_SWIFT)),
+
+ [SPECIES_SMOOCHUM] = (TUTOR(MOVE_MEGA_PUNCH)
+ | TUTOR(MOVE_MEGA_KICK)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_METRONOME)
+ | TUTOR(MOVE_DREAM_EATER)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_DYNAMIC_PUNCH)
+ | TUTOR(MOVE_PSYCH_UP)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ICY_WIND)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_ICE_PUNCH)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)),
+
+ [SPECIES_ELEKID] = (TUTOR(MOVE_MEGA_PUNCH)
+ | TUTOR(MOVE_MEGA_KICK)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_THUNDER_WAVE)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_DYNAMIC_PUNCH)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_ICE_PUNCH)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_SWIFT)
+ | TUTOR(MOVE_THUNDER_PUNCH)
+ | TUTOR(MOVE_FIRE_PUNCH)),
+
+ [SPECIES_MAGBY] = (TUTOR(MOVE_MEGA_PUNCH)
+ | TUTOR(MOVE_MEGA_KICK)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_DYNAMIC_PUNCH)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_THUNDER_PUNCH)
+ | TUTOR(MOVE_FIRE_PUNCH)),
+
+ [SPECIES_MILTANK] = (TUTOR(MOVE_MEGA_PUNCH)
+ | TUTOR(MOVE_MEGA_KICK)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_METRONOME)
+ | TUTOR(MOVE_THUNDER_WAVE)
+ | TUTOR(MOVE_ROCK_SLIDE)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_DYNAMIC_PUNCH)
+ | TUTOR(MOVE_ROLLOUT)
+ | TUTOR(MOVE_PSYCH_UP)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ICY_WIND)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_ICE_PUNCH)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_DEFENSE_CURL)
+ | TUTOR(MOVE_THUNDER_PUNCH)
+ | TUTOR(MOVE_FIRE_PUNCH)),
+
+ [SPECIES_BLISSEY] = (TUTOR(MOVE_MEGA_PUNCH)
+ | TUTOR(MOVE_MEGA_KICK)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_METRONOME)
+ | TUTOR(MOVE_SOFT_BOILED)
+ | TUTOR(MOVE_DREAM_EATER)
+ | TUTOR(MOVE_THUNDER_WAVE)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_DYNAMIC_PUNCH)
+ | TUTOR(MOVE_ROLLOUT)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ICY_WIND)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_DEFENSE_CURL)),
+
+ [SPECIES_RAIKOU] = (TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_THUNDER_WAVE)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_PSYCH_UP)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_SWIFT)),
+
+ [SPECIES_ENTEI] = (TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_PSYCH_UP)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_SWIFT)),
+
+ [SPECIES_SUICUNE] = (TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_PSYCH_UP)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ICY_WIND)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_SWIFT)),
+
+ [SPECIES_LARVITAR] = (TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_ROCK_SLIDE)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)),
+
+ [SPECIES_PUPITAR] = (TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_ROCK_SLIDE)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)),
+
+ [SPECIES_TYRANITAR] = (TUTOR(MOVE_MEGA_PUNCH)
+ | TUTOR(MOVE_MEGA_KICK)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_THUNDER_WAVE)
+ | TUTOR(MOVE_ROCK_SLIDE)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_DYNAMIC_PUNCH)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_FIRE_PUNCH)
+ | TUTOR(MOVE_FURY_CUTTER)),
+
+ [SPECIES_LUGIA] = (TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_DREAM_EATER)
+ | TUTOR(MOVE_THUNDER_WAVE)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_PSYCH_UP)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ICY_WIND)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_SWIFT)),
+
+ [SPECIES_HO_OH] = (TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_DREAM_EATER)
+ | TUTOR(MOVE_THUNDER_WAVE)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_PSYCH_UP)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_SWIFT)),
+
+ [SPECIES_CELEBI] = (TUTOR(MOVE_SWORDS_DANCE)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_METRONOME)
+ | TUTOR(MOVE_DREAM_EATER)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_PSYCH_UP)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_SWIFT)
+ | TUTOR(MOVE_DEFENSE_CURL)),
+
+ [SPECIES_TREECKO] = (TUTOR(MOVE_MEGA_PUNCH)
+ | TUTOR(MOVE_SWORDS_DANCE)
+ | TUTOR(MOVE_MEGA_KICK)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_DYNAMIC_PUNCH)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_SWIFT)
+ | TUTOR(MOVE_THUNDER_PUNCH)
+ | TUTOR(MOVE_FURY_CUTTER)),
+
+ [SPECIES_GROVYLE] = (TUTOR(MOVE_MEGA_PUNCH)
+ | TUTOR(MOVE_SWORDS_DANCE)
+ | TUTOR(MOVE_MEGA_KICK)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_DYNAMIC_PUNCH)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_SWIFT)
+ | TUTOR(MOVE_THUNDER_PUNCH)
+ | TUTOR(MOVE_FURY_CUTTER)),
+
+ [SPECIES_SCEPTILE] = (TUTOR(MOVE_MEGA_PUNCH)
+ | TUTOR(MOVE_SWORDS_DANCE)
+ | TUTOR(MOVE_MEGA_KICK)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_DYNAMIC_PUNCH)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_SWIFT)
+ | TUTOR(MOVE_THUNDER_PUNCH)
+ | TUTOR(MOVE_FURY_CUTTER)),
+
+ [SPECIES_TORCHIC] = (TUTOR(MOVE_MEGA_PUNCH)
+ | TUTOR(MOVE_SWORDS_DANCE)
+ | TUTOR(MOVE_MEGA_KICK)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_ROCK_SLIDE)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_SWIFT)),
+
+ [SPECIES_COMBUSKEN] = (TUTOR(MOVE_MEGA_PUNCH)
+ | TUTOR(MOVE_SWORDS_DANCE)
+ | TUTOR(MOVE_MEGA_KICK)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_ROCK_SLIDE)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_DYNAMIC_PUNCH)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_SWIFT)
+ | TUTOR(MOVE_THUNDER_PUNCH)
+ | TUTOR(MOVE_FIRE_PUNCH)
+ | TUTOR(MOVE_FURY_CUTTER)),
+
+ [SPECIES_BLAZIKEN] = (TUTOR(MOVE_MEGA_PUNCH)
+ | TUTOR(MOVE_SWORDS_DANCE)
+ | TUTOR(MOVE_MEGA_KICK)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_ROCK_SLIDE)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_DYNAMIC_PUNCH)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_SWIFT)
+ | TUTOR(MOVE_THUNDER_PUNCH)
+ | TUTOR(MOVE_FIRE_PUNCH)
+ | TUTOR(MOVE_FURY_CUTTER)),
+
+ [SPECIES_MUDKIP] = (TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_ROLLOUT)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ICY_WIND)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_DEFENSE_CURL)),
+
+ [SPECIES_MARSHTOMP] = (TUTOR(MOVE_MEGA_PUNCH)
+ | TUTOR(MOVE_MEGA_KICK)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_ROCK_SLIDE)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_DYNAMIC_PUNCH)
+ | TUTOR(MOVE_ROLLOUT)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ICY_WIND)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_ICE_PUNCH)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_DEFENSE_CURL)),
+
+ [SPECIES_SWAMPERT] = (TUTOR(MOVE_MEGA_PUNCH)
+ | TUTOR(MOVE_MEGA_KICK)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_ROCK_SLIDE)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_DYNAMIC_PUNCH)
+ | TUTOR(MOVE_ROLLOUT)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ICY_WIND)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_ICE_PUNCH)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_DEFENSE_CURL)),
+
+ [SPECIES_POOCHYENA] = (TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_PSYCH_UP)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)),
+
+ [SPECIES_MIGHTYENA] = (TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_PSYCH_UP)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)),
+
+ [SPECIES_ZIGZAGOON] = (TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_THUNDER_WAVE)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_ROLLOUT)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ICY_WIND)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_SWIFT)
+ | TUTOR(MOVE_DEFENSE_CURL)
+ | TUTOR(MOVE_FURY_CUTTER)),
+
+ [SPECIES_LINOONE] = (TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_THUNDER_WAVE)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_ROLLOUT)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ICY_WIND)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_SWIFT)
+ | TUTOR(MOVE_DEFENSE_CURL)
+ | TUTOR(MOVE_FURY_CUTTER)),
+
+ [SPECIES_WURMPLE] = (0),
+
+ [SPECIES_SILCOON] = (0),
+
+ [SPECIES_BEAUTIFLY] = (TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_SWIFT)),
+
+ [SPECIES_CASCOON] = (0),
+
+ [SPECIES_DUSTOX] = (TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_SWIFT)),
+
+ [SPECIES_LOTAD] = (TUTOR(MOVE_SWORDS_DANCE)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ICY_WIND)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)),
+
+ [SPECIES_LOMBRE] = (TUTOR(MOVE_SWORDS_DANCE)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_DYNAMIC_PUNCH)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ICY_WIND)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_ICE_PUNCH)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_THUNDER_PUNCH)
+ | TUTOR(MOVE_FIRE_PUNCH)),
+
+ [SPECIES_LUDICOLO] = (TUTOR(MOVE_MEGA_PUNCH)
+ | TUTOR(MOVE_SWORDS_DANCE)
+ | TUTOR(MOVE_MEGA_KICK)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_METRONOME)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_DYNAMIC_PUNCH)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ICY_WIND)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_ICE_PUNCH)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_THUNDER_PUNCH)
+ | TUTOR(MOVE_FIRE_PUNCH)),
+
+ [SPECIES_SEEDOT] = (TUTOR(MOVE_SWORDS_DANCE)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_EXPLOSION)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_ROLLOUT)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_DEFENSE_CURL)),
+
+ [SPECIES_NUZLEAF] = (TUTOR(MOVE_SWORDS_DANCE)
+ | TUTOR(MOVE_MEGA_KICK)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_EXPLOSION)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_ROLLOUT)
+ | TUTOR(MOVE_PSYCH_UP)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_SWIFT)
+ | TUTOR(MOVE_DEFENSE_CURL)
+ | TUTOR(MOVE_FURY_CUTTER)),
+
+ [SPECIES_SHIFTRY] = (TUTOR(MOVE_SWORDS_DANCE)
+ | TUTOR(MOVE_MEGA_KICK)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_EXPLOSION)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_ROLLOUT)
+ | TUTOR(MOVE_PSYCH_UP)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_SWIFT)
+ | TUTOR(MOVE_DEFENSE_CURL)
+ | TUTOR(MOVE_FURY_CUTTER)),
+
+ [SPECIES_NINCADA] = (TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_FURY_CUTTER)),
+
+ [SPECIES_NINJASK] = (TUTOR(MOVE_SWORDS_DANCE)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_SWIFT)
+ | TUTOR(MOVE_FURY_CUTTER)),
+
+ [SPECIES_SHEDINJA] = (TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_DREAM_EATER)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_FURY_CUTTER)),
+
+ [SPECIES_TAILLOW] = (TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_SWIFT)),
+
+ [SPECIES_SWELLOW] = (TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_SWIFT)),
+
+ [SPECIES_SHROOMISH] = (TUTOR(MOVE_SWORDS_DANCE)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)),
+
+ [SPECIES_BRELOOM] = (TUTOR(MOVE_MEGA_PUNCH)
+ | TUTOR(MOVE_SWORDS_DANCE)
+ | TUTOR(MOVE_MEGA_KICK)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_DYNAMIC_PUNCH)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_THUNDER_PUNCH)
+ | TUTOR(MOVE_FURY_CUTTER)),
+
+ [SPECIES_SPINDA] = (TUTOR(MOVE_MEGA_PUNCH)
+ | TUTOR(MOVE_MEGA_KICK)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_METRONOME)
+ | TUTOR(MOVE_DREAM_EATER)
+ | TUTOR(MOVE_ROCK_SLIDE)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_DYNAMIC_PUNCH)
+ | TUTOR(MOVE_ROLLOUT)
+ | TUTOR(MOVE_PSYCH_UP)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ICY_WIND)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_ICE_PUNCH)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_SWIFT)
+ | TUTOR(MOVE_DEFENSE_CURL)
+ | TUTOR(MOVE_THUNDER_PUNCH)
+ | TUTOR(MOVE_FIRE_PUNCH)),
+
+ [SPECIES_WINGULL] = (TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ICY_WIND)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_SWIFT)),
+
+ [SPECIES_PELIPPER] = (TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ICY_WIND)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_SWIFT)),
+
+ [SPECIES_SURSKIT] = (TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_PSYCH_UP)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ICY_WIND)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_SWIFT)),
+
+ [SPECIES_MASQUERAIN] = (TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_PSYCH_UP)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ICY_WIND)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_SWIFT)),
+
+ [SPECIES_WAILMER] = (TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_ROLLOUT)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ICY_WIND)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_DEFENSE_CURL)),
+
+ [SPECIES_WAILORD] = (TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_ROLLOUT)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ICY_WIND)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_DEFENSE_CURL)),
+
+ [SPECIES_SKITTY] = (TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_DREAM_EATER)
+ | TUTOR(MOVE_THUNDER_WAVE)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_ROLLOUT)
+ | TUTOR(MOVE_PSYCH_UP)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ICY_WIND)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_SWIFT)
+ | TUTOR(MOVE_DEFENSE_CURL)),
+
+ [SPECIES_DELCATTY] = (TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_DREAM_EATER)
+ | TUTOR(MOVE_THUNDER_WAVE)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_ROLLOUT)
+ | TUTOR(MOVE_PSYCH_UP)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ICY_WIND)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_SWIFT)
+ | TUTOR(MOVE_DEFENSE_CURL)),
+
+ [SPECIES_KECLEON] = (TUTOR(MOVE_MEGA_PUNCH)
+ | TUTOR(MOVE_MEGA_KICK)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_METRONOME)
+ | TUTOR(MOVE_THUNDER_WAVE)
+ | TUTOR(MOVE_ROCK_SLIDE)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_DYNAMIC_PUNCH)
+ | TUTOR(MOVE_ROLLOUT)
+ | TUTOR(MOVE_PSYCH_UP)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ICY_WIND)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_ICE_PUNCH)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_SWIFT)
+ | TUTOR(MOVE_DEFENSE_CURL)
+ | TUTOR(MOVE_THUNDER_PUNCH)
+ | TUTOR(MOVE_FIRE_PUNCH)
+ | TUTOR(MOVE_FURY_CUTTER)),
+
+ [SPECIES_BALTOY] = (TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_DREAM_EATER)
+ | TUTOR(MOVE_EXPLOSION)
+ | TUTOR(MOVE_ROCK_SLIDE)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_PSYCH_UP)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)),
+
+ [SPECIES_CLAYDOL] = (TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_DREAM_EATER)
+ | TUTOR(MOVE_EXPLOSION)
+ | TUTOR(MOVE_ROCK_SLIDE)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_PSYCH_UP)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)),
+
+ [SPECIES_NOSEPASS] = (TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_THUNDER_WAVE)
+ | TUTOR(MOVE_EXPLOSION)
+ | TUTOR(MOVE_ROCK_SLIDE)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_DYNAMIC_PUNCH)
+ | TUTOR(MOVE_ROLLOUT)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_ICE_PUNCH)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_DEFENSE_CURL)
+ | TUTOR(MOVE_THUNDER_PUNCH)
+ | TUTOR(MOVE_FIRE_PUNCH)),
+
+ [SPECIES_TORKOAL] = (TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_EXPLOSION)
+ | TUTOR(MOVE_ROCK_SLIDE)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)),
+
+ [SPECIES_SABLEYE] = (TUTOR(MOVE_MEGA_PUNCH)
+ | TUTOR(MOVE_MEGA_KICK)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_METRONOME)
+ | TUTOR(MOVE_DREAM_EATER)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_DYNAMIC_PUNCH)
+ | TUTOR(MOVE_PSYCH_UP)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_ICE_PUNCH)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_THUNDER_PUNCH)
+ | TUTOR(MOVE_FIRE_PUNCH)
+ | TUTOR(MOVE_FURY_CUTTER)),
+
+ [SPECIES_BARBOACH] = (TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ICY_WIND)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)),
+
+ [SPECIES_WHISCASH] = (TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_ROCK_SLIDE)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ICY_WIND)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)),
+
+ [SPECIES_LUVDISC] = (TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_PSYCH_UP)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ICY_WIND)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_SWIFT)),
+
+ [SPECIES_CORPHISH] = (TUTOR(MOVE_SWORDS_DANCE)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ICY_WIND)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_FURY_CUTTER)),
+
+ [SPECIES_CRAWDAUNT] = (TUTOR(MOVE_SWORDS_DANCE)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ICY_WIND)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_SWIFT)
+ | TUTOR(MOVE_FURY_CUTTER)),
+
+ [SPECIES_FEEBAS] = (TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ICY_WIND)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_SWIFT)),
+
+ [SPECIES_MILOTIC] = (TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_PSYCH_UP)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ICY_WIND)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_SWIFT)),
+
+ [SPECIES_CARVANHA] = (TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ICY_WIND)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_SWIFT)
+ | TUTOR(MOVE_FURY_CUTTER)),
+
+ [SPECIES_SHARPEDO] = (TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ICY_WIND)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_SWIFT)
+ | TUTOR(MOVE_FURY_CUTTER)),
+
+ [SPECIES_TRAPINCH] = (TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_ROCK_SLIDE)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)),
+
+ [SPECIES_VIBRAVA] = (TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_ROCK_SLIDE)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_SWIFT)),
+
+ [SPECIES_FLYGON] = (TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_ROCK_SLIDE)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_SWIFT)
+ | TUTOR(MOVE_FIRE_PUNCH)
+ | TUTOR(MOVE_FURY_CUTTER)),
+
+ [SPECIES_MAKUHITA] = (TUTOR(MOVE_MEGA_PUNCH)
+ | TUTOR(MOVE_MEGA_KICK)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_METRONOME)
+ | TUTOR(MOVE_ROCK_SLIDE)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_DYNAMIC_PUNCH)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_ICE_PUNCH)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_THUNDER_PUNCH)
+ | TUTOR(MOVE_FIRE_PUNCH)),
+
+ [SPECIES_HARIYAMA] = (TUTOR(MOVE_MEGA_PUNCH)
+ | TUTOR(MOVE_MEGA_KICK)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_METRONOME)
+ | TUTOR(MOVE_ROCK_SLIDE)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_DYNAMIC_PUNCH)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_ICE_PUNCH)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_THUNDER_PUNCH)
+ | TUTOR(MOVE_FIRE_PUNCH)),
+
+ [SPECIES_ELECTRIKE] = (TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_THUNDER_WAVE)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_SWIFT)),
+
+ [SPECIES_MANECTRIC] = (TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_THUNDER_WAVE)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_SWIFT)),
+
+ [SPECIES_NUMEL] = (TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_ROCK_SLIDE)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_ROLLOUT)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_DEFENSE_CURL)),
+
+ [SPECIES_CAMERUPT] = (TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_EXPLOSION)
+ | TUTOR(MOVE_ROCK_SLIDE)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_ROLLOUT)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_DEFENSE_CURL)),
+
+ [SPECIES_SPHEAL] = (TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_ROCK_SLIDE)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_ROLLOUT)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ICY_WIND)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_DEFENSE_CURL)),
+
+ [SPECIES_SEALEO] = (TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_ROCK_SLIDE)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_ROLLOUT)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ICY_WIND)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_DEFENSE_CURL)),
+
+ [SPECIES_WALREIN] = (TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_ROCK_SLIDE)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_ROLLOUT)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ICY_WIND)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_DEFENSE_CURL)),
+
+ [SPECIES_CACNEA] = (TUTOR(MOVE_MEGA_PUNCH)
+ | TUTOR(MOVE_SWORDS_DANCE)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_DYNAMIC_PUNCH)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_THUNDER_PUNCH)
+ | TUTOR(MOVE_FURY_CUTTER)),
+
+ [SPECIES_CACTURNE] = (TUTOR(MOVE_MEGA_PUNCH)
+ | TUTOR(MOVE_SWORDS_DANCE)
+ | TUTOR(MOVE_MEGA_KICK)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_DYNAMIC_PUNCH)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_THUNDER_PUNCH)
+ | TUTOR(MOVE_FURY_CUTTER)),
+
+ [SPECIES_SNORUNT] = (TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ICY_WIND)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)),
+
+ [SPECIES_GLALIE] = (TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_EXPLOSION)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_ROLLOUT)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ICY_WIND)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_DEFENSE_CURL)),
+
+ [SPECIES_LUNATONE] = (TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_DREAM_EATER)
+ | TUTOR(MOVE_EXPLOSION)
+ | TUTOR(MOVE_ROCK_SLIDE)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_ROLLOUT)
+ | TUTOR(MOVE_PSYCH_UP)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_SWIFT)
+ | TUTOR(MOVE_DEFENSE_CURL)),
+
+ [SPECIES_SOLROCK] = (TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_DREAM_EATER)
+ | TUTOR(MOVE_EXPLOSION)
+ | TUTOR(MOVE_ROCK_SLIDE)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_ROLLOUT)
+ | TUTOR(MOVE_PSYCH_UP)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_SWIFT)
+ | TUTOR(MOVE_DEFENSE_CURL)),
+
+ [SPECIES_AZURILL] = (TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_ROLLOUT)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ICY_WIND)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_SWIFT)
+ | TUTOR(MOVE_DEFENSE_CURL)),
+
+ [SPECIES_SPOINK] = (TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_DREAM_EATER)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_PSYCH_UP)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ICY_WIND)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_SWIFT)),
+
+ [SPECIES_GRUMPIG] = (TUTOR(MOVE_MEGA_PUNCH)
+ | TUTOR(MOVE_MEGA_KICK)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_DREAM_EATER)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_DYNAMIC_PUNCH)
+ | TUTOR(MOVE_PSYCH_UP)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ICY_WIND)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_ICE_PUNCH)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_SWIFT)
+ | TUTOR(MOVE_THUNDER_PUNCH)
+ | TUTOR(MOVE_FIRE_PUNCH)),
+
+ [SPECIES_PLUSLE] = (TUTOR(MOVE_MEGA_PUNCH)
+ | TUTOR(MOVE_MEGA_KICK)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_METRONOME)
+ | TUTOR(MOVE_THUNDER_WAVE)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_DYNAMIC_PUNCH)
+ | TUTOR(MOVE_ROLLOUT)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_SWIFT)
+ | TUTOR(MOVE_DEFENSE_CURL)
+ | TUTOR(MOVE_THUNDER_PUNCH)),
+
+ [SPECIES_MINUN] = (TUTOR(MOVE_MEGA_PUNCH)
+ | TUTOR(MOVE_MEGA_KICK)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_METRONOME)
+ | TUTOR(MOVE_THUNDER_WAVE)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_DYNAMIC_PUNCH)
+ | TUTOR(MOVE_ROLLOUT)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_SWIFT)
+ | TUTOR(MOVE_DEFENSE_CURL)
+ | TUTOR(MOVE_THUNDER_PUNCH)),
+
+ [SPECIES_MAWILE] = (TUTOR(MOVE_MEGA_PUNCH)
+ | TUTOR(MOVE_SWORDS_DANCE)
+ | TUTOR(MOVE_MEGA_KICK)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_ROCK_SLIDE)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_DYNAMIC_PUNCH)
+ | TUTOR(MOVE_PSYCH_UP)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ICY_WIND)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_ICE_PUNCH)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_THUNDER_PUNCH)),
+
+ [SPECIES_MEDITITE] = (TUTOR(MOVE_MEGA_PUNCH)
+ | TUTOR(MOVE_MEGA_KICK)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_METRONOME)
+ | TUTOR(MOVE_DREAM_EATER)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_DYNAMIC_PUNCH)
+ | TUTOR(MOVE_PSYCH_UP)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_ICE_PUNCH)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_SWIFT)
+ | TUTOR(MOVE_THUNDER_PUNCH)
+ | TUTOR(MOVE_FIRE_PUNCH)),
+
+ [SPECIES_MEDICHAM] = (TUTOR(MOVE_MEGA_PUNCH)
+ | TUTOR(MOVE_MEGA_KICK)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_METRONOME)
+ | TUTOR(MOVE_DREAM_EATER)
+ | TUTOR(MOVE_ROCK_SLIDE)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_DYNAMIC_PUNCH)
+ | TUTOR(MOVE_PSYCH_UP)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_ICE_PUNCH)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_SWIFT)
+ | TUTOR(MOVE_THUNDER_PUNCH)
+ | TUTOR(MOVE_FIRE_PUNCH)),
+
+ [SPECIES_SWABLU] = (TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_DREAM_EATER)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_PSYCH_UP)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_SWIFT)),
+
+ [SPECIES_ALTARIA] = (TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_DREAM_EATER)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_PSYCH_UP)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_SWIFT)),
+
+ [SPECIES_WYNAUT] = (0),
+
+ [SPECIES_DUSKULL] = (TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_DREAM_EATER)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_PSYCH_UP)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ICY_WIND)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)),
+
+ [SPECIES_DUSCLOPS] = (TUTOR(MOVE_MEGA_PUNCH)
+ | TUTOR(MOVE_MEGA_KICK)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_METRONOME)
+ | TUTOR(MOVE_DREAM_EATER)
+ | TUTOR(MOVE_ROCK_SLIDE)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_DYNAMIC_PUNCH)
+ | TUTOR(MOVE_PSYCH_UP)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ICY_WIND)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_ICE_PUNCH)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_THUNDER_PUNCH)
+ | TUTOR(MOVE_FIRE_PUNCH)),
+
+ [SPECIES_ROSELIA] = (TUTOR(MOVE_SWORDS_DANCE)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_PSYCH_UP)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_SWIFT)
+ | TUTOR(MOVE_FURY_CUTTER)),
+
+ [SPECIES_SLAKOTH] = (TUTOR(MOVE_MEGA_PUNCH)
+ | TUTOR(MOVE_MEGA_KICK)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_ROCK_SLIDE)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_DYNAMIC_PUNCH)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ICY_WIND)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_ICE_PUNCH)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_THUNDER_PUNCH)
+ | TUTOR(MOVE_FIRE_PUNCH)
+ | TUTOR(MOVE_FURY_CUTTER)),
+
+ [SPECIES_VIGOROTH] = (TUTOR(MOVE_MEGA_PUNCH)
+ | TUTOR(MOVE_MEGA_KICK)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_ROCK_SLIDE)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_DYNAMIC_PUNCH)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ICY_WIND)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_ICE_PUNCH)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_THUNDER_PUNCH)
+ | TUTOR(MOVE_FIRE_PUNCH)
+ | TUTOR(MOVE_FURY_CUTTER)),
+
+ [SPECIES_SLAKING] = (TUTOR(MOVE_MEGA_PUNCH)
+ | TUTOR(MOVE_MEGA_KICK)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_ROCK_SLIDE)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_DYNAMIC_PUNCH)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ICY_WIND)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_ICE_PUNCH)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_THUNDER_PUNCH)
+ | TUTOR(MOVE_FIRE_PUNCH)
+ | TUTOR(MOVE_FURY_CUTTER)),
+
+ [SPECIES_GULPIN] = (TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_DREAM_EATER)
+ | TUTOR(MOVE_EXPLOSION)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_DYNAMIC_PUNCH)
+ | TUTOR(MOVE_ROLLOUT)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_ICE_PUNCH)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_DEFENSE_CURL)
+ | TUTOR(MOVE_THUNDER_PUNCH)
+ | TUTOR(MOVE_FIRE_PUNCH)),
+
+ [SPECIES_SWALOT] = (TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_DREAM_EATER)
+ | TUTOR(MOVE_EXPLOSION)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_DYNAMIC_PUNCH)
+ | TUTOR(MOVE_ROLLOUT)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_ICE_PUNCH)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_DEFENSE_CURL)
+ | TUTOR(MOVE_THUNDER_PUNCH)
+ | TUTOR(MOVE_FIRE_PUNCH)),
+
+ [SPECIES_TROPIUS] = (TUTOR(MOVE_SWORDS_DANCE)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_FURY_CUTTER)),
+
+ [SPECIES_WHISMUR] = (TUTOR(MOVE_MEGA_PUNCH)
+ | TUTOR(MOVE_MEGA_KICK)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_DYNAMIC_PUNCH)
+ | TUTOR(MOVE_ROLLOUT)
+ | TUTOR(MOVE_PSYCH_UP)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ICY_WIND)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_ICE_PUNCH)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_DEFENSE_CURL)
+ | TUTOR(MOVE_THUNDER_PUNCH)
+ | TUTOR(MOVE_FIRE_PUNCH)),
+
+ [SPECIES_LOUDRED] = (TUTOR(MOVE_MEGA_PUNCH)
+ | TUTOR(MOVE_MEGA_KICK)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_ROCK_SLIDE)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_DYNAMIC_PUNCH)
+ | TUTOR(MOVE_ROLLOUT)
+ | TUTOR(MOVE_PSYCH_UP)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ICY_WIND)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_ICE_PUNCH)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_DEFENSE_CURL)
+ | TUTOR(MOVE_THUNDER_PUNCH)
+ | TUTOR(MOVE_FIRE_PUNCH)),
+
+ [SPECIES_EXPLOUD] = (TUTOR(MOVE_MEGA_PUNCH)
+ | TUTOR(MOVE_MEGA_KICK)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_ROCK_SLIDE)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_DYNAMIC_PUNCH)
+ | TUTOR(MOVE_ROLLOUT)
+ | TUTOR(MOVE_PSYCH_UP)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ICY_WIND)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_ICE_PUNCH)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_DEFENSE_CURL)
+ | TUTOR(MOVE_THUNDER_PUNCH)
+ | TUTOR(MOVE_FIRE_PUNCH)),
+
+ [SPECIES_CLAMPERL] = (TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ICY_WIND)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)),
+
+ [SPECIES_HUNTAIL] = (TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ICY_WIND)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_SWIFT)),
+
+ [SPECIES_GOREBYSS] = (TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ICY_WIND)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_SWIFT)),
+
+ [SPECIES_ABSOL] = (TUTOR(MOVE_SWORDS_DANCE)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_DREAM_EATER)
+ | TUTOR(MOVE_THUNDER_WAVE)
+ | TUTOR(MOVE_ROCK_SLIDE)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_PSYCH_UP)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ICY_WIND)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_SWIFT)
+ | TUTOR(MOVE_FURY_CUTTER)),
+
+ [SPECIES_SHUPPET] = (TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_DREAM_EATER)
+ | TUTOR(MOVE_THUNDER_WAVE)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_PSYCH_UP)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ICY_WIND)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)),
+
+ [SPECIES_BANETTE] = (TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_METRONOME)
+ | TUTOR(MOVE_DREAM_EATER)
+ | TUTOR(MOVE_THUNDER_WAVE)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_PSYCH_UP)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ICY_WIND)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)),
+
+ [SPECIES_SEVIPER] = (TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_SWIFT)
+ | TUTOR(MOVE_FURY_CUTTER)),
+
+ [SPECIES_ZANGOOSE] = (TUTOR(MOVE_MEGA_PUNCH)
+ | TUTOR(MOVE_SWORDS_DANCE)
+ | TUTOR(MOVE_MEGA_KICK)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_THUNDER_WAVE)
+ | TUTOR(MOVE_ROCK_SLIDE)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_DYNAMIC_PUNCH)
+ | TUTOR(MOVE_ROLLOUT)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ICY_WIND)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_ICE_PUNCH)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_SWIFT)
+ | TUTOR(MOVE_DEFENSE_CURL)
+ | TUTOR(MOVE_THUNDER_PUNCH)
+ | TUTOR(MOVE_FIRE_PUNCH)
+ | TUTOR(MOVE_FURY_CUTTER)),
+
+ [SPECIES_RELICANTH] = (TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_ROCK_SLIDE)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_PSYCH_UP)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ICY_WIND)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)),
+
+ [SPECIES_ARON] = (TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_ROCK_SLIDE)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_ROLLOUT)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_DEFENSE_CURL)
+ | TUTOR(MOVE_FURY_CUTTER)),
+
+ [SPECIES_LAIRON] = (TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_ROCK_SLIDE)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_ROLLOUT)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_DEFENSE_CURL)
+ | TUTOR(MOVE_FURY_CUTTER)),
+
+ [SPECIES_AGGRON] = (TUTOR(MOVE_MEGA_PUNCH)
+ | TUTOR(MOVE_MEGA_KICK)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_THUNDER_WAVE)
+ | TUTOR(MOVE_ROCK_SLIDE)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_DYNAMIC_PUNCH)
+ | TUTOR(MOVE_ROLLOUT)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ICY_WIND)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_ICE_PUNCH)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_DEFENSE_CURL)
+ | TUTOR(MOVE_THUNDER_PUNCH)
+ | TUTOR(MOVE_FIRE_PUNCH)
+ | TUTOR(MOVE_FURY_CUTTER)),
+
+ [SPECIES_CASTFORM] = (TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_THUNDER_WAVE)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_PSYCH_UP)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ICY_WIND)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_SWIFT)
+ | TUTOR(MOVE_DEFENSE_CURL)),
+
+ [SPECIES_VOLBEAT] = (TUTOR(MOVE_MEGA_PUNCH)
+ | TUTOR(MOVE_MEGA_KICK)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_METRONOME)
+ | TUTOR(MOVE_THUNDER_WAVE)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_DYNAMIC_PUNCH)
+ | TUTOR(MOVE_PSYCH_UP)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_ICE_PUNCH)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_SWIFT)
+ | TUTOR(MOVE_THUNDER_PUNCH)),
+
+ [SPECIES_ILLUMISE] = (TUTOR(MOVE_MEGA_PUNCH)
+ | TUTOR(MOVE_MEGA_KICK)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_METRONOME)
+ | TUTOR(MOVE_THUNDER_WAVE)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_DYNAMIC_PUNCH)
+ | TUTOR(MOVE_PSYCH_UP)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_ICE_PUNCH)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_SWIFT)
+ | TUTOR(MOVE_THUNDER_PUNCH)),
+
+ [SPECIES_LILEEP] = (TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_ROCK_SLIDE)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_PSYCH_UP)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)),
+
+ [SPECIES_CRADILY] = (TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_ROCK_SLIDE)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_PSYCH_UP)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)),
+
+ [SPECIES_ANORITH] = (TUTOR(MOVE_SWORDS_DANCE)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_ROCK_SLIDE)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_FURY_CUTTER)),
+
+ [SPECIES_ARMALDO] = (TUTOR(MOVE_SWORDS_DANCE)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_ROCK_SLIDE)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_FURY_CUTTER)),
+
+ [SPECIES_RALTS] = (TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_DREAM_EATER)
+ | TUTOR(MOVE_THUNDER_WAVE)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_PSYCH_UP)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ICY_WIND)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_ICE_PUNCH)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_DEFENSE_CURL)
+ | TUTOR(MOVE_THUNDER_PUNCH)
+ | TUTOR(MOVE_FIRE_PUNCH)),
+
+ [SPECIES_KIRLIA] = (TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_DREAM_EATER)
+ | TUTOR(MOVE_THUNDER_WAVE)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_PSYCH_UP)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ICY_WIND)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_ICE_PUNCH)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_DEFENSE_CURL)
+ | TUTOR(MOVE_THUNDER_PUNCH)
+ | TUTOR(MOVE_FIRE_PUNCH)),
+
+ [SPECIES_GARDEVOIR] = (TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_DREAM_EATER)
+ | TUTOR(MOVE_THUNDER_WAVE)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_PSYCH_UP)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ICY_WIND)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_ICE_PUNCH)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_DEFENSE_CURL)
+ | TUTOR(MOVE_THUNDER_PUNCH)
+ | TUTOR(MOVE_FIRE_PUNCH)),
+
+ [SPECIES_BAGON] = (TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_ROCK_SLIDE)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_FURY_CUTTER)),
+
+ [SPECIES_SHELGON] = (TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_ROCK_SLIDE)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_ROLLOUT)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_DEFENSE_CURL)
+ | TUTOR(MOVE_FURY_CUTTER)),
+
+ [SPECIES_SALAMENCE] = (TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_ROCK_SLIDE)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_ROLLOUT)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_SWIFT)
+ | TUTOR(MOVE_DEFENSE_CURL)
+ | TUTOR(MOVE_FURY_CUTTER)),
+
+ [SPECIES_BELDUM] = (0),
+
+ [SPECIES_METANG] = (TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_EXPLOSION)
+ | TUTOR(MOVE_ROCK_SLIDE)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_DYNAMIC_PUNCH)
+ | TUTOR(MOVE_ROLLOUT)
+ | TUTOR(MOVE_PSYCH_UP)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ICY_WIND)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_ICE_PUNCH)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_SWIFT)
+ | TUTOR(MOVE_DEFENSE_CURL)
+ | TUTOR(MOVE_THUNDER_PUNCH)
+ | TUTOR(MOVE_FURY_CUTTER)),
+
+ [SPECIES_METAGROSS] = (TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_EXPLOSION)
+ | TUTOR(MOVE_ROCK_SLIDE)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_DYNAMIC_PUNCH)
+ | TUTOR(MOVE_ROLLOUT)
+ | TUTOR(MOVE_PSYCH_UP)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ICY_WIND)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_ICE_PUNCH)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_SWIFT)
+ | TUTOR(MOVE_DEFENSE_CURL)
+ | TUTOR(MOVE_THUNDER_PUNCH)
+ | TUTOR(MOVE_FURY_CUTTER)),
+
+ [SPECIES_REGIROCK] = (TUTOR(MOVE_MEGA_PUNCH)
+ | TUTOR(MOVE_MEGA_KICK)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_THUNDER_WAVE)
+ | TUTOR(MOVE_EXPLOSION)
+ | TUTOR(MOVE_ROCK_SLIDE)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_DYNAMIC_PUNCH)
+ | TUTOR(MOVE_ROLLOUT)
+ | TUTOR(MOVE_PSYCH_UP)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_ICE_PUNCH)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_DEFENSE_CURL)
+ | TUTOR(MOVE_THUNDER_PUNCH)
+ | TUTOR(MOVE_FIRE_PUNCH)),
+
+ [SPECIES_REGICE] = (TUTOR(MOVE_MEGA_PUNCH)
+ | TUTOR(MOVE_MEGA_KICK)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_THUNDER_WAVE)
+ | TUTOR(MOVE_EXPLOSION)
+ | TUTOR(MOVE_ROCK_SLIDE)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_DYNAMIC_PUNCH)
+ | TUTOR(MOVE_ROLLOUT)
+ | TUTOR(MOVE_PSYCH_UP)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ICY_WIND)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_ICE_PUNCH)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_DEFENSE_CURL)
+ | TUTOR(MOVE_THUNDER_PUNCH)),
+
+ [SPECIES_REGISTEEL] = (TUTOR(MOVE_MEGA_PUNCH)
+ | TUTOR(MOVE_MEGA_KICK)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_THUNDER_WAVE)
+ | TUTOR(MOVE_EXPLOSION)
+ | TUTOR(MOVE_ROCK_SLIDE)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_DYNAMIC_PUNCH)
+ | TUTOR(MOVE_ROLLOUT)
+ | TUTOR(MOVE_PSYCH_UP)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_ICE_PUNCH)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_DEFENSE_CURL)
+ | TUTOR(MOVE_THUNDER_PUNCH)),
+
+ [SPECIES_KYOGRE] = (TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_THUNDER_WAVE)
+ | TUTOR(MOVE_ROCK_SLIDE)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_PSYCH_UP)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ICY_WIND)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_SWIFT)
+ | TUTOR(MOVE_DEFENSE_CURL)),
+
+ [SPECIES_GROUDON] = (TUTOR(MOVE_MEGA_PUNCH)
+ | TUTOR(MOVE_SWORDS_DANCE)
+ | TUTOR(MOVE_MEGA_KICK)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_THUNDER_WAVE)
+ | TUTOR(MOVE_ROCK_SLIDE)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_DYNAMIC_PUNCH)
+ | TUTOR(MOVE_ROLLOUT)
+ | TUTOR(MOVE_PSYCH_UP)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_SWIFT)
+ | TUTOR(MOVE_DEFENSE_CURL)
+ | TUTOR(MOVE_THUNDER_PUNCH)
+ | TUTOR(MOVE_FIRE_PUNCH)
+ | TUTOR(MOVE_FURY_CUTTER)),
+
+ [SPECIES_RAYQUAZA] = (TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_THUNDER_WAVE)
+ | TUTOR(MOVE_ROCK_SLIDE)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_PSYCH_UP)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ICY_WIND)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_SWIFT)
+ | TUTOR(MOVE_FURY_CUTTER)),
+
+ [SPECIES_LATIAS] = (TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_DREAM_EATER)
+ | TUTOR(MOVE_THUNDER_WAVE)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_PSYCH_UP)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ICY_WIND)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_SWIFT)
+ | TUTOR(MOVE_FURY_CUTTER)),
+
+ [SPECIES_LATIOS] = (TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_DREAM_EATER)
+ | TUTOR(MOVE_THUNDER_WAVE)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_PSYCH_UP)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ICY_WIND)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_SWIFT)
+ | TUTOR(MOVE_FURY_CUTTER)),
+
+ [SPECIES_JIRACHI] = (TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_METRONOME)
+ | TUTOR(MOVE_DREAM_EATER)
+ | TUTOR(MOVE_THUNDER_WAVE)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_DYNAMIC_PUNCH)
+ | TUTOR(MOVE_PSYCH_UP)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ICY_WIND)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_ICE_PUNCH)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_SWIFT)
+ | TUTOR(MOVE_DEFENSE_CURL)
+ | TUTOR(MOVE_THUNDER_PUNCH)
+ | TUTOR(MOVE_FIRE_PUNCH)),
+
+ [SPECIES_DEOXYS] = (TUTOR(MOVE_MEGA_PUNCH)
+ | TUTOR(MOVE_MEGA_KICK)
+ | TUTOR(MOVE_BODY_SLAM)
+ | TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_COUNTER)
+ | TUTOR(MOVE_SEISMIC_TOSS)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_DREAM_EATER)
+ | TUTOR(MOVE_THUNDER_WAVE)
+ | TUTOR(MOVE_ROCK_SLIDE)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_DYNAMIC_PUNCH)
+ | TUTOR(MOVE_PSYCH_UP)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ICY_WIND)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_MUD_SLAP)
+ | TUTOR(MOVE_ICE_PUNCH)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_SWIFT)
+ | TUTOR(MOVE_THUNDER_PUNCH)
+ | TUTOR(MOVE_FIRE_PUNCH)),
+
+ [SPECIES_CHIMECHO] = (TUTOR(MOVE_DOUBLE_EDGE)
+ | TUTOR(MOVE_MIMIC)
+ | TUTOR(MOVE_DREAM_EATER)
+ | TUTOR(MOVE_SUBSTITUTE)
+ | TUTOR(MOVE_ROLLOUT)
+ | TUTOR(MOVE_PSYCH_UP)
+ | TUTOR(MOVE_SNORE)
+ | TUTOR(MOVE_ICY_WIND)
+ | TUTOR(MOVE_ENDURE)
+ | TUTOR(MOVE_SWAGGER)
+ | TUTOR(MOVE_SLEEP_TALK)
+ | TUTOR(MOVE_DEFENSE_CURL)),
};
diff --git a/src/data/script_menu.h b/src/data/script_menu.h
new file mode 100644
index 000000000..b64146a5d
--- /dev/null
+++ b/src/data/script_menu.h
@@ -0,0 +1,1006 @@
+// multichoice lists
+static const struct MenuAction MultichoiceList_BrineyOnDewford[] =
+{
+ {gText_Petalburg},
+ {gText_Slateport},
+ {gText_Exit},
+};
+
+static const struct MenuAction MultichoiceList_EnterInfo[] =
+{
+ {gText_Enter2},
+ {gText_Info2},
+ {gText_Exit},
+};
+
+static const struct MenuAction MultichoiceList_ContestInfo[] =
+{
+ {gText_WhatsAContest},
+ {gText_TypesOfContests},
+ {gText_Ranks},
+ {gText_Cancel2},
+};
+
+static const struct MenuAction MultichoiceList_ContestType[] =
+{
+ {gText_CoolnessContest},
+ {gText_BeautyContest},
+ {gText_CutenessContest},
+ {gText_SmartnessContest},
+ {gText_ToughnessContest},
+ {gText_Exit},
+};
+
+static const struct MenuAction MultichoiceList_DecorRegistry[] =
+{
+ {gText_Decoration2},
+ {gText_PackUp},
+ {gText_Registry},
+ {gText_Exit},
+};
+
+static const struct MenuAction MultichoiceList_DecorNoRegistry[] =
+{
+ {gText_Decoration2},
+ {gText_PackUp},
+ {gText_Exit},
+};
+
+static const struct MenuAction MultichoiceList_RegisterMenu[] =
+{
+ {gMenuText_Register},
+ {gText_Registry},
+ {gText_Information},
+ {gText_Cancel2},
+};
+
+static const struct MenuAction MultichoiceList_Bike[] =
+{
+ {gText_Mach},
+ {gText_Acro},
+};
+
+static const struct MenuAction MultichoiceList_StatusInfo[] =
+{
+ {gText_Psn},
+ {gText_Par},
+ {gText_Slp},
+ {gText_Brn},
+ {gText_Frz},
+ {gText_Exit},
+};
+
+static const struct MenuAction MultichoiceList_BrineyOffDewford[] =
+{
+ {gText_Dewford},
+ {gText_Exit},
+};
+
+static const struct MenuAction MultichoiceList_ViewedPaintings[] =
+{
+ {gText_SawIt},
+ {gText_NotYet},
+};
+
+static const struct MenuAction MultichoiceList_YesNoInfo2[] =
+{
+ {gText_Yes},
+ {gText_No},
+ {gText_Info2},
+};
+
+static const struct MenuAction MultichoiceList_ChallengeInfo[] =
+{
+ {gText_Challenge},
+ {gText_Info3},
+ {gText_Exit},
+};
+
+static const struct MenuAction MultichoiceList_LevelMode[] =
+{
+ {gText_Lv50},
+ {gText_OpenLevel},
+ {gText_Exit},
+};
+
+static const struct MenuAction MultichoiceList_Mechadoll1_Q1[] =
+{
+ {gTrickHouse_Mechadoll_Oddish},
+ {gTrickHouse_Mechadoll_Poochyena},
+ {gTrickHouse_Mechadoll_Taillow},
+};
+
+static const struct MenuAction MultichoiceList_Mechadoll1_Q2[] =
+{
+ {gTrickHouse_Mechadoll_Azurill},
+ {gTrickHouse_Mechadoll_Lotad},
+ {gTrickHouse_Mechadoll_Wingull},
+};
+
+static const struct MenuAction MultichoiceList_Mechadoll1_Q3[] =
+{
+ {gTrickHouse_Mechadoll_Dustox},
+ {gTrickHouse_Mechadoll_Zubat},
+ {gTrickHouse_Mechadoll_Nincada},
+};
+
+static const struct MenuAction MultichoiceList_Mechadoll2_Q1[] =
+{
+ {gTrickHouse_Mechadoll_Ralts},
+ {gTrickHouse_Mechadoll_Zigzagoon},
+ {gTrickHouse_Mechadoll_Slakoth},
+};
+
+static const struct MenuAction MultichoiceList_Mechadoll2_Q2[] =
+{
+ {gTrickHouse_Mechadoll_Poochyena2},
+ {gTrickHouse_Mechadoll_Shroomish},
+ {gTrickHouse_Mechadoll_Zigzagoon2},
+};
+
+static const struct MenuAction MultichoiceList_Mechadoll2_Q3[] =
+{
+ {gTrickHouse_Mechadoll_Poochyena3},
+ {gTrickHouse_Mechadoll_Zubat2},
+ {gTrickHouse_Mechadoll_Carvanha},
+};
+
+static const struct MenuAction MultichoiceList_Mechadoll3_Q1[] =
+{
+ {gTrickHouse_Mechadoll_BurnHeal},
+ {gTrickHouse_Mechadoll_HarborMail},
+ {gTrickHouse_Mechadoll_SamePrice},
+};
+
+static const struct MenuAction MultichoiceList_Mechadoll3_Q2[] =
+{
+ {gTrickHouse_Mechadoll_60Yen},
+ {gTrickHouse_Mechadoll_55Yen},
+ {gTrickHouse_Mechadoll_Nothing},
+};
+
+static const struct MenuAction MultichoiceList_Mechadoll3_Q3[] =
+{
+ {gTrickHouse_Mechadoll_CostMore},
+ {gTrickHouse_Mechadoll_CostLess},
+ {gTrickHouse_Mechadoll_SamePrice2},
+};
+
+static const struct MenuAction MultichoiceList_Mechadoll4_Q1[] =
+{
+ {gTrickHouse_Mechadoll_Male},
+ {gTrickHouse_Mechadoll_Female},
+ {gTrickHouse_Mechadoll_Neither},
+};
+
+static const struct MenuAction MultichoiceList_Mechadoll4_Q2[] =
+{
+ {gTrickHouse_Mechadoll_ElderlyMen},
+ {gTrickHouse_Mechadoll_ElderlyLadies},
+ {gTrickHouse_Mechadoll_SameNumber},
+};
+
+static const struct MenuAction MultichoiceList_Mechadoll4_Q3[] =
+{
+ {gTrickHouse_Mechadoll_None},
+ {gTrickHouse_Mechadoll_One},
+ {gTrickHouse_Mechadoll_Two},
+};
+
+static const struct MenuAction MultichoiceList_Mechadoll5_Q1[] =
+{
+ {gTrickHouse_Mechadoll_Two2},
+ {gTrickHouse_Mechadoll_Three},
+ {gTrickHouse_Mechadoll_Four},
+};
+
+static const struct MenuAction MultichoiceList_Mechadoll5_Q2[] =
+{
+ {gTrickHouse_Mechadoll_Six},
+ {gTrickHouse_Mechadoll_Seven},
+ {gTrickHouse_Mechadoll_Eight},
+};
+
+static const struct MenuAction MultichoiceList_Mechadoll5_Q3[] =
+{
+ {gTrickHouse_Mechadoll_Six2},
+ {gTrickHouse_Mechadoll_Seven2},
+ {gTrickHouse_Mechadoll_Eight2},
+};
+
+static const struct MenuAction MultichoiceList_VendingMachine[] =
+{
+ {gText_FreshWaterAndPrice},
+ {gText_SodaPopAndPrice},
+ {gText_LemonadeAndPrice},
+ {gText_Exit},
+};
+
+static const struct MenuAction MultichoiceList_MachBikeInfo[] =
+{
+ {gText_HowToRide},
+ {gText_HowToTurn},
+ {gText_SandySlopes},
+ {gText_Exit},
+};
+
+static const struct MenuAction MultichoiceList_AcroBikeInfo[] =
+{
+ {gText_Wheelies},
+ {gText_BunnyHops},
+ {gText_Jump},
+ {gText_Exit},
+};
+
+static const struct MenuAction MultichoiceList_Satisfaction[] =
+{
+ {gText_Satisfied},
+ {gText_Dissatisfied},
+};
+
+static const struct MenuAction MultichoiceList_SternDeepSea[] =
+{
+ {gText_DeepSeaTooth},
+ {gText_DeepSeaScale},
+ {gText_Exit},
+};
+
+static const struct MenuAction MultichoiceList_UnusedAshVendor[] =
+{
+ {gText_BlueFlute2},
+ {gText_YellowFlute2},
+ {gText_RedFlute2},
+ {gText_WhiteFlute2},
+ {gText_BlackFlute2},
+ {gText_GlassChair},
+ {gText_GlassDesk},
+ {gText_Cancel2},
+};
+
+static const struct MenuAction MultichoiceList_GameCornerDolls[] =
+{
+ {gText_TreeckoDollAndPrice},
+ {gText_TorchicDollAndPrice},
+ {gText_MudkipDollAndPrice},
+ {gText_Exit},
+};
+
+static const struct MenuAction MultichoiceList_GameCornerTMs[] =
+{
+ {gText_TM32AndPrice},
+ {gText_TM29AndPrice},
+ {gText_TM35AndPrice},
+ {gText_TM24AndPrice},
+ {gText_TM13AndPrice},
+ {gText_Exit},
+};
+
+static const struct MenuAction MultichoiceList_GameCornerCoins[] =
+{
+ {gText_50CoinsAndPrice},
+ {gText_500CoinsAndPrice},
+ {gText_Exit},
+};
+
+static const struct MenuAction MultichoiceList_HowsFishing[] =
+{
+ {gText_Excellent2},
+ {gText_NotSoGood},
+};
+
+static const struct MenuAction MultichoiceList_SSTidalSlateportWithBF[] =
+{
+ {gText_LilycoveCity},
+ {gText_BattleFrontier},
+ {gText_Exit},
+};
+
+static const struct MenuAction MultichoiceList_SSTidalBattleFrontier[] =
+{
+ {gText_SlateportCity},
+ {gText_LilycoveCity},
+ {gText_Exit},
+};
+
+static const struct MenuAction MultichoiceList_RightLeft[] =
+{
+ {gText_Right},
+ {gText_Left},
+};
+
+static const struct MenuAction MultichoiceList_SSTidalSlateportNoBF[] =
+{
+ {gText_LilycoveCity},
+ {gText_Exit},
+};
+
+static const struct MenuAction MultichoiceList_Floors[] =
+{
+ {gText_5F},
+ {gText_4F},
+ {gText_3F},
+ {gText_2F},
+ {gText_1F},
+ {gText_Exit},
+};
+
+static const struct MenuAction MultichoiceList_ShardsR[] =
+{
+ {gText_RedShard},
+ {gText_Exit},
+};
+
+static const struct MenuAction MultichoiceList_ShardsY[] =
+{
+ {gText_YellowShard},
+ {gText_Exit},
+};
+
+static const struct MenuAction MultichoiceList_ShardsRY[] =
+{
+ {gText_RedShard},
+ {gText_YellowShard},
+ {gText_Exit},
+};
+
+static const struct MenuAction MultichoiceList_ShardsB[] =
+{
+ {gText_BlueShard},
+ {gText_Exit},
+};
+
+static const struct MenuAction MultichoiceList_ShardsRB[] =
+{
+ {gText_RedShard},
+ {gText_BlueShard},
+ {gText_Exit},
+};
+
+static const struct MenuAction MultichoiceList_ShardsYB[] =
+{
+ {gText_YellowShard},
+ {gText_BlueShard},
+ {gText_Exit},
+};
+
+static const struct MenuAction MultichoiceList_ShardsRYB[] =
+{
+ {gText_RedShard},
+ {gText_YellowShard},
+ {gText_BlueShard},
+ {gText_Exit},
+};
+
+static const struct MenuAction MultichoiceList_ShardsG[] =
+{
+ {gText_GreenShard},
+ {gText_Exit},
+};
+
+static const struct MenuAction MultichoiceList_ShardsRG[] =
+{
+ {gText_RedShard},
+ {gText_GreenShard},
+ {gText_Exit},
+};
+
+static const struct MenuAction MultichoiceList_ShardsYG[] =
+{
+ {gText_YellowShard},
+ {gText_GreenShard},
+ {gText_Exit},
+};
+
+static const struct MenuAction MultichoiceList_ShardsRYG[] =
+{
+ {gText_RedShard},
+ {gText_YellowShard},
+ {gText_GreenShard},
+ {gText_Exit},
+};
+
+static const struct MenuAction MultichoiceList_ShardsBG[] =
+{
+ {gText_BlueShard},
+ {gText_GreenShard},
+ {gText_Exit},
+};
+
+static const struct MenuAction MultichoiceList_ShardsRBG[] =
+{
+ {gText_RedShard},
+ {gText_BlueShard},
+ {gText_GreenShard},
+ {gText_Exit},
+};
+
+static const struct MenuAction MultichoiceList_ShardsYBG[] =
+{
+ {gText_YellowShard},
+ {gText_BlueShard},
+ {gText_GreenShard},
+ {gText_Exit},
+};
+
+static const struct MenuAction MultichoiceList_ShardsRYBG[] =
+{
+ {gText_RedShard},
+ {gText_YellowShard},
+ {gText_BlueShard},
+ {gText_GreenShard},
+ {gText_Exit},
+};
+
+static const struct MenuAction MultichoiceList_TourneyWithRecord[] =
+{
+ {gText_Opponent},
+ {gText_Tourney_Tree},
+ {gText_ReadyToStart},
+ {gText_Record2},
+ {gText_Rest},
+ {gText_Retire},
+};
+
+static const struct MenuAction MultichoiceList_TourneyNoRecord[] =
+{
+ {gText_Opponent},
+ {gText_Tourney_Tree},
+ {gText_ReadyToStart},
+ {gText_Rest},
+ {gText_Retire},
+};
+
+static const struct MenuAction MultichoiceList_Tent[] =
+{
+ {gText_RedTent},
+ {gText_BlueTent},
+};
+
+static const struct MenuAction MultichoiceList_LinkServicesNoBerry[] =
+{
+ {gText_TradeCenter},
+ {gText_Colosseum},
+ {gText_RecordCorner},
+ {gText_Exit},
+};
+
+static const struct MenuAction MultichoiceList_YesNoInfo[] =
+{
+ {gText_Yes},
+ {gText_No},
+ {gText_Info2},
+};
+
+static const struct MenuAction MultichoiceList_BattleMode[] =
+{
+ {gText_SingleBattle},
+ {gText_DoubleBattle},
+ {gText_MultiBattle},
+ {gText_Info2},
+ {gText_Exit},
+};
+
+static const struct MenuAction MultichoiceList_LinkServicesNoRecord[] =
+{
+ {gText_TradeCenter},
+ {gText_Colosseum},
+ {gText_BerryCrush3},
+ {gText_Exit},
+};
+
+static const struct MenuAction MultichoiceList_LinkServicesAll[] =
+{
+ {gText_TradeCenter},
+ {gText_Colosseum},
+ {gText_RecordCorner},
+ {gText_BerryCrush3},
+ {gText_Exit},
+};
+
+static const struct MenuAction MultichoiceList_LinkServicesNoRecordBerry[] =
+{
+ {gText_TradeCenter},
+ {gText_Colosseum},
+ {gText_Exit},
+};
+
+static const struct MenuAction MultichoiceList_WirelessMinigame[] =
+{
+ {gText_PokemonJump},
+ {gText_DodrioBerryPicking},
+ {gText_Exit},
+};
+
+static const struct MenuAction MultichoiceList_LinkLeader[] =
+{
+ {gText_JoinGroup},
+ {gText_BecomeLeader},
+ {gText_Exit},
+};
+
+static const struct MenuAction MultichoiceList_ContestRank[] =
+{
+ {gText_NormalRank},
+ {gText_SuperRank},
+ {gText_HyperRank},
+ {gText_MasterRank},
+ {gText_Exit},
+};
+
+static const struct MenuAction MultichoiceList_FrontierItemChoose[] =
+{
+ {gText_BattleBag},
+ {gText_HeldItem},
+ {gText_Exit},
+};
+
+static const struct MenuAction MultichoiceList_LinkContestInfo[] =
+{
+ {gText_LinkContest},
+ {gText_AboutE_Mode},
+ {gText_AboutG_Mode},
+ {gText_Cancel2},
+};
+
+static const struct MenuAction MultichoiceList_LinkContestMode[] =
+{
+ {gText_E_Mode},
+ {gText_G_Mode},
+ {gText_Exit},
+};
+
+static const struct MenuAction MultichoiceList_ForcedStartMenu[] =
+{
+ {gText_MenuOptionPokedex},
+ {gText_MenuOptionPokemon},
+ {gText_MenuOptionBag},
+ {gText_MenuOptionPokenav},
+ {gText_Blank}, // blank because it's filled by the player's name
+ {gText_MenuOptionSave},
+ {gText_MenuOptionOption},
+ {gText_MenuOptionExit},
+};
+
+static const struct MenuAction MultichoiceList_FrontierGamblerBet[] =
+{
+ {gText_5BP},
+ {gText_10BP},
+ {gText_15BP},
+ {gText_Exit},
+};
+
+static const struct MenuAction MultichoiceList_UnusedSSTidal1[] =
+{
+ {gText_SouthernIsland},
+ {gText_BirthIsland},
+ {gText_Exit},
+};
+
+static const struct MenuAction MultichoiceList_UnusedSSTidal2[] =
+{
+ {gText_SouthernIsland},
+ {gText_FarawayIsland},
+ {gText_Exit},
+};
+
+static const struct MenuAction MultichoiceList_UnusedSSTidal3[] =
+{
+ {gText_BirthIsland},
+ {gText_FarawayIsland},
+ {gText_Exit},
+};
+
+static const struct MenuAction MultichoiceList_UnusedSSTidal4[] =
+{
+ {gText_SouthernIsland},
+ {gText_BirthIsland},
+ {gText_FarawayIsland},
+ {gText_Exit},
+};
+
+static const struct MenuAction MultichoiceList_Fossil[] =
+{
+ {gText_ClawFossil},
+ {gText_RootFossil},
+ {gText_Exit},
+};
+
+static const struct MenuAction MultichoiceList_YesNo[] =
+{
+ {gText_Yes},
+ {gText_No4},
+};
+
+static const struct MenuAction MultichoiceList_FrontierRules[] =
+{
+ {gText_TwoStyles},
+ {gText_Lv50_3},
+ {gText_OpenLevel2},
+ {gText_MonTypeAndNo},
+ {gText_HoldItems},
+ {gText_Exit},
+};
+
+static const struct MenuAction MultichoiceList_FrontierPassInfo[] =
+{
+ {gText_Symbols2},
+ {gText_Record3},
+ {gText_BattlePts},
+ {gText_Exit},
+};
+
+static const struct MenuAction MultichoiceList_BattleArenaRules[] =
+{
+ {gText_BattleRules},
+ {gText_JudgeMind},
+ {gText_JudgeSkill},
+ {gText_JudgeBody},
+ {gText_Exit},
+};
+
+static const struct MenuAction MultichoiceList_BattleTowerRules[] =
+{
+ {gText_TowerInfo},
+ {gText_BattleMon},
+ {gText_BattleSalon},
+ {gText_MultiLink2},
+ {gText_Exit},
+};
+
+static const struct MenuAction MultichoiceList_BattleDomeRules[] =
+{
+ {gText_Matchup},
+ {gText_TourneyTree},
+ {gText_DoubleKO},
+ {gText_Exit},
+};
+
+static const struct MenuAction MultichoiceList_BattleFactoryRules[] =
+{
+ {gText_BasicRules},
+ {gText_SwapPartners},
+ {gText_SwapNumber},
+ {gText_SwapNotes},
+ {gText_OpenLevel3},
+ {gText_Exit},
+};
+
+static const struct MenuAction MultichoiceList_BattlePalaceRules[] =
+{
+ {gText_BattleBasics},
+ {gText_PokemonNature},
+ {gText_PokemonMoves},
+ {gText_Underpowered},
+ {gText_WhenInDanger},
+ {gText_Exit},
+};
+
+static const struct MenuAction MultichoiceList_BattlePyramidRules[] =
+{
+ {gText_PyramidPokemon},
+ {gText_PyramidTrainers},
+ {gText_PyramidMaze},
+ {gText_BattleBag2},
+ {gText_Exit},
+};
+
+static const struct MenuAction MultichoiceList_BattlePikeRules[] =
+{
+ {gText_PokenavAndBag},
+ {gText_HeldItems},
+ {gText_PokemonOrder},
+ {gText_Exit},
+};
+
+static const struct MenuAction MultichoiceList_GoOnRecordRestRetire[] =
+{
+ {gText_GoOn},
+ {gText_Record2},
+ {gText_Rest},
+ {gText_Retire},
+};
+
+static const struct MenuAction MultichoiceList_GoOnRestRetire[] =
+{
+ {gText_GoOn},
+ {gText_Rest},
+ {gText_Retire},
+};
+
+static const struct MenuAction MultichoiceList_GoOnRecordRetire[] =
+{
+ {gText_GoOn},
+ {gText_Record2},
+ {gText_Retire},
+};
+
+static const struct MenuAction MultichoiceList_GoOnRetire[] =
+{
+ {gText_GoOn},
+ {gText_Retire},
+};
+
+static const struct MenuAction MultichoiceList_TVLati[] =
+{
+ {gText_Red},
+ {gText_Blue},
+};
+
+static const struct MenuAction MultichoiceList_BattleTowerFeelings[] =
+{
+ {gText_IllBattleNow},
+ {gText_IWon},
+ {gText_ILost},
+ {gText_IWontTell},
+};
+
+static const struct MenuAction MultichoiceList_WheresRayquaza[] =
+{
+ {gText_CaveOfOrigin},
+ {gText_MtPyre},
+ {gText_SkyPillar},
+ {gText_DontRemember},
+};
+
+static const struct MenuAction MultichoiceList_SlateportTentRules[] =
+{
+ {gText_BasicRules},
+ {gText_SwapPartners},
+ {gText_SwapNumber},
+ {gText_SwapNotes},
+ {gText_BattlePokemon},
+ {gText_Exit},
+};
+
+static const struct MenuAction MultichoiceList_FallarborTentRules[] =
+{
+ {gText_BattleTrainers},
+ {gText_BattleRules},
+ {gText_JudgeMind},
+ {gText_JudgeSkill},
+ {gText_JudgeBody},
+ {gText_Exit},
+};
+
+static const struct MenuAction MultichoiceList_TagMatchType[] =
+{
+ {gText_NormalTagMatch},
+ {gText_VarietyTagMatch},
+ {gText_UniqueTagMatch},
+ {gText_ExpertTagMatch},
+ {gText_Exit},
+};
+
+static const struct MenuAction MultichoiceList_Exit[] =
+{
+ {gText_Exit},
+};
+
+struct MultichoiceListStruct
+{
+ const struct MenuAction *list;
+ u8 count;
+};
+
+static const struct MultichoiceListStruct sMultichoiceLists[] =
+{
+ [MULTI_BRINEY_ON_DEWFORD] = MULTICHOICE(MultichoiceList_BrineyOnDewford),
+ [MULTI_PC] = MULTICHOICE(MultichoiceList_Exit),
+ [MULTI_ENTERINFO] = MULTICHOICE(MultichoiceList_EnterInfo),
+ [MULTI_CONTEST_INFO] = MULTICHOICE(MultichoiceList_ContestInfo),
+ [MULTI_CONTEST_TYPE] = MULTICHOICE(MultichoiceList_ContestType),
+ [MULTI_DECOR_NOREGISTRY] = MULTICHOICE(MultichoiceList_DecorNoRegistry),
+ [MULTI_DECOR_REGISTRY] = MULTICHOICE(MultichoiceList_DecorRegistry),
+ [MULTI_REGISTER_MENU] = MULTICHOICE(MultichoiceList_RegisterMenu),
+ [MULTI_SSTIDAL_LILYCOVE] = MULTICHOICE(MultichoiceList_Exit),
+ [MULTI_UNUSED_9] = MULTICHOICE(MultichoiceList_Exit),
+ [MULTI_UNUSED_10] = MULTICHOICE(MultichoiceList_Exit),
+ [MULTI_FRONTIER_PASS_INFO] = MULTICHOICE(MultichoiceList_FrontierPassInfo),
+ [MULTI_BIKE] = MULTICHOICE(MultichoiceList_Bike),
+ [MULTI_STATUS_INFO] = MULTICHOICE(MultichoiceList_StatusInfo),
+ [MULTI_BRINEY_OFF_DEWFORD] = MULTICHOICE(MultichoiceList_BrineyOffDewford),
+ [MULTI_UNUSED_15] = MULTICHOICE(MultichoiceList_Exit),
+ [MULTI_VIEWED_PAINTINGS] = MULTICHOICE(MultichoiceList_ViewedPaintings),
+ [MULTI_YESNOINFO] = MULTICHOICE(MultichoiceList_YesNoInfo),
+ [MULTI_BATTLE_MODE] = MULTICHOICE(MultichoiceList_BattleMode),
+ [MULTI_UNUSED_19] = MULTICHOICE(MultichoiceList_Exit),
+ [MULTI_YESNOINFO_2] = MULTICHOICE(MultichoiceList_YesNoInfo2),
+ [MULTI_UNUSED_21] = MULTICHOICE(MultichoiceList_Exit),
+ [MULTI_UNUSED_22] = MULTICHOICE(MultichoiceList_Exit),
+ [MULTI_CHALLENGEINFO] = MULTICHOICE(MultichoiceList_ChallengeInfo),
+ [MULTI_LEVEL_MODE] = MULTICHOICE(MultichoiceList_LevelMode),
+ [MULTI_MECHADOLL1_Q1] = MULTICHOICE(MultichoiceList_Mechadoll1_Q1),
+ [MULTI_MECHADOLL1_Q2] = MULTICHOICE(MultichoiceList_Mechadoll1_Q2),
+ [MULTI_MECHADOLL1_Q3] = MULTICHOICE(MultichoiceList_Mechadoll1_Q3),
+ [MULTI_MECHADOLL2_Q1] = MULTICHOICE(MultichoiceList_Mechadoll2_Q1),
+ [MULTI_MECHADOLL2_Q2] = MULTICHOICE(MultichoiceList_Mechadoll2_Q2),
+ [MULTI_MECHADOLL2_Q3] = MULTICHOICE(MultichoiceList_Mechadoll2_Q3),
+ [MULTI_MECHADOLL3_Q1] = MULTICHOICE(MultichoiceList_Mechadoll3_Q1),
+ [MULTI_MECHADOLL3_Q2] = MULTICHOICE(MultichoiceList_Mechadoll3_Q2),
+ [MULTI_MECHADOLL3_Q3] = MULTICHOICE(MultichoiceList_Mechadoll3_Q3),
+ [MULTI_MECHADOLL4_Q1] = MULTICHOICE(MultichoiceList_Mechadoll4_Q1),
+ [MULTI_MECHADOLL4_Q2] = MULTICHOICE(MultichoiceList_Mechadoll4_Q2),
+ [MULTI_MECHADOLL4_Q3] = MULTICHOICE(MultichoiceList_Mechadoll4_Q3),
+ [MULTI_MECHADOLL5_Q1] = MULTICHOICE(MultichoiceList_Mechadoll5_Q1),
+ [MULTI_MECHADOLL5_Q2] = MULTICHOICE(MultichoiceList_Mechadoll5_Q2),
+ [MULTI_MECHADOLL5_Q3] = MULTICHOICE(MultichoiceList_Mechadoll5_Q3),
+ [MULTI_UNUSED_40] = MULTICHOICE(MultichoiceList_Exit),
+ [MULTI_UNUSED_41] = MULTICHOICE(MultichoiceList_Exit),
+ [MULTI_VENDING_MACHINE] = MULTICHOICE(MultichoiceList_VendingMachine),
+ [MULTI_MACH_BIKE_INFO] = MULTICHOICE(MultichoiceList_MachBikeInfo),
+ [MULTI_ACRO_BIKE_INFO] = MULTICHOICE(MultichoiceList_AcroBikeInfo),
+ [MULTI_SATISFACTION] = MULTICHOICE(MultichoiceList_Satisfaction),
+ [MULTI_STERN_DEEPSEA] = MULTICHOICE(MultichoiceList_SternDeepSea),
+ [MULTI_UNUSED_ASH_VENDOR] = MULTICHOICE(MultichoiceList_UnusedAshVendor),
+ [MULTI_GAME_CORNER_DOLLS] = MULTICHOICE(MultichoiceList_GameCornerDolls),
+ [MULTI_GAME_CORNER_COINS] = MULTICHOICE(MultichoiceList_GameCornerCoins),
+ [MULTI_HOWS_FISHING] = MULTICHOICE(MultichoiceList_HowsFishing),
+ [MULTI_UNUSED_51] = MULTICHOICE(MultichoiceList_Exit),
+ [MULTI_SSTIDAL_SLATEPORT_WITH_BF] = MULTICHOICE(MultichoiceList_SSTidalSlateportWithBF),
+ [MULTI_SSTIDAL_BATTLE_FRONTIER] = MULTICHOICE(MultichoiceList_SSTidalBattleFrontier),
+ [MULTI_RIGHTLEFT] = MULTICHOICE(MultichoiceList_RightLeft),
+ [MULTI_GAME_CORNER_TMS] = MULTICHOICE(MultichoiceList_GameCornerTMs),
+ [MULTI_SSTIDAL_SLATEPORT_NO_BF] = MULTICHOICE(MultichoiceList_SSTidalSlateportNoBF),
+ [MULTI_FLOORS] = MULTICHOICE(MultichoiceList_Floors),
+ [MULTI_SHARDS_R] = MULTICHOICE(MultichoiceList_ShardsR),
+ [MULTI_SHARDS_Y] = MULTICHOICE(MultichoiceList_ShardsY),
+ [MULTI_SHARDS_RY] = MULTICHOICE(MultichoiceList_ShardsRY),
+ [MULTI_SHARDS_B] = MULTICHOICE(MultichoiceList_ShardsB),
+ [MULTI_SHARDS_RB] = MULTICHOICE(MultichoiceList_ShardsRB),
+ [MULTI_SHARDS_YB] = MULTICHOICE(MultichoiceList_ShardsYB),
+ [MULTI_SHARDS_RYB] = MULTICHOICE(MultichoiceList_ShardsRYB),
+ [MULTI_SHARDS_G] = MULTICHOICE(MultichoiceList_ShardsG),
+ [MULTI_SHARDS_RG] = MULTICHOICE(MultichoiceList_ShardsRG),
+ [MULTI_SHARDS_YG] = MULTICHOICE(MultichoiceList_ShardsYG),
+ [MULTI_SHARDS_RYG] = MULTICHOICE(MultichoiceList_ShardsRYG),
+ [MULTI_SHARDS_BG] = MULTICHOICE(MultichoiceList_ShardsBG),
+ [MULTI_SHARDS_RBG] = MULTICHOICE(MultichoiceList_ShardsRBG),
+ [MULTI_SHARDS_YBG] = MULTICHOICE(MultichoiceList_ShardsYBG),
+ [MULTI_SHARDS_RYBG] = MULTICHOICE(MultichoiceList_ShardsRYBG),
+ [MULTI_TOURNEY_WITH_RECORD] = MULTICHOICE(MultichoiceList_TourneyWithRecord),
+ [MULTI_CABLE_CLUB_NO_RECORD_MIX] = MULTICHOICE(MultichoiceList_LinkServicesNoRecordBerry),
+ [MULTI_WIRELESS_NO_RECORD_BERRY] = MULTICHOICE(MultichoiceList_LinkServicesNoRecordBerry),
+ [MULTI_CABLE_CLUB_WITH_RECORD_MIX] = MULTICHOICE(MultichoiceList_LinkServicesNoBerry),
+ [MULTI_WIRELESS_NO_BERRY] = MULTICHOICE(MultichoiceList_LinkServicesNoBerry),
+ [MULTI_WIRELESS_NO_RECORD] = MULTICHOICE(MultichoiceList_LinkServicesNoRecord),
+ [MULTI_WIRELESS_ALL_SERVICES] = MULTICHOICE(MultichoiceList_LinkServicesAll),
+ [MULTI_WIRELESS_MINIGAME] = MULTICHOICE(MultichoiceList_WirelessMinigame),
+ [MULTI_LINK_LEADER] = MULTICHOICE(MultichoiceList_LinkLeader),
+ [MULTI_CONTEST_RANK] = MULTICHOICE(MultichoiceList_ContestRank),
+ [MULTI_FRONTIER_ITEM_CHOOSE] = MULTICHOICE(MultichoiceList_FrontierItemChoose),
+ [MULTI_LINK_CONTEST_INFO] = MULTICHOICE(MultichoiceList_LinkContestInfo),
+ [MULTI_LINK_CONTEST_MODE] = MULTICHOICE(MultichoiceList_LinkContestMode),
+ [MULTI_FORCED_START_MENU] = MULTICHOICE(MultichoiceList_ForcedStartMenu),
+ [MULTI_FRONTIER_GAMBLER_BET] = MULTICHOICE(MultichoiceList_FrontierGamblerBet),
+ [MULTI_TENT] = MULTICHOICE(MultichoiceList_Tent),
+ [MULTI_UNUSED_SSTIDAL_1] = MULTICHOICE(MultichoiceList_UnusedSSTidal1),
+ [MULTI_UNUSED_SSTIDAL_2] = MULTICHOICE(MultichoiceList_UnusedSSTidal2),
+ [MULTI_UNUSED_SSTIDAL_3] = MULTICHOICE(MultichoiceList_UnusedSSTidal3),
+ [MULTI_UNUSED_SSTIDAL_4] = MULTICHOICE(MultichoiceList_UnusedSSTidal4),
+ [MULTI_FOSSIL] = MULTICHOICE(MultichoiceList_Fossil),
+ [MULTI_YESNO] = MULTICHOICE(MultichoiceList_YesNo),
+ [MULTI_FRONTIER_RULES] = MULTICHOICE(MultichoiceList_FrontierRules),
+ [MULTI_BATTLE_ARENA_RULES] = MULTICHOICE(MultichoiceList_BattleArenaRules),
+ [MULTI_BATTLE_TOWER_RULES] = MULTICHOICE(MultichoiceList_BattleTowerRules),
+ [MULTI_BATTLE_DOME_RULES] = MULTICHOICE(MultichoiceList_BattleDomeRules),
+ [MULTI_BATTLE_FACTORY_RULES] = MULTICHOICE(MultichoiceList_BattleFactoryRules),
+ [MULTI_BATTLE_PALACE_RULES] = MULTICHOICE(MultichoiceList_BattlePalaceRules),
+ [MULTI_BATTLE_PYRAMID_RULES] = MULTICHOICE(MultichoiceList_BattlePyramidRules),
+ [MULTI_BATTLE_PIKE_RULES] = MULTICHOICE(MultichoiceList_BattlePikeRules),
+ [MULTI_GO_ON_RECORD_REST_RETIRE] = MULTICHOICE(MultichoiceList_GoOnRecordRestRetire),
+ [MULTI_GO_ON_REST_RETIRE] = MULTICHOICE(MultichoiceList_GoOnRestRetire),
+ [MULTI_GO_ON_RECORD_RETIRE] = MULTICHOICE(MultichoiceList_GoOnRecordRetire),
+ [MULTI_GO_ON_RETIRE] = MULTICHOICE(MultichoiceList_GoOnRetire),
+ [MULTI_TOURNEY_NO_RECORD] = MULTICHOICE(MultichoiceList_TourneyNoRecord),
+ [MULTI_TV_LATI] = MULTICHOICE(MultichoiceList_TVLati),
+ [MULTI_BATTLE_TOWER_FEELINGS] = MULTICHOICE(MultichoiceList_BattleTowerFeelings),
+ [MULTI_WHERES_RAYQUAZA] = MULTICHOICE(MultichoiceList_WheresRayquaza),
+ [MULTI_SLATEPORT_TENT_RULES] = MULTICHOICE(MultichoiceList_SlateportTentRules),
+ [MULTI_FALLARBOR_TENT_RULES] = MULTICHOICE(MultichoiceList_FallarborTentRules),
+ [MULTI_TAG_MATCH_TYPE] = MULTICHOICE(MultichoiceList_TagMatchType),
+};
+
+const u8 *const gStdStrings[] =
+{
+ [STDSTRING_COOL] = gText_Cool,
+ [STDSTRING_BEAUTY] = gText_Beauty,
+ [STDSTRING_CUTE] = gText_Cute,
+ [STDSTRING_SMART] = gText_Smart,
+ [STDSTRING_TOUGH] = gText_Tough,
+ [STDSTRING_NORMAL] = gText_Normal,
+ [STDSTRING_SUPER] = gText_Super,
+ [STDSTRING_HYPER] = gText_Hyper,
+ [STDSTRING_MASTER] = gText_Master,
+ [STDSTRING_COOL2] = gText_Cool2,
+ [STDSTRING_BEAUTY2] = gText_Beauty2,
+ [STDSTRING_CUTE2] = gText_Cute2,
+ [STDSTRING_SMART2] = gText_Smart2,
+ [STDSTRING_TOUGH2] = gText_Tough2,
+ [STDSTRING_ITEMS] = gText_Items,
+ [STDSTRING_KEYITEMS] = gText_Key_Items,
+ [STDSTRING_POKEBALLS] = gText_Poke_Balls,
+ [STDSTRING_TMHMS] = gText_TMs_Hms,
+ [STDSTRING_BERRIES] = gText_Berries2,
+ [STDSTRING_SINGLE] = gText_Single2,
+ [STDSTRING_DOUBLE] = gText_Double2,
+ [STDSTRING_MULTI] = gText_Multi,
+ [STDSTRING_MULTI_LINK] = gText_MultiLink,
+ [STDSTRING_BATTLE_TOWER] = gText_BattleTower2,
+ [STDSTRING_BATTLE_DOME] = gText_BattleDome,
+ [STDSTRING_BATTLE_FACTORY] = gText_BattleFactory,
+ [STDSTRING_BATTLE_PALACE] = gText_BattlePalace,
+ [STDSTRING_BATTLE_ARENA] = gText_BattleArena,
+ [STDSTRING_BATTLE_PIKE] = gText_BattlePike,
+ [STDSTRING_BATTLE_PYRAMID] = gText_BattlePyramid,
+};
+
+static const u8 sLinkServicesMultichoiceIds[] =
+{
+ MULTI_CABLE_CLUB_NO_RECORD_MIX,
+ MULTI_WIRELESS_NO_RECORD_BERRY,
+ MULTI_CABLE_CLUB_WITH_RECORD_MIX,
+ MULTI_WIRELESS_NO_BERRY,
+ MULTI_WIRELESS_NO_RECORD,
+ MULTI_WIRELESS_ALL_SERVICES
+};
+
+static const u8 *const sPCNameStrings[] =
+{
+ gText_SomeonesPC,
+ gText_LanettesPC,
+ gText_PlayersPC,
+ gText_LogOff,
+};
+
+static const u8 *const sLilycoveSSTidalDestinations[SSTIDAL_SELECTION_COUNT] =
+{
+ [SSTIDAL_SELECTION_SLATEPORT] = gText_SlateportCity,
+ [SSTIDAL_SELECTION_BATTLE_FRONTIER] = gText_BattleFrontier,
+ [SSTIDAL_SELECTION_SOUTHERN_ISLAND] = gText_SouthernIsland,
+ [SSTIDAL_SELECTION_NAVEL_ROCK] = gText_NavelRock,
+ [SSTIDAL_SELECTION_BIRTH_ISLAND] = gText_BirthIsland,
+ [SSTIDAL_SELECTION_FARAWAY_ISLAND] = gText_FarawayIsland,
+ [SSTIDAL_SELECTION_EXIT] = gText_Exit,
+};
+
+static const u8 *const sCableClubOptions_WithRecordMix[] =
+{
+ CableClub_Text_TradeUsingLinkCable,
+ CableClub_Text_BattleUsingLinkCable,
+ CableClub_Text_RecordCornerUsingLinkCable,
+ CableClub_Text_CancelSelectedItem,
+};
+static const u8 *const sWirelessOptionsNoBerryCrush[] =
+{
+ CableClub_Text_YouMayTradeHere,
+ CableClub_Text_YouMayBattleHere,
+ CableClub_Text_CanMixRecords,
+ CableClub_Text_CancelSelectedItem,
+};
+static const u8 *const sWirelessOptions_NoRecordMix[] =
+{
+ CableClub_Text_YouMayTradeHere,
+ CableClub_Text_YouMayBattleHere,
+ CableClub_Text_CanMakeBerryPowder,
+ CableClub_Text_CancelSelectedItem,
+};
+static const u8 *const sWirelessOptions_AllServices[] =
+{
+ CableClub_Text_YouMayTradeHere,
+ CableClub_Text_YouMayBattleHere,
+ CableClub_Text_CanMixRecords,
+ CableClub_Text_CanMakeBerryPowder,
+ CableClub_Text_CancelSelectedItem,
+};
+static const u8 *const sCableClubOptions_NoRecordMix[] =
+{
+ CableClub_Text_TradeUsingLinkCable,
+ CableClub_Text_BattleUsingLinkCable,
+ CableClub_Text_CancelSelectedItem,
+};
+static const u8 *const sWirelessOptions_NoRecordMixBerryCrush[] =
+{
+ CableClub_Text_YouMayTradeHere,
+ CableClub_Text_YouMayBattleHere,
+ CableClub_Text_CancelSelectedItem,
+};
diff --git a/src/data/wild_encounters.json b/src/data/wild_encounters.json
index 6dd24bfed..ea555bd32 100755
--- a/src/data/wild_encounters.json
+++ b/src/data/wild_encounters.json
@@ -3,6 +3,32 @@
{
"label": "gWildMonHeaders",
"for_maps": true,
+ "fields": [
+ {
+ "type": "land_mons",
+ "encounter_rates": [
+ 20, 20, 10, 10, 10, 10, 5, 5, 4, 4, 1, 1
+ ]
+ },
+ {
+ "type": "water_mons",
+ "encounter_rates": [
+ 60, 30, 5, 4, 1
+ ]
+ },
+ {
+ "type": "rock_smash_mons",
+ "encounter_rates": [
+ 60, 30, 5, 4, 1
+ ]
+ },
+ {
+ "type": "fishing_mons",
+ "encounter_rates": [
+ 70, 30, 60, 20, 20, 40, 40, 15, 4, 1
+ ]
+ }
+ ],
"encounters": [
{
"map": "MAP_ROUTE101",
diff --git a/src/data/wild_encounters.json.txt b/src/data/wild_encounters.json.txt
index 8f88cc587..85755ddec 100755
--- a/src/data/wild_encounters.json.txt
+++ b/src/data/wild_encounters.json.txt
@@ -1,5 +1,16 @@
{{ doNotModifyHeader }}
+
## for wild_encounter_group in wild_encounter_groups
+{% if wild_encounter_group.for_maps %}
+## for wild_encounter_field in wild_encounter_group.fields
+## for encounter_rate in wild_encounter_field.encounter_rates
+{% if trackVar(encounter_rate, 100) %}
+#define ENCOUNTER_CHANCE_{{ upper(wild_encounter_field.type) }}_SLOT_{{ loop.index }} {{ encounter_rate }} {% else %}#define ENCOUNTER_CHANCE_{{ upper(wild_encounter_field.type) }}_SLOT_{{ loop.index }} ENCOUNTER_CHANCE_{{ upper(wild_encounter_field.type) }}_SLOT_{{ subtract(loop.index, 1) }} + {{ encounter_rate }}{% endif %} {{ setVarInt(wild_encounter_field.type, loop.index) }}
+## endfor
+#define ENCOUNTER_CHANCE_{{ upper(wild_encounter_field.type) }}_TOTAL (ENCOUNTER_CHANCE_{{ upper(wild_encounter_field.type) }}_SLOT_{{ getVar(wild_encounter_field.type) }})
+## endfor
+{% endif %}
+
## for encounter in wild_encounter_group.encounters
{% if existsIn(encounter, "land_mons") %}
const struct WildPokemon {{ encounter.base_label }}_LandMons[] =
diff --git a/src/daycare.c b/src/daycare.c
index 885ac31a1..e5445ee21 100644
--- a/src/daycare.c
+++ b/src/daycare.c
@@ -3,14 +3,11 @@
#include "battle.h"
#include "daycare.h"
#include "string_util.h"
-#include "constants/species.h"
-#include "constants/items.h"
#include "mail.h"
#include "pokemon_storage_system.h"
#include "event_data.h"
#include "random.h"
#include "main.h"
-#include "constants/moves.h"
#include "egg_hatch.h"
#include "text.h"
#include "menu.h"
@@ -22,9 +19,10 @@
#include "party_menu.h"
#include "list_menu.h"
#include "overworld.h"
-
-#define EGG_MOVES_ARRAY_COUNT 10
-#define EGG_LVL_UP_MOVES_ARRAY_COUNT 50
+#include "constants/items.h"
+#include "constants/moves.h"
+#include "constants/region_map_sections.h"
+#include "constants/species.h"
// this file's functions
static void ClearDaycareMonMail(struct DayCareMail *mail);
@@ -34,10 +32,10 @@ static void DaycarePrintMonInfo(u8 windowId, s32 daycareSlotId, u8 y);
// RAM buffers used to assist with BuildEggMoveset()
EWRAM_DATA static u16 sHatchedEggLevelUpMoves[EGG_LVL_UP_MOVES_ARRAY_COUNT] = {0};
-EWRAM_DATA static u16 sHatchedEggFatherMoves[4] = {0};
-EWRAM_DATA static u16 sHatchedEggFinalMoves[4] = {0};
+EWRAM_DATA static u16 sHatchedEggFatherMoves[MAX_MON_MOVES] = {0};
+EWRAM_DATA static u16 sHatchedEggFinalMoves[MAX_MON_MOVES] = {0};
EWRAM_DATA static u16 sHatchedEggEggMoves[EGG_MOVES_ARRAY_COUNT] = {0};
-EWRAM_DATA static u16 sHatchedEggMotherMoves[4] = {0};
+EWRAM_DATA static u16 sHatchedEggMotherMoves[MAX_MON_MOVES] = {0};
#include "data/pokemon/egg_moves.h"
@@ -52,11 +50,13 @@ static const struct WindowTemplate sDaycareLevelMenuWindowTemplate =
.baseBlock = 8
};
+// Indices here are assigned by Task_HandleDaycareLevelMenuInput to VAR_RESULT,
+// which is copied to VAR_0x8004 and used as an index for GetDaycareCost
static const struct ListMenuItem sLevelMenuItems[] =
{
{gExpandedPlaceholder_Empty, 0},
{gExpandedPlaceholder_Empty, 1},
- {gText_Exit, 5}
+ {gText_Exit, DAYCARE_LEVEL_MENU_EXIT}
};
static const struct ListMenuTemplate sDaycareListMenuLevelTemplate =
@@ -91,7 +91,7 @@ static const u8 *const sCompatibilityMessages[] =
static const u8 sJapaneseEggNickname[] = _("タマゴ"); // "tamago" ("egg" in Japanese)
-u8 *GetMonNick(struct Pokemon *mon, u8 *dest)
+u8 *GetMonNickname2(struct Pokemon *mon, u8 *dest)
{
u8 nickname[POKEMON_NAME_LENGTH * 2];
@@ -99,7 +99,7 @@ u8 *GetMonNick(struct Pokemon *mon, u8 *dest)
return StringCopy10(dest, nickname);
}
-u8 *GetBoxMonNick(struct BoxPokemon *mon, u8 *dest)
+u8 *GetBoxMonNickname(struct BoxPokemon *mon, u8 *dest)
{
u8 nickname[POKEMON_NAME_LENGTH * 2];
@@ -169,7 +169,7 @@ static void StorePokemonInDaycare(struct Pokemon *mon, struct DaycareMon *daycar
u8 mailId;
StringCopy(daycareMon->mail.OT_name, gSaveBlock2Ptr->playerName);
- GetMonNick(mon, daycareMon->mail.monName);
+ GetMonNickname2(mon, daycareMon->mail.monName);
StripExtCtrlCodes(daycareMon->mail.monName);
daycareMon->mail.gameLanguage = LANGUAGE_ENGLISH;
daycareMon->mail.monLanguage = GetMonData(mon, MON_DATA_LANGUAGE);
@@ -202,8 +202,8 @@ void StoreSelectedPokemonInDaycare(void)
static void ShiftDaycareSlots(struct DayCare *daycare)
{
// This condition is only satisfied when the player takes out the first pokemon from the daycare.
- if (GetBoxMonData(&daycare->mons[1].mon, MON_DATA_SPECIES) != 0
- && GetBoxMonData(&daycare->mons[0].mon, MON_DATA_SPECIES) == 0)
+ if (GetBoxMonData(&daycare->mons[1].mon, MON_DATA_SPECIES) != SPECIES_NONE
+ && GetBoxMonData(&daycare->mons[0].mon, MON_DATA_SPECIES) == SPECIES_NONE)
{
daycare->mons[0].mon = daycare->mons[1].mon;
ZeroBoxMonData(&daycare->mons[1].mon);
@@ -254,7 +254,7 @@ static u16 TakeSelectedPokemonFromDaycare(struct DaycareMon *daycareMon)
u32 experience;
struct Pokemon pokemon;
- GetBoxMonNick(&daycareMon->mon, gStringVar1);
+ GetBoxMonNickname(&daycareMon->mon, gStringVar1);
species = GetBoxMonData(&daycareMon->mon, MON_DATA_SPECIES);
BoxMonToMon(&daycareMon->mon, &pokemon);
@@ -314,7 +314,7 @@ static u8 GetNumLevelsGainedForDaycareMon(struct DaycareMon *daycareMon)
{
u8 numLevelsGained = GetNumLevelsGainedFromSteps(daycareMon);
ConvertIntToDecimalStringN(gStringVar2, numLevelsGained, STR_CONV_MODE_LEFT_ALIGN, 2);
- GetBoxMonNick(&daycareMon->mon, gStringVar1);
+ GetBoxMonNickname(&daycareMon->mon, gStringVar1);
return numLevelsGained;
}
@@ -323,7 +323,7 @@ static u32 GetDaycareCostForSelectedMon(struct DaycareMon *daycareMon)
u32 cost;
u8 numLevelsGained = GetNumLevelsGainedFromSteps(daycareMon);
- GetBoxMonNick(&daycareMon->mon, gStringVar1);
+ GetBoxMonNickname(&daycareMon->mon, gStringVar1);
cost = 100 + 100 * numLevelsGained;
ConvertIntToDecimalStringN(gStringVar2, cost, STR_CONV_MODE_LEFT_ALIGN, 5);
return cost;
@@ -419,18 +419,18 @@ static u16 GetEggSpecies(u16 species)
return species;
}
-static s32 GetSlotToInheritNature(struct DayCare *daycare)
+static s32 GetParentToInheritNature(struct DayCare *daycare)
{
u32 species[DAYCARE_MON_COUNT];
s32 i;
s32 dittoCount;
- s32 slot = -1;
+ s32 parent = -1;
// search for female gender
for (i = 0; i < DAYCARE_MON_COUNT; i++)
{
if (GetBoxMonGender(&daycare->mons[i].mon) == MON_FEMALE)
- slot = i;
+ parent = i;
}
// search for ditto
@@ -438,50 +438,52 @@ static s32 GetSlotToInheritNature(struct DayCare *daycare)
{
species[i] = GetBoxMonData(&daycare->mons[i].mon, MON_DATA_SPECIES);
if (species[i] == SPECIES_DITTO)
- dittoCount++, slot = i;
+ dittoCount++, parent = i;
}
// coin flip on ...two Dittos
- if (dittoCount == 2)
+ if (dittoCount == DAYCARE_MON_COUNT)
{
if (Random() >= USHRT_MAX / 2)
- slot = 0;
+ parent = 0;
else
- slot = 1;
+ parent = 1;
}
- // nature inheritance only if holds everstone
- if (GetBoxMonData(&daycare->mons[slot].mon, MON_DATA_HELD_ITEM) != ITEM_EVERSTONE
+ // Don't inherit nature if not holding Everstone
+ if (GetBoxMonData(&daycare->mons[parent].mon, MON_DATA_HELD_ITEM) != ITEM_EVERSTONE
|| Random() >= USHRT_MAX / 2)
{
return -1;
}
- return slot;
+ return parent;
}
static void _TriggerPendingDaycareEgg(struct DayCare *daycare)
{
- s32 natureSlot;
+ s32 parent;
s32 natureTries = 0;
SeedRng2(gMain.vblankCounter2);
- natureSlot = GetSlotToInheritNature(daycare);
+ parent = GetParentToInheritNature(daycare);
- if (natureSlot < 0)
+ // don't inherit nature
+ if (parent < 0)
{
- daycare->offspringPersonality = (Random2() << 0x10) | ((Random() % 0xfffe) + 1);
+ daycare->offspringPersonality = (Random2() << 16) | ((Random() % 0xfffe) + 1);
}
+ // inherit nature
else
{
- u8 wantedNature = GetNatureFromPersonality(GetBoxMonData(&daycare->mons[natureSlot].mon, MON_DATA_PERSONALITY, NULL));
+ u8 wantedNature = GetNatureFromPersonality(GetBoxMonData(&daycare->mons[parent].mon, MON_DATA_PERSONALITY, NULL));
u32 personality;
do
{
- personality = (Random2() << 0x10) | (Random());
+ personality = (Random2() << 16) | (Random());
if (wantedNature == GetNatureFromPersonality(personality) && personality != 0)
- break; // we found a personality with the same nature
+ break; // found a personality with the same nature
natureTries++;
} while (natureTries <= 2400);
@@ -492,9 +494,10 @@ static void _TriggerPendingDaycareEgg(struct DayCare *daycare)
FlagSet(FLAG_PENDING_DAYCARE_EGG);
}
+// Functionally unused
static void _TriggerPendingDaycareMaleEgg(struct DayCare *daycare)
{
- daycare->offspringPersonality = (Random()) | (0x8000);
+ daycare->offspringPersonality = (Random()) | (EGG_GENDER_MALE);
FlagSet(FLAG_PENDING_DAYCARE_EGG);
}
@@ -503,6 +506,7 @@ void TriggerPendingDaycareEgg(void)
_TriggerPendingDaycareEgg(&gSaveBlock1Ptr->daycare);
}
+// Unused
static void TriggerPendingDaycareMaleEgg(void)
{
_TriggerPendingDaycareMaleEgg(&gSaveBlock1Ptr->daycare);
@@ -532,9 +536,9 @@ static void RemoveIVIndexFromList(u8 *ivs, u8 selectedIv)
static void InheritIVs(struct Pokemon *egg, struct DayCare *daycare)
{
u8 i;
- u8 selectedIvs[3];
+ u8 selectedIvs[INHERITED_IV_COUNT];
u8 availableIVs[NUM_STATS];
- u8 whichParent[ARRAY_COUNT(selectedIvs)];
+ u8 whichParents[INHERITED_IV_COUNT];
u8 iv;
// Initialize a list of IV indices.
@@ -544,48 +548,46 @@ static void InheritIVs(struct Pokemon *egg, struct DayCare *daycare)
}
// Select the 3 IVs that will be inherited.
- for (i = 0; i < ARRAY_COUNT(selectedIvs); i++)
+ for (i = 0; i < INHERITED_IV_COUNT; i++)
{
- // Randomly pick an IV from the available list.
+ // Randomly pick an IV from the available list and stop from being chosen again.
selectedIvs[i] = availableIVs[Random() % (NUM_STATS - i)];
-
- // Remove the selected IV index from the available IV indices.
RemoveIVIndexFromList(availableIVs, i);
}
// Determine which parent each of the selected IVs should inherit from.
- for (i = 0; i < ARRAY_COUNT(selectedIvs); i++)
+ for (i = 0; i < INHERITED_IV_COUNT; i++)
{
- whichParent[i] = Random() % 2;
+ whichParents[i] = Random() % DAYCARE_MON_COUNT;
}
// Set each of inherited IVs on the egg mon.
- for (i = 0; i < ARRAY_COUNT(selectedIvs); i++)
+ for (i = 0; i < INHERITED_IV_COUNT; i++)
{
switch (selectedIvs[i])
{
case 0:
- iv = GetBoxMonData(&daycare->mons[whichParent[i]].mon, MON_DATA_HP_IV);
+ iv = GetBoxMonData(&daycare->mons[whichParents[i]].mon, MON_DATA_HP_IV);
SetMonData(egg, MON_DATA_HP_IV, &iv);
break;
case 1:
- iv = GetBoxMonData(&daycare->mons[whichParent[i]].mon, MON_DATA_ATK_IV);
+ iv = GetBoxMonData(&daycare->mons[whichParents[i]].mon, MON_DATA_ATK_IV);
SetMonData(egg, MON_DATA_ATK_IV, &iv);
break;
case 2:
- iv = GetBoxMonData(&daycare->mons[whichParent[i]].mon, MON_DATA_DEF_IV);
+ iv = GetBoxMonData(&daycare->mons[whichParents[i]].mon, MON_DATA_DEF_IV);
SetMonData(egg, MON_DATA_DEF_IV, &iv);
break;
case 3:
- iv = GetBoxMonData(&daycare->mons[whichParent[i]].mon, MON_DATA_SPEED_IV);
+ iv = GetBoxMonData(&daycare->mons[whichParents[i]].mon, MON_DATA_SPEED_IV);
SetMonData(egg, MON_DATA_SPEED_IV, &iv);
break;
case 4:
- iv = GetBoxMonData(&daycare->mons[whichParent[i]].mon, MON_DATA_SPATK_IV);
+ iv = GetBoxMonData(&daycare->mons[whichParents[i]].mon, MON_DATA_SPATK_IV);
SetMonData(egg, MON_DATA_SPATK_IV, &iv);
break;
case 5:
- iv = GetBoxMonData(&daycare->mons[whichParent[i]].mon, MON_DATA_SPDEF_IV);
+ iv = GetBoxMonData(&daycare->mons[whichParents[i]].mon, MON_DATA_SPDEF_IV);
SetMonData(egg, MON_DATA_SPDEF_IV, &iv);
break;
}
@@ -638,14 +640,14 @@ static void BuildEggMoveset(struct Pokemon *egg, struct BoxPokemon *father, stru
numSharedParentMoves = 0;
for (i = 0; i < MAX_MON_MOVES; i++)
{
- sHatchedEggMotherMoves[i] = 0;
- sHatchedEggFatherMoves[i] = 0;
- sHatchedEggFinalMoves[i] = 0;
+ sHatchedEggMotherMoves[i] = MOVE_NONE;
+ sHatchedEggFatherMoves[i] = MOVE_NONE;
+ sHatchedEggFinalMoves[i] = MOVE_NONE;
}
for (i = 0; i < EGG_MOVES_ARRAY_COUNT; i++)
- sHatchedEggEggMoves[i] = 0;
+ sHatchedEggEggMoves[i] = MOVE_NONE;
for (i = 0; i < EGG_LVL_UP_MOVES_ARRAY_COUNT; i++)
- sHatchedEggLevelUpMoves[i] = 0;
+ sHatchedEggLevelUpMoves[i] = MOVE_NONE;
numLevelUpMoves = GetLevelUpMovesBySpecies(GetMonData(egg, MON_DATA_SPECIES), sHatchedEggLevelUpMoves);
for (i = 0; i < MAX_MON_MOVES; i++)
@@ -761,13 +763,10 @@ static void GiveVoltTackleIfLightBall(struct Pokemon *mon, struct DayCare *dayca
static u16 DetermineEggSpeciesAndParentSlots(struct DayCare *daycare, u8 *parentSlots)
{
u16 i;
- u16 species[2];
+ u16 species[DAYCARE_MON_COUNT];
u16 eggSpecies;
- // Determine which of the daycare mons is the mother and father of the egg.
- // The 0th index of the parentSlots array is considered the mother slot, and the
- // 1st index is the father slot.
- for (i = 0; i < 2; i++)
+ for (i = 0; i < DAYCARE_MON_COUNT; i++)
{
species[i] = GetBoxMonData(&daycare->mons[i].mon, MON_DATA_SPECIES);
if (species[i] == SPECIES_DITTO)
@@ -783,11 +782,11 @@ static u16 DetermineEggSpeciesAndParentSlots(struct DayCare *daycare, u8 *parent
}
eggSpecies = GetEggSpecies(species[parentSlots[0]]);
- if (eggSpecies == SPECIES_NIDORAN_F && daycare->offspringPersonality & 0x8000)
+ if (eggSpecies == SPECIES_NIDORAN_F && daycare->offspringPersonality & EGG_GENDER_MALE)
{
eggSpecies = SPECIES_NIDORAN_M;
}
- if (eggSpecies == SPECIES_ILLUMISE && daycare->offspringPersonality & 0x8000)
+ if (eggSpecies == SPECIES_ILLUMISE && daycare->offspringPersonality & EGG_GENDER_MALE)
{
eggSpecies = SPECIES_VOLBEAT;
}
@@ -795,19 +794,19 @@ static u16 DetermineEggSpeciesAndParentSlots(struct DayCare *daycare, u8 *parent
// Make Ditto the "mother" slot if the other daycare mon is male.
if (species[parentSlots[1]] == SPECIES_DITTO && GetBoxMonGender(&daycare->mons[parentSlots[0]].mon) != MON_FEMALE)
{
- u8 temp = parentSlots[1];
+ u8 ditto = parentSlots[1];
parentSlots[1] = parentSlots[0];
- parentSlots[0] = temp;
+ parentSlots[0] = ditto;
}
return eggSpecies;
}
-static void _GiveEggFromDaycare(struct DayCare *daycare) // give_egg
+static void _GiveEggFromDaycare(struct DayCare *daycare)
{
struct Pokemon egg;
u16 species;
- u8 parentSlots[2]; // 0th index is "mother" daycare slot, 1st is "father"
+ u8 parentSlots[DAYCARE_MON_COUNT];
bool8 isEgg;
species = DetermineEggSpeciesAndParentSlots(daycare, parentSlots);
@@ -835,7 +834,7 @@ void CreateEgg(struct Pokemon *mon, u16 species, bool8 setHotSpringsLocation)
u8 metLocation;
u8 isEgg;
- CreateMon(mon, species, EGG_HATCH_LEVEL, 0x20, FALSE, 0, FALSE, 0);
+ CreateMon(mon, species, EGG_HATCH_LEVEL, 32, FALSE, 0, OT_ID_PLAYER_ID, 0);
metLevel = 0;
ball = ITEM_POKE_BALL;
language = LANGUAGE_JAPANESE;
@@ -846,7 +845,7 @@ void CreateEgg(struct Pokemon *mon, u16 species, bool8 setHotSpringsLocation)
SetMonData(mon, MON_DATA_LANGUAGE, &language);
if (setHotSpringsLocation)
{
- metLocation = 253; // hot springs; see PokemonSummaryScreen_PrintEggTrainerMemo
+ metLocation = METLOC_SPECIAL_EGG;
SetMonData(mon, MON_DATA_MET_LOCATION, &metLocation);
}
@@ -862,7 +861,7 @@ static void SetInitialEggData(struct Pokemon *mon, u16 species, struct DayCare *
u8 language;
personality = daycare->offspringPersonality;
- CreateMon(mon, species, EGG_HATCH_LEVEL, 0x20, TRUE, personality, FALSE, 0);
+ CreateMon(mon, species, EGG_HATCH_LEVEL, 32, TRUE, personality, OT_ID_PLAYER_ID, 0);
metLevel = 0;
ball = ITEM_POKE_BALL;
language = LANGUAGE_JAPANESE;
@@ -878,7 +877,7 @@ void GiveEggFromDaycare(void)
_GiveEggFromDaycare(&gSaveBlock1Ptr->daycare);
}
-static bool8 _DoEggActions_CheckHatch(struct DayCare *daycare)
+static bool8 TryProduceOrHatchEgg(struct DayCare *daycare)
{
u32 i, validEggs = 0;
@@ -888,15 +887,16 @@ static bool8 _DoEggActions_CheckHatch(struct DayCare *daycare)
daycare->mons[i].steps++, validEggs++;
}
- // try to trigger poke sex
- if (daycare->offspringPersonality == 0 && validEggs == 2 && (daycare->mons[1].steps & 0xFF) == 0xFF)
+ // Check if an egg should be produced
+ if (daycare->offspringPersonality == 0 && validEggs == DAYCARE_MON_COUNT && (daycare->mons[1].steps & 0xFF) == 0xFF)
{
- u8 loveScore = GetDaycareCompatibilityScore(daycare);
- if (loveScore > (Random() * 100u) / USHRT_MAX)
+ u8 compatability = GetDaycareCompatibilityScore(daycare);
+ if (compatability > (Random() * 100u) / USHRT_MAX)
TriggerPendingDaycareEgg();
}
- if (++daycare->stepCounter == 255) // hatch an egg
+ // Hatch Egg
+ if (++daycare->stepCounter == 255)
{
u32 steps;
u8 toSub = GetEggStepsToSubtract();
@@ -909,7 +909,7 @@ static bool8 _DoEggActions_CheckHatch(struct DayCare *daycare)
continue;
steps = GetMonData(&gPlayerParty[i], MON_DATA_FRIENDSHIP);
- if (steps != 0) // subtract needed steps
+ if (steps != 0)
{
if (steps >= toSub)
steps -= toSub;
@@ -918,7 +918,7 @@ static bool8 _DoEggActions_CheckHatch(struct DayCare *daycare)
SetMonData(&gPlayerParty[i], MON_DATA_FRIENDSHIP, &steps);
}
- else // hatch the egg
+ else
{
gSpecialVar_0x8004 = i;
return TRUE;
@@ -926,12 +926,12 @@ static bool8 _DoEggActions_CheckHatch(struct DayCare *daycare)
}
}
- return FALSE; // no hatching
+ return FALSE;
}
bool8 ShouldEggHatch(void)
{
- return _DoEggActions_CheckHatch(&gSaveBlock1Ptr->daycare);
+ return TryProduceOrHatchEgg(&gSaveBlock1Ptr->daycare);
}
static bool8 IsEggPending(struct DayCare *daycare)
@@ -947,20 +947,20 @@ static void _GetDaycareMonNicknames(struct DayCare *daycare)
u8 text[12];
if (GetBoxMonData(&daycare->mons[0].mon, MON_DATA_SPECIES) != 0)
{
- GetBoxMonNick(&daycare->mons[0].mon, gStringVar1);
+ GetBoxMonNickname(&daycare->mons[0].mon, gStringVar1);
GetBoxMonData(&daycare->mons[0].mon, MON_DATA_OT_NAME, text);
StringCopy(gStringVar3, text);
}
if (GetBoxMonData(&daycare->mons[1].mon, MON_DATA_SPECIES) != 0)
{
- GetBoxMonNick(&daycare->mons[1].mon, gStringVar2);
+ GetBoxMonNickname(&daycare->mons[1].mon, gStringVar2);
}
}
-u16 GetSelectedMonNickAndSpecies(void)
+u16 GetSelectedMonNicknameAndSpecies(void)
{
- GetBoxMonNick(&gPlayerParty[GetCursorSelectionMonId()].box, gStringVar1);
+ GetBoxMonNickname(&gPlayerParty[GetCursorSelectionMonId()].box, gStringVar1);
return GetBoxMonData(&gPlayerParty[GetCursorSelectionMonId()].box, MON_DATA_SPECIES);
}
@@ -971,26 +971,19 @@ void GetDaycareMonNicknames(void)
u8 GetDaycareState(void)
{
- // The daycare can be in 4 possible states:
- // 0: default state--no deposited mons, no egg
- // 1: there is an egg waiting for the player to pick it up
- // 2: there is a single pokemon in the daycare
- // 3: there are two pokemon in the daycare, no egg
-
u8 numMons;
if (IsEggPending(&gSaveBlock1Ptr->daycare))
{
- // There is an Egg waiting for the player.
- return 1;
+ return DAYCARE_EGG_WAITING;
}
numMons = CountPokemonInDaycare(&gSaveBlock1Ptr->daycare);
if (numMons != 0)
{
- return numMons + 1;
+ return numMons + 1; // DAYCARE_ONE_MON or DAYCARE_TWO_MONS
}
- return 0;
+ return DAYCARE_NO_MONS;
}
static u8 GetDaycarePokemonCount(void)
@@ -1002,15 +995,15 @@ static u8 GetDaycarePokemonCount(void)
return 0;
}
+// Determine if the two given egg group lists contain any of the
+// same egg groups.
static bool8 EggGroupsOverlap(u16 *eggGroups1, u16 *eggGroups2)
{
- // Determine if the two given egg group lists contain any of the
- // same egg groups.
s32 i, j;
- for (i = 0; i < 2; i++)
+ for (i = 0; i < EGG_GROUPS_PER_MON; i++)
{
- for (j = 0; j < 2; j++)
+ for (j = 0; j < EGG_GROUPS_PER_MON; j++)
{
if (eggGroups1[i] == eggGroups2[j])
return TRUE;
@@ -1023,12 +1016,12 @@ static bool8 EggGroupsOverlap(u16 *eggGroups1, u16 *eggGroups2)
static u8 GetDaycareCompatibilityScore(struct DayCare *daycare)
{
u32 i;
- u16 eggGroups[2][2];
- u16 species[2];
- u32 trainerIds[2];
- u32 genders[2];
+ u16 eggGroups[DAYCARE_MON_COUNT][EGG_GROUPS_PER_MON];
+ u16 species[DAYCARE_MON_COUNT];
+ u32 trainerIds[DAYCARE_MON_COUNT];
+ u32 genders[DAYCARE_MON_COUNT];
- for (i = 0; i < 2; i++)
+ for (i = 0; i < DAYCARE_MON_COUNT; i++)
{
u32 personality;
@@ -1042,41 +1035,42 @@ static u8 GetDaycareCompatibilityScore(struct DayCare *daycare)
// check unbreedable egg group
if (eggGroups[0][0] == EGG_GROUP_UNDISCOVERED || eggGroups[1][0] == EGG_GROUP_UNDISCOVERED)
- return 0;
+ return PARENTS_INCOMPATIBLE;
// two Ditto can't breed
if (eggGroups[0][0] == EGG_GROUP_DITTO && eggGroups[1][0] == EGG_GROUP_DITTO)
- return 0;
+ return PARENTS_INCOMPATIBLE;
- // now that we checked, one ditto can breed with any other mon
+ // one parent is Ditto
if (eggGroups[0][0] == EGG_GROUP_DITTO || eggGroups[1][0] == EGG_GROUP_DITTO)
{
- if (trainerIds[0] == trainerIds[1]) // same trainer
- return 20;
+ if (trainerIds[0] == trainerIds[1])
+ return PARENTS_LOW_COMPATIBILITY;
- return 50; // different trainers, more chance of poke sex
+ return PARENTS_MED_COMPATABILITY;
}
+ // neither parent is Ditto
else
{
- if (genders[0] == genders[1]) // no homo
- return 0;
+ if (genders[0] == genders[1])
+ return PARENTS_INCOMPATIBLE;
if (genders[0] == MON_GENDERLESS || genders[1] == MON_GENDERLESS)
- return 0;
- if (!EggGroupsOverlap(eggGroups[0], eggGroups[1])) // not compatible with each other
- return 0;
+ return PARENTS_INCOMPATIBLE;
+ if (!EggGroupsOverlap(eggGroups[0], eggGroups[1]))
+ return PARENTS_INCOMPATIBLE;
- if (species[0] == species[1]) // same species
+ if (species[0] == species[1])
{
- if (trainerIds[0] == trainerIds[1]) // same species and trainer
- return 50;
+ if (trainerIds[0] == trainerIds[1])
+ return PARENTS_MED_COMPATABILITY; // same species, same trainer
- return 70; // different trainers, same species
+ return PARENTS_MAX_COMPATABILITY; // same species, different trainers
}
else
{
- if (trainerIds[0] != trainerIds[1]) // different trainers, different species
- return 50;
+ if (trainerIds[0] != trainerIds[1])
+ return PARENTS_MED_COMPATABILITY; // different species, different trainers
- return 20; // different species, same trainer
+ return PARENTS_LOW_COMPATIBILITY; // different species, same trainer
}
}
}
@@ -1093,13 +1087,13 @@ void SetDaycareCompatibilityString(void)
relationshipScore = GetDaycareCompatibilityScoreFromSave();
whichString = 0;
- if (relationshipScore == 0)
+ if (relationshipScore == PARENTS_INCOMPATIBLE)
whichString = 3;
- if (relationshipScore == 20)
+ if (relationshipScore == PARENTS_LOW_COMPATIBILITY)
whichString = 2;
- if (relationshipScore == 50)
+ if (relationshipScore == PARENTS_MED_COMPATABILITY)
whichString = 1;
- if (relationshipScore == 70)
+ if (relationshipScore == PARENTS_MAX_COMPATABILITY)
whichString = 0;
StringCopy(gStringVar4, sCompatibilityMessages[whichString]);
@@ -1108,20 +1102,20 @@ void SetDaycareCompatibilityString(void)
bool8 NameHasGenderSymbol(const u8 *name, u8 genderRatio)
{
u8 i;
- u8 symbolsCount[2]; // male, female
- symbolsCount[0] = symbolsCount[1] = 0;
+ u8 symbolsCount[GENDER_COUNT];
+ symbolsCount[MALE] = symbolsCount[FEMALE] = 0;
for (i = 0; name[i] != EOS; i++)
{
if (name[i] == CHAR_MALE)
- symbolsCount[0]++;
+ symbolsCount[MALE]++;
if (name[i] == CHAR_FEMALE)
- symbolsCount[1]++;
+ symbolsCount[FEMALE]++;
}
- if (genderRatio == MON_MALE && symbolsCount[0] != 0 && symbolsCount[1] == 0)
+ if (genderRatio == MON_MALE && symbolsCount[MALE] != 0 && symbolsCount[FEMALE] == 0)
return TRUE;
- if (genderRatio == MON_FEMALE && symbolsCount[1] != 0 && symbolsCount[0] == 0)
+ if (genderRatio == MON_FEMALE && symbolsCount[FEMALE] != 0 && symbolsCount[MALE] == 0)
return TRUE;
return FALSE;
@@ -1150,13 +1144,13 @@ static u8 *AppendMonGenderSymbol(u8 *name, struct BoxPokemon *boxMon)
static void GetDaycareLevelMenuText(struct DayCare *daycare, u8 *dest)
{
- u8 monNames[2][20];
+ u8 monNames[DAYCARE_MON_COUNT][20];
u8 i;
*dest = EOS;
- for (i = 0; i < 2; i++)
+ for (i = 0; i < DAYCARE_MON_COUNT; i++)
{
- GetBoxMonNick(&daycare->mons[i].mon, monNames[i]);
+ GetBoxMonNickname(&daycare->mons[i].mon, monNames[i]);
AppendMonGenderSymbol(monNames[i], &daycare->mons[i].mon);
}
@@ -1174,7 +1168,7 @@ static void GetDaycareLevelMenuLevelText(struct DayCare *daycare, u8 *dest)
u8 text[20];
*dest = EOS;
- for (i = 0; i < 2; i++)
+ for (i = 0; i < DAYCARE_MON_COUNT; i++)
{
StringAppend(dest, gText_Lv);
level = GetLevelAfterDaycareSteps(&daycare->mons[i].mon, daycare->mons[i].steps);
@@ -1206,13 +1200,13 @@ static void DaycareAddTextPrinter(u8 windowId, const u8 *text, u32 x, u32 y)
AddTextPrinter(&printer, 0xFF, NULL);
}
-static void DaycarePrintMonNick(struct DayCare *daycare, u8 windowId, u32 daycareSlotId, u32 y)
+static void DaycarePrintMonNickname(struct DayCare *daycare, u8 windowId, u32 daycareSlotId, u32 y)
{
- u8 nick[POKEMON_NAME_LENGTH * 2];
+ u8 nickname[POKEMON_NAME_LENGTH * 2];
- GetBoxMonNick(&daycare->mons[daycareSlotId].mon, nick);
- AppendMonGenderSymbol(nick, &daycare->mons[daycareSlotId].mon);
- DaycareAddTextPrinter(windowId, nick, 8, y);
+ GetBoxMonNickname(&daycare->mons[daycareSlotId].mon, nickname);
+ AppendMonGenderSymbol(nickname, &daycare->mons[daycareSlotId].mon);
+ DaycareAddTextPrinter(windowId, nickname, 8, y);
}
static void DaycarePrintMonLvl(struct DayCare *daycare, u8 windowId, u32 daycareSlotId, u32 y)
@@ -1234,7 +1228,7 @@ static void DaycarePrintMonInfo(u8 windowId, s32 daycareSlotId, u8 y)
{
if (daycareSlotId < (unsigned) DAYCARE_MON_COUNT)
{
- DaycarePrintMonNick(&gSaveBlock1Ptr->daycare, windowId, daycareSlotId, y);
+ DaycarePrintMonNickname(&gSaveBlock1Ptr->daycare, windowId, daycareSlotId, y);
DaycarePrintMonLvl(&gSaveBlock1Ptr->daycare, windowId, daycareSlotId, y);
}
}
@@ -1254,8 +1248,8 @@ static void Task_HandleDaycareLevelMenuInput(u8 taskId)
case 1:
gSpecialVar_Result = input;
break;
- case 5:
- gSpecialVar_Result = 2;
+ case DAYCARE_LEVEL_MENU_EXIT:
+ gSpecialVar_Result = DAYCARE_EXITED_LEVEL_MENU;
break;
}
DestroyListMenuTask(gTasks[taskId].tMenuListTaskId, NULL, NULL);
@@ -1266,7 +1260,7 @@ static void Task_HandleDaycareLevelMenuInput(u8 taskId)
}
else if (gMain.newKeys & B_BUTTON)
{
- gSpecialVar_Result = 2;
+ gSpecialVar_Result = DAYCARE_EXITED_LEVEL_MENU;
DestroyListMenuTask(gTasks[taskId].tMenuListTaskId, NULL, NULL);
ClearStdWindowAndFrame(gTasks[taskId].tWindowId, TRUE);
RemoveWindow(gTasks[taskId].tWindowId);
diff --git a/src/decoration.c b/src/decoration.c
index 974859c88..4efeb19b1 100644
--- a/src/decoration.c
+++ b/src/decoration.c
@@ -2043,7 +2043,7 @@ const u32 *GetDecorationIconPicOrPalette(u16 decor, u8 mode)
if (decor > NUM_DECORATIONS)
decor = DECOR_NONE;
- return gUnknown_085A6BE8[decor][mode];
+ return gDecorIconTable[decor][mode];
}
u8 AddDecorationIconObjectFromEventObject(u16 tilesTag, u16 paletteTag, u8 decor)
@@ -2095,7 +2095,7 @@ u8 AddDecorationIconObject(u8 decor, s16 x, s16 y, u8 priority, u16 tilesTag, u1
gSprites[spriteId].pos2.x = x + 4;
gSprites[spriteId].pos2.y = y + 4;
}
- else if (gUnknown_085A6BE8[decor][0] == NULL)
+ else if (gDecorIconTable[decor][0] == NULL)
{
spriteId = AddDecorationIconObjectFromEventObject(tilesTag, paletteTag, decor);
if (spriteId == MAX_SPRITES)
diff --git a/src/diploma.c b/src/diploma.c
index 92c7df703..8e0901fa8 100644
--- a/src/diploma.c
+++ b/src/diploma.c
@@ -127,7 +127,7 @@ static void Task_DiplomaFadeOut(u8 taskId)
static void DisplayDiplomaText(void)
{
- if (sub_80C0944())
+ if (HasAllMons())
{
SetGpuReg(REG_OFFSET_BG1HOFS, DISPCNT_BG0_ON);
StringCopy(gStringVar1, gText_DexNational);
diff --git a/src/easy_chat.c b/src/easy_chat.c
index 93456631a..ba54de783 100644
--- a/src/easy_chat.c
+++ b/src/easy_chat.c
@@ -30,6 +30,7 @@
#include "constants/easy_chat.h"
#include "constants/event_objects.h"
#include "constants/flags.h"
+#include "constants/lilycove_lady.h"
#include "constants/songs.h"
#include "constants/species.h"
#include "constants/rgb.h"
@@ -240,6 +241,7 @@ struct Unk8597530
MainCallback callback;
};
+// Lilycove Quiz Lady
static const struct Unk8597530 sUnknown_08597530[] = {
{
.word = 26,
@@ -1305,15 +1307,15 @@ void ShowEasyChatScreen(void)
displayedPersonType = EASY_CHAT_PERSON_BOY;
break;
case EASY_CHAT_TYPE_QUIZ_ANSWER:
- words = &gSaveBlock1Ptr->lilycoveLady.quiz.unk_016;
+ words = &gSaveBlock1Ptr->lilycoveLady.quiz.playerAnswer;
break;
case EASY_CHAT_TYPE_QUIZ_QUESTION:
return;
case EASY_CHAT_TYPE_QUIZ_SET_QUESTION:
- words = gSaveBlock1Ptr->lilycoveLady.quiz.unk_002;
+ words = gSaveBlock1Ptr->lilycoveLady.quiz.question;
break;
case EASY_CHAT_TYPE_QUIZ_SET_ANSWER:
- words = &gSaveBlock1Ptr->lilycoveLady.quiz.unk_014;
+ words = &gSaveBlock1Ptr->lilycoveLady.quiz.correctAnswer;
break;
case EASY_CHAT_TYPE_APPRENTICE:
words = gSaveBlock2Ptr->apprentices[0].easyChatWords;
@@ -1329,7 +1331,7 @@ void ShowEasyChatScreen(void)
DoEasyChatScreen(gSpecialVar_0x8004, words, CB2_ReturnToFieldContinueScript, displayedPersonType);
}
-static void sub_811A7E4(void)
+static void CB2_QuizLadyQuestion(void)
{
LilycoveLady *lilycoveLady;
@@ -1343,7 +1345,7 @@ static void sub_811A7E4(void)
if (!gPaletteFade.active)
{
lilycoveLady = &gSaveBlock1Ptr->lilycoveLady;
- lilycoveLady->quiz.unk_016 = -1;
+ lilycoveLady->quiz.playerAnswer = -1;
CleanupOverworldWindowsAndTilemaps();
DoQuizQuestionEasyChatScreen();
}
@@ -1352,9 +1354,9 @@ static void sub_811A7E4(void)
gMain.state ++;
}
-void sub_811A858(void)
+void QuizLadyShowQuizQuestion(void)
{
- SetMainCallback2(sub_811A7E4);
+ SetMainCallback2(CB2_QuizLadyQuestion);
}
static int sub_811A868(u16 word)
@@ -1387,7 +1389,7 @@ static void DoQuizAnswerEasyChatScreen(void)
{
DoEasyChatScreen(
EASY_CHAT_TYPE_QUIZ_ANSWER,
- &gSaveBlock1Ptr->lilycoveLady.quiz.unk_016,
+ &gSaveBlock1Ptr->lilycoveLady.quiz.playerAnswer,
CB2_ReturnToFieldContinueScript,
EASY_CHAT_PERSON_DISPLAY_NONE);
}
@@ -1395,7 +1397,7 @@ static void DoQuizAnswerEasyChatScreen(void)
static void DoQuizQuestionEasyChatScreen(void)
{
DoEasyChatScreen(EASY_CHAT_TYPE_QUIZ_QUESTION,
- gSaveBlock1Ptr->lilycoveLady.quiz.unk_002,
+ gSaveBlock1Ptr->lilycoveLady.quiz.question,
CB2_ReturnToFieldContinueScript,
EASY_CHAT_PERSON_DISPLAY_NONE);
}
@@ -1403,7 +1405,7 @@ static void DoQuizQuestionEasyChatScreen(void)
static void DoQuizSetAnswerEasyChatScreen(void)
{
DoEasyChatScreen(EASY_CHAT_TYPE_QUIZ_SET_ANSWER,
- &gSaveBlock1Ptr->lilycoveLady.quiz.unk_014,
+ &gSaveBlock1Ptr->lilycoveLady.quiz.correctAnswer,
CB2_ReturnToFieldContinueScript,
EASY_CHAT_PERSON_DISPLAY_NONE);
}
@@ -1411,7 +1413,7 @@ static void DoQuizSetAnswerEasyChatScreen(void)
static void DoQuizSetQuestionEasyChatScreen(void)
{
DoEasyChatScreen(EASY_CHAT_TYPE_QUIZ_SET_QUESTION,
- gSaveBlock1Ptr->lilycoveLady.quiz.unk_002,
+ gSaveBlock1Ptr->lilycoveLady.quiz.question,
CB2_ReturnToFieldContinueScript,
EASY_CHAT_PERSON_DISPLAY_NONE);
}
@@ -2660,9 +2662,9 @@ static int sub_811BD64(void)
return sub_811BCF4();
saveBlock1 = gSaveBlock1Ptr;
- for (i = 0; i < 9; i++)
+ for (i = 0; i < QUIZ_QUESTION_LEN; i++)
{
- if (saveBlock1->lilycoveLady.quiz.unk_002[i] != 0xFFFF)
+ if (saveBlock1->lilycoveLady.quiz.question[i] != 0xFFFF)
return 0;
}
@@ -2676,7 +2678,7 @@ static int sub_811BDB0(void)
return sub_811BCF4();
quiz = &gSaveBlock1Ptr->lilycoveLady.quiz;
- return quiz->unk_014 == 0xFFFF ? 1 : 0;
+ return quiz->correctAnswer == 0xFFFF ? 1 : 0;
}
static void sub_811BDF0(u8 *arg0)
diff --git a/src/egg_hatch.c b/src/egg_hatch.c
index 835141ef2..1eaf4e4a1 100644
--- a/src/egg_hatch.c
+++ b/src/egg_hatch.c
@@ -56,7 +56,7 @@ struct EggHatchData
extern const u32 gUnknown_08331F60[]; // tilemap gameboy circle
extern const u8 gText_HatchedFromEgg[];
-extern const u8 gText_NickHatchPrompt[];
+extern const u8 gText_NicknameHatchPrompt[];
static void Task_EggHatch(u8 taskID);
static void CB2_EggHatch_0(void);
@@ -298,13 +298,13 @@ static void CreatedHatchedMon(struct Pokemon *egg, struct Pokemon *temp)
u16 species;
u32 personality, pokerus;
u8 i, friendship, language, gameMet, markings, obedience;
- u16 moves[4];
+ u16 moves[MAX_MON_MOVES];
u32 ivs[NUM_STATS];
species = GetMonData(egg, MON_DATA_SPECIES);
- for (i = 0; i < 4; i++)
+ for (i = 0; i < MAX_MON_MOVES; i++)
{
moves[i] = GetMonData(egg, MON_DATA_MOVE1 + i);
}
@@ -322,9 +322,9 @@ static void CreatedHatchedMon(struct Pokemon *egg, struct Pokemon *temp)
pokerus = GetMonData(egg, MON_DATA_POKERUS);
obedience = GetMonData(egg, MON_DATA_OBEDIENCE);
- CreateMon(temp, species, EGG_HATCH_LEVEL, 32, TRUE, personality, 0, 0);
+ CreateMon(temp, species, EGG_HATCH_LEVEL, 32, TRUE, personality, OT_ID_PLAYER_ID, 0);
- for (i = 0; i < 4; i++)
+ for (i = 0; i < MAX_MON_MOVES; i++)
{
SetMonData(temp, MON_DATA_MOVE1 + i, &moves[i]);
}
@@ -368,7 +368,7 @@ static void AddHatchedMonToParty(u8 id)
GetSetPokedexFlag(pokeNum, FLAG_SET_SEEN);
GetSetPokedexFlag(pokeNum, FLAG_SET_CAUGHT);
- GetMonNick(mon, gStringVar1);
+ GetMonNickname2(mon, gStringVar1);
ball = ITEM_POKE_BALL;
SetMonData(mon, MON_DATA_POKEBALL, &ball);
@@ -388,17 +388,17 @@ void ScriptHatchMon(void)
AddHatchedMonToParty(gSpecialVar_0x8004);
}
-static bool8 sub_807158C(struct DayCare *daycare, u8 daycareId)
+static bool8 _CheckDaycareMonReceivedMail(struct DayCare *daycare, u8 daycareId)
{
- u8 nick[0x20];
+ u8 nickname[32];
struct DaycareMon *daycareMon = &daycare->mons[daycareId];
- GetBoxMonNick(&daycareMon->mon, nick);
- if (daycareMon->mail.message.itemId != 0
- && (StringCompareWithoutExtCtrlCodes(nick, daycareMon->mail.monName) != 0
+ GetBoxMonNickname(&daycareMon->mon, nickname);
+ if (daycareMon->mail.message.itemId != ITEM_NONE
+ && (StringCompareWithoutExtCtrlCodes(nickname, daycareMon->mail.monName) != 0
|| StringCompareWithoutExtCtrlCodes(gSaveBlock2Ptr->playerName, daycareMon->mail.OT_name) != 0))
{
- StringCopy(gStringVar1, nick);
+ StringCopy(gStringVar1, nickname);
TVShowConvertInternationalString(gStringVar2, daycareMon->mail.OT_name, daycareMon->mail.gameLanguage);
TVShowConvertInternationalString(gStringVar3, daycareMon->mail.monName, daycareMon->mail.monLanguage);
return TRUE;
@@ -406,9 +406,9 @@ static bool8 sub_807158C(struct DayCare *daycare, u8 daycareId)
return FALSE;
}
-bool8 sub_8071614(void)
+bool8 CheckDaycareMonReceivedMail(void)
{
- return sub_807158C(&gSaveBlock1Ptr->daycare, gSpecialVar_0x8004);
+ return _CheckDaycareMonReceivedMail(&gSaveBlock1Ptr->daycare, gSpecialVar_0x8004);
}
static u8 EggHatchCreateMonSprite(u8 a0, u8 switchID, u8 pokeID, u16* speciesLoc)
@@ -634,7 +634,7 @@ static void CB2_EggHatch_1(void)
}
break;
case 5:
- GetMonNick(&gPlayerParty[sEggHatchData->eggPartyID], gStringVar1);
+ GetMonNickname2(&gPlayerParty[sEggHatchData->eggPartyID], gStringVar1);
StringExpandPlaceholders(gStringVar4, gText_HatchedFromEgg);
EggHatchPrintMessage(sEggHatchData->windowId, gStringVar4, 0, 3, 0xFF);
PlayFanfare(MUS_FANFA5);
@@ -651,8 +651,8 @@ static void CB2_EggHatch_1(void)
sEggHatchData->CB2_state++;
break;
case 8:
- GetMonNick(&gPlayerParty[sEggHatchData->eggPartyID], gStringVar1);
- StringExpandPlaceholders(gStringVar4, gText_NickHatchPrompt);
+ GetMonNickname2(&gPlayerParty[sEggHatchData->eggPartyID], gStringVar1);
+ StringExpandPlaceholders(gStringVar4, gText_NicknameHatchPrompt);
EggHatchPrintMessage(sEggHatchData->windowId, gStringVar4, 0, 2, 1);
sEggHatchData->CB2_state++;
break;
@@ -668,7 +668,7 @@ static void CB2_EggHatch_1(void)
switch (Menu_ProcessInputNoWrapClearOnChoose())
{
case 0:
- GetMonNick(&gPlayerParty[sEggHatchData->eggPartyID], gStringVar3);
+ GetMonNickname2(&gPlayerParty[sEggHatchData->eggPartyID], gStringVar3);
species = GetMonData(&gPlayerParty[sEggHatchData->eggPartyID], MON_DATA_SPECIES);
gender = GetMonGender(&gPlayerParty[sEggHatchData->eggPartyID]);
personality = GetMonData(&gPlayerParty[sEggHatchData->eggPartyID], MON_DATA_PERSONALITY, 0);
@@ -880,9 +880,9 @@ u8 GetEggStepsToSubtract(void)
return 1;
}
-u16 sub_80722E0(void)
+u16 CountPartyAliveNonEggMons(void)
{
u16 aliveNonEggMonsCount = CountStorageNonEggMons();
- aliveNonEggMonsCount += CountPartyAliveNonEggMonsExcept(6);
+ aliveNonEggMonsCount += CountPartyAliveNonEggMonsExcept(PARTY_SIZE);
return aliveNonEggMonsCount;
}
diff --git a/src/electric.c b/src/electric.c
index 5e7729842..4b93119dc 100644
--- a/src/electric.c
+++ b/src/electric.c
@@ -667,9 +667,9 @@ static void sub_810A75C(struct Sprite *sprite)
sprite->oam.tileNum += gBattleAnimArgs[3] * 4;
if (gBattleAnimArgs[3] == 1)
- sprite->oam.matrixNum = 8;
+ sprite->oam.matrixNum = ST_OAM_HFLIP;
else if (gBattleAnimArgs[3] == 2)
- sprite->oam.matrixNum = 16;
+ sprite->oam.matrixNum = ST_OAM_VFLIP;
sprite->data[0] = gBattleAnimArgs[2];
sprite->callback = WaitAnimForDuration;
diff --git a/src/ereader_helpers.c b/src/ereader_helpers.c
index 11aaaafe7..f184dea82 100755
--- a/src/ereader_helpers.c
+++ b/src/ereader_helpers.c
@@ -9,6 +9,12 @@
#include "sprite.h"
#include "task.h"
#include "util.h"
+#include "trainer_hill.h"
+#include "constants/easy_chat.h"
+#include "constants/trainers.h"
+#include "constants/species.h"
+#include "constants/moves.h"
+#include "constants/items.h"
struct Unknown030012C8
{
@@ -38,14 +44,359 @@ static u16 gUnknown_030012F0;
static u16 gUnknown_030012F2;
static u16 gUnknown_030012F4;
-extern const u8 gUnknown_08625B6C[][0x148];
+static const struct TrainerHillTrainer sTrainerHillTrainerTemplates_JP[] = {
+ [0] = {
+ .name = __("マキエ$$$$$ "),
+ .facilityClass = FACILITY_CLASS_HEX_MANIAC,
+ .unused = 0x1,
+ .speechBefore = { EC_WORD_PREPOSTEROUS, EC_WORD_CASE, EC_WORD_THERE, EC_WORD_TO_HER, EC_WORD_CHALLENGE, EC_WORD_JOKING },
+ .speechWin = { EC_WORD_HERS, EC_WORD_TRUMP_CARD, EC_MOVE2(SECRET_POWER), EC_WORD_USING, EC_WORD_WON, EC_WORD_EXCL_EXCL },
+ .speechLose = { EC_WORD_TO_HER, EC_WORD_WIN, EC_WORD_JOKING, EC_WORD_HIGHS, EC_WORD_SCARY, EC_WORD_ELLIPSIS_EXCL },
+ .speechAfter = { EC_WORD_IGNORANT, EC_WORD_SO, EC_WORD_TODAY, EC_WORD_NIGHTTIME, EC_WORD_YOU_RE, EC_WORD_ELLIPSIS_ELLIPSIS_ELLIPSIS },
+ .mons = {
+ [0] = NULL_BATTLE_TOWER_POKEMON,
+ [1] = NULL_BATTLE_TOWER_POKEMON,
+ [2] = NULL_BATTLE_TOWER_POKEMON,
+ [3] = {
+ .species = SPECIES_SWALOT,
+ .heldItem = ITEM_SHELL_BELL,
+ .moves = { MOVE_SLUDGE_BOMB, MOVE_SHADOW_BALL, MOVE_PAIN_SPLIT, MOVE_YAWN },
+ .level = 0,
+ .ppBonuses = 0x0,
+ .hpEV = 55,
+ .attackEV = 255,
+ .defenseEV = 100,
+ .speedEV = 0,
+ .spAttackEV = 0,
+ .spDefenseEV = 100,
+ .otId = 0x10000000,
+ .hpIV = 5,
+ .attackIV = 5,
+ .defenseIV = 5,
+ .speedIV = 5,
+ .spAttackIV = 5,
+ .spDefenseIV = 5,
+ .abilityNum = 1,
+ .personality = 0x80,
+ .nickname = __("マルノーム$$$$$$"),
+ .friendship = 255
+ },
+ [4] = {
+ .species = SPECIES_DUSTOX,
+ .heldItem = ITEM_BRIGHT_POWDER,
+ .moves = { MOVE_SILVER_WIND, MOVE_SLUDGE_BOMB, MOVE_SHADOW_BALL, MOVE_GIGA_DRAIN },
+ .level = 0,
+ .ppBonuses = 0x0,
+ .hpEV = 0,
+ .attackEV = 255,
+ .defenseEV = 0,
+ .speedEV = 0,
+ .spAttackEV = 255,
+ .spDefenseEV = 0,
+ .otId = 0x10000000,
+ .hpIV = 5,
+ .attackIV = 5,
+ .defenseIV = 5,
+ .speedIV = 5,
+ .spAttackIV = 5,
+ .spDefenseIV = 5,
+ .abilityNum = 0,
+ .personality = 0x6,
+ .nickname = __("ドクケイル$$$$$$"),
+ .friendship = 255
+ },
+ [5] = {
+ .species = SPECIES_RELICANTH,
+ .heldItem = ITEM_QUICK_CLAW,
+ .moves = { MOVE_ANCIENT_POWER, MOVE_SURF, MOVE_EARTHQUAKE, MOVE_AMNESIA },
+ .level = 0,
+ .ppBonuses = 0x0,
+ .hpEV = 100,
+ .attackEV = 0,
+ .defenseEV = 0,
+ .speedEV = 0,
+ .spAttackEV = 155,
+ .spDefenseEV = 255,
+ .otId = 0x10000000,
+ .hpIV = 5,
+ .attackIV = 5,
+ .defenseIV = 5,
+ .speedIV = 5,
+ .spAttackIV = 5,
+ .spDefenseIV = 5,
+ .abilityNum = 0,
+ .personality = 0x2f,
+ .nickname = __("ジーランス$$$$$$"),
+ .friendship = 255
+ },
+ }
+ },
+ [1] = {
+ .name = __("ハルヒト$$$$ "),
+ .facilityClass = FACILITY_CLASS_CAMPER,
+ .unused = 0x1,
+ .speechBefore = { EC_MOVE2(BOUNCE), EC_WORD_AS_MUCH_AS, 0xFFFF, EC_WORD_THEY_RE, EC_WORD_STRONG, EC_WORD_EXCL },
+ .speechWin = { EC_MOVE(FLY), EC_WORD_AS_MUCH_AS, 0xFFFF, EC_WORD_THEY_RE, EC_WORD_HAPPY, EC_WORD_EXCL },
+ .speechLose = { EC_MOVE2(MINIMIZE), EC_WORD_AS_MUCH_AS, 0xFFFF, EC_WORD_THEY_RE, EC_WORD_SAD, EC_WORD_EXCL },
+ .speechAfter = { EC_MOVE(BITE), EC_WORD_AS_MUCH_AS, 0xFFFF, EC_WORD_THEY_RE, EC_WORD_ANGRY, EC_WORD_EXCL },
+ .mons = {
+ [0] = NULL_BATTLE_TOWER_POKEMON,
+ [1] = NULL_BATTLE_TOWER_POKEMON,
+ [2] = NULL_BATTLE_TOWER_POKEMON,
+ [3] = {
+ .species = SPECIES_CACTURNE,
+ .heldItem = ITEM_QUICK_CLAW,
+ .moves = { MOVE_GIGA_DRAIN, MOVE_FAINT_ATTACK, MOVE_THUNDER_PUNCH, MOVE_GROWTH },
+ .level = 0,
+ .ppBonuses = 0x0,
+ .hpEV = 55,
+ .attackEV = 0,
+ .defenseEV = 100,
+ .speedEV = 0,
+ .spAttackEV = 255,
+ .spDefenseEV = 100,
+ .otId = 0x10000000,
+ .hpIV = 5,
+ .attackIV = 5,
+ .defenseIV = 5,
+ .speedIV = 5,
+ .spAttackIV = 5,
+ .spDefenseIV = 5,
+ .abilityNum = 0,
+ .personality = 0x8c,
+ .nickname = __("ノクタス$$$$$$$"),
+ .friendship = 255
+ },
+ [4] = {
+ .species = SPECIES_SWELLOW,
+ .heldItem = ITEM_BRIGHT_POWDER,
+ .moves = { MOVE_FACADE, MOVE_AERIAL_ACE, MOVE_QUICK_ATTACK, MOVE_DOUBLE_TEAM },
+ .level = 0,
+ .ppBonuses = 0x0,
+ .hpEV = 255,
+ .attackEV = 255,
+ .defenseEV = 0,
+ .speedEV = 0,
+ .spAttackEV = 0,
+ .spDefenseEV = 0,
+ .otId = 0x10000000,
+ .hpIV = 5,
+ .attackIV = 5,
+ .defenseIV = 5,
+ .speedIV = 5,
+ .spAttackIV = 5,
+ .spDefenseIV = 5,
+ .abilityNum = 0,
+ .personality = 0x80,
+ .nickname = __("オオスバメ$$$$$$"),
+ .friendship = 255
+ },
+ [5] = {
+ .species = SPECIES_WHISCASH,
+ .heldItem = ITEM_CHESTO_BERRY,
+ .moves = { MOVE_SURF, MOVE_EARTHQUAKE, MOVE_AMNESIA, MOVE_REST },
+ .level = 0,
+ .ppBonuses = 0x0,
+ .hpEV = 0,
+ .attackEV = 255,
+ .defenseEV = 0,
+ .speedEV = 0,
+ .spAttackEV = 255,
+ .spDefenseEV = 0,
+ .otId = 0x10000000,
+ .hpIV = 5,
+ .attackIV = 5,
+ .defenseIV = 5,
+ .speedIV = 5,
+ .spAttackIV = 5,
+ .spDefenseIV = 5,
+ .abilityNum = 0,
+ .personality = 0x0,
+ .nickname = __("ナマズン$$$$$$$"),
+ .friendship = 255
+ },
+ }
+ },
+ [2] = {
+ .name = __("メイコ$$$$$ "),
+ .facilityClass = FACILITY_CLASS_SCHOOL_KID_F,
+ .unused = 0x1,
+ .speechBefore = { EC_WORD_SHINE, EC_WORD_POKEMON, EC_WORD_RELEASE, EC_WORD_WAS, EC_MOVE2(FRUSTRATION), EC_WORD_WITHOUT },
+ .speechWin = { EC_WORD_SHINE, EC_WORD_POKEMON, EC_WORD_TO_HER, EC_MOVE2(PRESENT), EC_WORD_KNOWS, EC_WORD_WITHOUT },
+ .speechLose = { EC_WORD_THAT, EC_WORD_ABOVE, EC_WORD_LOST, EC_WORD_STORES, EC_WORD_JOKING, EC_WORD_ELLIPSIS_ELLIPSIS_ELLIPSIS },
+ .speechAfter = { EC_WORD_ENTERTAINING, EC_WORD_NONE, EC_WORD_HEY_QUES, EC_WORD_ALMOST, EC_WORD_EXCL, 0xFFFF },
+ .mons = {
+ [0] = NULL_BATTLE_TOWER_POKEMON,
+ [1] = NULL_BATTLE_TOWER_POKEMON,
+ [2] = NULL_BATTLE_TOWER_POKEMON,
+ [3] = {
+ .species = SPECIES_DELCATTY,
+ .heldItem = ITEM_LUM_BERRY,
+ .moves = { MOVE_SING, MOVE_BODY_SLAM, MOVE_SHADOW_BALL, MOVE_IRON_TAIL },
+ .level = 0,
+ .ppBonuses = 0x0,
+ .hpEV = 0,
+ .attackEV = 255,
+ .defenseEV = 0,
+ .speedEV = 255,
+ .spAttackEV = 0,
+ .spDefenseEV = 0,
+ .otId = 0x10000000,
+ .hpIV = 5,
+ .attackIV = 5,
+ .defenseIV = 5,
+ .speedIV = 5,
+ .spAttackIV = 5,
+ .spDefenseIV = 5,
+ .abilityNum = 0,
+ .personality = 0x3,
+ .nickname = __("エネコロロ$$$$$$"),
+ .friendship = 255
+ },
+ [4] = {
+ .species = SPECIES_ROSELIA,
+ .heldItem = ITEM_LEFTOVERS,
+ .moves = { MOVE_GIGA_DRAIN, MOVE_GRASS_WHISTLE, MOVE_TOXIC, MOVE_LEECH_SEED },
+ .level = 0,
+ .ppBonuses = 0x0,
+ .hpEV = 255,
+ .attackEV = 0,
+ .defenseEV = 0,
+ .speedEV = 0,
+ .spAttackEV = 255,
+ .spDefenseEV = 0,
+ .otId = 0x10000000,
+ .hpIV = 5,
+ .attackIV = 5,
+ .defenseIV = 5,
+ .speedIV = 5,
+ .spAttackIV = 5,
+ .spDefenseIV = 5,
+ .abilityNum = 1,
+ .personality = 0x6,
+ .nickname = __("ロゼリア$$$$$$$"),
+ .friendship = 255
+ },
+ [5] = {
+ .species = SPECIES_BEAUTIFLY,
+ .heldItem = ITEM_BRIGHT_POWDER,
+ .moves = { MOVE_SILVER_WIND, MOVE_AERIAL_ACE, MOVE_ATTRACT, MOVE_PSYCHIC },
+ .level = 0,
+ .ppBonuses = 0x0,
+ .hpEV = 100,
+ .attackEV = 200,
+ .defenseEV = 0,
+ .speedEV = 0,
+ .spAttackEV = 200,
+ .spDefenseEV = 0,
+ .otId = 0x10000000,
+ .hpIV = 5,
+ .attackIV = 5,
+ .defenseIV = 5,
+ .speedIV = 5,
+ .spAttackIV = 5,
+ .spDefenseIV = 5,
+ .abilityNum = 0,
+ .personality = 0x6,
+ .nickname = __("アゲハント$$$$$$"),
+ .friendship = 255
+ },
+ }
+ },
+ [3] = {
+ .name = __("ピエール$$$$ "),
+ .facilityClass = FACILITY_CLASS_GENTLEMAN,
+ .unused = 0x1,
+ .speechBefore = { EC_WORD_SHE_WAS, EC_WORD_NO_1, EC_WORD_STRONG, EC_WORD_UNCLE, EC_WORD_THERE, EC_WORD_EXCL },
+ .speechWin = { EC_WORD_HAHAHA, EC_WORD_TEACHER, EC_WORD_BECOMES, EC_WORD_GIVE, EC_WORD_IS_IT_QUES, 0xFFFF },
+ .speechLose = { EC_WORD_OUTSIDE, EC_WORD_UNCLE, EC_WORD_SURPRISE, EC_WORD_THESE, EC_WORD_HEY_QUES, EC_WORD_ELLIPSIS_EXCL },
+ .speechAfter = { EC_WORD_HE_S, EC_WORD_NO_1, EC_WORD_STRONG, EC_WORD_CHILDREN, EC_WORD_CAN_T, EC_WORD_EXCL_EXCL },
+ .mons = {
+ [0] = NULL_BATTLE_TOWER_POKEMON,
+ [1] = NULL_BATTLE_TOWER_POKEMON,
+ [2] = NULL_BATTLE_TOWER_POKEMON,
+ [3] = {
+ .species = SPECIES_MAWILE,
+ .heldItem = ITEM_BRIGHT_POWDER,
+ .moves = { MOVE_CRUNCH, MOVE_FLAMETHROWER, MOVE_THUNDER_PUNCH, MOVE_COMET_PUNCH },
+ .level = 0,
+ .ppBonuses = 0x0,
+ .hpEV = 0,
+ .attackEV = 0,
+ .defenseEV = 100,
+ .speedEV = 0,
+ .spAttackEV = 255,
+ .spDefenseEV = 155,
+ .otId = 0x10000000,
+ .hpIV = 5,
+ .attackIV = 5,
+ .defenseIV = 5,
+ .speedIV = 5,
+ .spAttackIV = 5,
+ .spDefenseIV = 5,
+ .abilityNum = 1,
+ .personality = 0x0,
+ .nickname = __("クチート$$$$$$$"),
+ .friendship = 255
+ },
+ [4] = {
+ .species = SPECIES_SHARPEDO,
+ .heldItem = ITEM_SCOPE_LENS,
+ .moves = { MOVE_SURF, MOVE_CRUNCH, MOVE_DOUBLE_EDGE, MOVE_EARTHQUAKE },
+ .level = 0,
+ .ppBonuses = 0x0,
+ .hpEV = 255,
+ .attackEV = 0,
+ .defenseEV = 0,
+ .speedEV = 0,
+ .spAttackEV = 255,
+ .spDefenseEV = 0,
+ .otId = 0x10000000,
+ .hpIV = 5,
+ .attackIV = 5,
+ .defenseIV = 5,
+ .speedIV = 5,
+ .spAttackIV = 5,
+ .spDefenseIV = 5,
+ .abilityNum = 0,
+ .personality = 0x96,
+ .nickname = __("サメハダー$$$$$$"),
+ .friendship = 255
+ },
+ [5] = {
+ .species = SPECIES_BANETTE,
+ .heldItem = ITEM_LUM_BERRY,
+ .moves = { MOVE_PSYCHIC, MOVE_SHADOW_BALL, MOVE_THUNDERBOLT, MOVE_WILL_O_WISP },
+ .level = 0,
+ .ppBonuses = 0x0,
+ .hpEV = 255,
+ .attackEV = 0,
+ .defenseEV = 0,
+ .speedEV = 0,
+ .spAttackEV = 255,
+ .spDefenseEV = 0,
+ .otId = 0x10000000,
+ .hpIV = 5,
+ .attackIV = 5,
+ .defenseIV = 5,
+ .speedIV = 5,
+ .spAttackIV = 5,
+ .spDefenseIV = 5,
+ .abilityNum = 0,
+ .personality = 0x96,
+ .nickname = __("ジュペッタ$$$$$$"),
+ .friendship = 255
+ },
+ }
+ },
+};
static u8 sub_81D38D4(void)
{
return (gSaveBlock1Ptr->trainerHill.unused + 1) % 256;
}
-static bool32 Struct_Unk81D38FC_ValidateChecksum(struct Unk81D38FC *arg0)
+static bool32 Struct_EReaderTrainerHillTrainer_ValidateChecksum(struct EReaderTrainerHillTrainer *arg0)
{
int checksum = CalcByteArraySum((u8 *)arg0, 0x270);
if (checksum != arg0->checksum)
@@ -58,17 +409,17 @@ bool8 EReader_IsReceivedDataValid(struct EReaderTrainerHillSet *buffer)
{
u32 i;
u32 checksum;
- int var0 = buffer->unk_0;
+ int var0 = buffer->count;
if (var0 < 1 || var0 > 8)
return FALSE;
for (i = 0; i < var0; i++)
{
- if (!Struct_Unk81D38FC_ValidateChecksum(&buffer->unk_8[i]))
+ if (!Struct_EReaderTrainerHillTrainer_ValidateChecksum(&buffer->unk_8[i]))
return FALSE;
}
- checksum = CalcByteArraySum((u8 *)buffer->unk_8, var0 * sizeof(struct Unk81D38FC));
+ checksum = CalcByteArraySum((u8 *)buffer->unk_8, var0 * sizeof(struct EReaderTrainerHillTrainer));
if (checksum != buffer->checksum)
return FALSE;
@@ -78,7 +429,7 @@ bool8 EReader_IsReceivedDataValid(struct EReaderTrainerHillSet *buffer)
static bool32 TrainerHill_VerifyChecksum(struct EReaderTrainerHillSet *buffer)
{
u32 checksum;
- int var0 = buffer->unk_0;
+ int var0 = buffer->count;
if (var0 < 1 || var0 > 8)
return FALSE;
@@ -89,38 +440,39 @@ static bool32 TrainerHill_VerifyChecksum(struct EReaderTrainerHillSet *buffer)
return TRUE;
}
-static bool32 TryWriteTrainerHill_r(struct EReaderTrainerHillSet *arg0, struct Unk81D3998 *buffer2)
+static bool32 TryWriteTrainerHill_r(struct EReaderTrainerHillSet *ttdata, struct TrHillTag *buffer2)
{
int i;
+ AGB_ASSERT_EX(ttdata->dummy == 0, "cereader_tool.c", 450);
+ AGB_ASSERT_EX(ttdata->id == 0, "cereader_tool.c", 452);
+
memset(buffer2, 0, 0x1000);
- buffer2->unk_000 = arg0->unk_0;
- buffer2->unk_001 = sub_81D38D4();
- buffer2->unk_002 = (arg0->unk_0 + 1) / 2;
+ buffer2->unkField_0 = ttdata->count;
+ buffer2->unused1 = sub_81D38D4();
+ buffer2->numFloors = (ttdata->count + 1) / 2;
- for (i = 0; i < arg0->unk_0; i++)
+ for (i = 0; i < ttdata->count; i++)
{
if (!(i & 1))
{
- buffer2->unk_008[i / 2].unk_000[0] = arg0->unk_8[i].unk0;
- memcpy(buffer2->unk_008[i / 2].unk_294, arg0->unk_8[i].unk14C, 0x124);
- memcpy(buffer2->unk_008[i / 2].unk_004, arg0->unk_8[i].unk4, 0x148);
+ buffer2->floors[i / 2].unk0 = ttdata->unk_8[i].unk0;
+ buffer2->floors[i / 2].display = ttdata->unk_8[i].unk14C;
+ buffer2->floors[i / 2].trainers[0] = ttdata->unk_8[i].unk4;
}
else
{
- buffer2->unk_008[i / 2].unk_000[1] = arg0->unk_8[i].unk0;
- memcpy(buffer2->unk_008[i / 2].unk_14C, arg0->unk_8[i].unk4, 0x148);
+ buffer2->floors[i / 2].unk1 = ttdata->unk_8[i].unk0;
+ buffer2->floors[i / 2].trainers[1] = ttdata->unk_8[i].unk4;
}
}
if (i & 1)
{
- u8 * dest = buffer2->unk_008[i / 2].unk_14C;
- const u8 (* src)[0x148] = gUnknown_08625B6C;
- memcpy(dest, src[i / 2], 0x148);
+ buffer2->floors[i / 2].trainers[1] = sTrainerHillTrainerTemplates_JP[i / 2];
}
- buffer2->checksum = CalcByteArraySum((u8 *)buffer2->unk_008, sizeof(struct Unk81D3998) - offsetof(struct Unk81D3998, unk_008));
+ buffer2->checksum = CalcByteArraySum((u8 *)buffer2->floors, 4 * sizeof(struct TrHillFloor));
if (TryWriteSpecialSaveSection(SECTOR_ID_TRAINER_HILL, (u8 *)buffer2) != 1)
return FALSE;
@@ -129,7 +481,7 @@ static bool32 TryWriteTrainerHill_r(struct EReaderTrainerHillSet *arg0, struct U
bool32 TryWriteTrainerHill(struct EReaderTrainerHillSet *arg0)
{
- struct Unk81D3998 *var0 = AllocZeroed(0x1000);
+ void *var0 = AllocZeroed(0x1000);
bool32 result = TryWriteTrainerHill_r(arg0, var0);
Free(var0);
return result;
@@ -163,20 +515,20 @@ bool32 ReadTrainerHillAndValidate(void)
return result;
}
-static int unref_sub_81D3B54(int arg0, u32 *arg1)
+int EReader_Send(int arg0, u32 *arg1)
{
int result;
u16 var0;
int var1;
- sub_81D41A0();
+ EReaderHelper_SaveRegsState();
while (1)
{
sub_81D4170();
if (gUnknown_030012E2 & 2)
gShouldAdvanceLinkState = 2;
- var1 = sub_81D3D70(1, arg0, arg1, NULL);
+ var1 = EReaderHandleTransfer(1, arg0, arg1, NULL);
gUnknown_030012E4 = var1;
if ((gUnknown_030012E4 & 0x13) == 0x10)
{
@@ -202,24 +554,24 @@ static int unref_sub_81D3B54(int arg0, u32 *arg1)
}
CpuFill32(0, &gUnknown_030012C8, sizeof(struct Unknown030012C8));
- sub_81D41F4();
+ EReaderHelper_RestoreRegsState();
return result;
}
-static int unref_sub_81D3BE8(u32 *arg0)
+int EReader_Recv(u32 *arg0)
{
int result;
u16 var0;
int var1;
- sub_81D41A0();
+ EReaderHelper_SaveRegsState();
while (1)
{
sub_81D4170();
if (gUnknown_030012E2 & 2)
gShouldAdvanceLinkState = 2;
- var1 = sub_81D3D70(0, 0, NULL, arg0);
+ var1 = EReaderHandleTransfer(0, 0, NULL, arg0);
gUnknown_030012E4 = var1;
if ((gUnknown_030012E4 & 0x13) == 0x10)
{
@@ -245,7 +597,7 @@ static int unref_sub_81D3BE8(u32 *arg0)
}
CpuFill32(0, &gUnknown_030012C8, sizeof(struct Unknown030012C8));
- sub_81D41F4();
+ EReaderHelper_RestoreRegsState();
return result;
}
@@ -285,7 +637,7 @@ static void sub_81D3D34(void)
gUnknown_030012E8 = 0;
}
-int sub_81D3D70(u8 arg0, u32 arg1, u32 *arg2, u32 *arg3)
+int EReaderHandleTransfer(u8 arg0, u32 arg1, u32 *arg2, u32 *arg3)
{
switch (gUnknown_030012C8.unk0[1])
{
@@ -519,7 +871,7 @@ static void sub_81D4170(void)
gUnknown_030012E0 = keysMask;
}
-void sub_81D41A0(void)
+void EReaderHelper_SaveRegsState(void)
{
gUnknown_030012EC = REG_IME;
gUnknown_030012EE = REG_IE;
@@ -528,7 +880,7 @@ void sub_81D41A0(void)
gUnknown_030012F4 = REG_RCNT;
}
-void sub_81D41F4(void)
+void EReaderHelper_RestoreRegsState(void)
{
REG_IME = gUnknown_030012EC;
REG_IE = gUnknown_030012EE;
diff --git a/src/ereader_screen.c b/src/ereader_screen.c
index 98f0d9b8c..13e964224 100755
--- a/src/ereader_screen.c
+++ b/src/ereader_screen.c
@@ -49,7 +49,7 @@ static void sub_81D4D50(struct Unk03006370 *arg0, int arg1, u32 *arg2)
REG_IME = 0;
gIntrTable[1] = sub_81D3FAC;
gIntrTable[2] = sub_81D3F9C;
- sub_81D41A0();
+ EReaderHelper_SaveRegsState();
sub_81D4238();
REG_IE |= INTR_FLAG_VCOUNT;
REG_IME = backupIME;
@@ -63,7 +63,7 @@ static void sub_81D4DB8(struct Unk03006370 *arg0)
volatile u16 backupIME = REG_IME;
REG_IME = 0;
sub_81D4238();
- sub_81D41F4();
+ EReaderHelper_RestoreRegsState();
RestoreSerialTimer3IntrHandlers();
REG_IME = backupIME;
}
@@ -71,7 +71,7 @@ static void sub_81D4DB8(struct Unk03006370 *arg0)
static u8 sub_81D4DE8(struct Unk03006370 *arg0)
{
u8 var0 = 0;
- arg0->unk0 = sub_81D3D70(1, arg0->unk4, arg0->unk8, NULL);
+ arg0->unk0 = EReaderHandleTransfer(1, arg0->unk4, arg0->unk8, NULL);
if ((arg0->unk0 & 0x13) == 0x10)
var0 = 1;
diff --git a/src/event_obj_lock.c b/src/event_obj_lock.c
index 566b4931d..22a29fd5d 100644
--- a/src/event_obj_lock.c
+++ b/src/event_obj_lock.c
@@ -92,7 +92,7 @@ void ScriptUnfreezeEventObjects(void)
{
u8 playerObjectId = GetEventObjectIdByLocalIdAndMap(EVENT_OBJ_ID_PLAYER, 0, 0);
EventObjectClearHeldMovementIfFinished(&gEventObjects[playerObjectId]);
- sub_80D338C();
+ ScriptMovement_UnfreezeEventObjects();
UnfreezeEventObjects();
}
@@ -104,7 +104,7 @@ void sub_8098524(void)
EventObjectClearHeldMovementIfFinished(&gEventObjects[gSelectedEventObject]);
playerObjectId = GetEventObjectIdByLocalIdAndMap(EVENT_OBJ_ID_PLAYER, 0, 0);
EventObjectClearHeldMovementIfFinished(&gEventObjects[playerObjectId]);
- sub_80D338C();
+ ScriptMovement_UnfreezeEventObjects();
UnfreezeEventObjects();
}
diff --git a/src/field_specials.c b/src/field_specials.c
index efe77bd70..f20e38c8b 100644
--- a/src/field_specials.c
+++ b/src/field_specials.c
@@ -35,6 +35,7 @@
#include "rtc.h"
#include "script.h"
#include "script_menu.h"
+#include "slot_machine.h"
#include "sound.h"
#include "starter_choose.h"
#include "string_util.h"
@@ -44,11 +45,17 @@
#include "tv.h"
#include "wallclock.h"
#include "window.h"
+#include "constants/battle_frontier.h"
+#include "constants/decorations.h"
#include "constants/event_objects.h"
+#include "constants/event_object_movement_constants.h"
#include "constants/field_effects.h"
+#include "constants/field_specials.h"
#include "constants/items.h"
+#include "constants/heal_locations.h"
#include "constants/map_types.h"
#include "constants/maps.h"
+#include "constants/script_menu.h"
#include "constants/songs.h"
#include "constants/species.h"
#include "constants/moves.h"
@@ -60,29 +67,28 @@
EWRAM_DATA bool8 gBikeCyclingChallenge = FALSE;
EWRAM_DATA u8 gBikeCollisions = 0;
-static EWRAM_DATA u32 gBikeCyclingTimer = 0;
-static EWRAM_DATA u8 gUnknown_0203AB5C = 0;
+static EWRAM_DATA u32 sBikeCyclingTimer = 0;
+static EWRAM_DATA u8 sUnknown_0203AB5C = 0;
static EWRAM_DATA u8 sPetalburgGymSlidingDoorFrameCounter = 0;
-static EWRAM_DATA u8 gUnknown_0203AB5E = 0;
-static EWRAM_DATA u16 gUnknown_0203AB60 = 0;
-static EWRAM_DATA u16 gUnknown_0203AB62 = 0;
-static EWRAM_DATA struct ListMenuItem *gUnknown_0203AB64 = NULL;
-static EWRAM_DATA u16 gUnknown_0203AB68 = 0;
-static EWRAM_DATA u16 gUnknown_0203AB6A = 0;
-static EWRAM_DATA u8 gUnknown_0203AB6C = 0;
-static EWRAM_DATA u8 gUnknown_0203AB6D = 0;
-static EWRAM_DATA u8 gUnknown_0203AB6E = 0;
-static EWRAM_DATA u8 gUnknown_0203AB6F = 0;
-static EWRAM_DATA u32 gUnknown_0203AB70 = 0;
-
-struct ListMenuTemplate gUnknown_030061D0;
+static EWRAM_DATA u8 sTutorMoveAndElevatorWindowId = 0;
+static EWRAM_DATA u16 sLilycoveDeptStore_NeverRead = 0;
+static EWRAM_DATA u16 sLilycoveDeptStore_DefaultFloorChoice = 0;
+static EWRAM_DATA struct ListMenuItem *sScrollableMultichoice_ListMenuItem = NULL;
+static EWRAM_DATA u16 sScrollableMultichoice_ScrollOffset = 0;
+static EWRAM_DATA u16 sFrontierExchangeCorner_NeverRead = 0;
+static EWRAM_DATA u8 sScrollableMultichoice_ItemSpriteId = 0;
+static EWRAM_DATA u8 sBattlePointsWindowId = 0;
+static EWRAM_DATA u8 sFrontierExchangeCorner_ItemIconWindowId = 0;
+static EWRAM_DATA u8 sPCBoxToSendMon = 0;
+static EWRAM_DATA u32 sUnknown_0203AB70 = 0;
+
+struct ListMenuTemplate gScrollableMultichoice_ListMenuTemplate;
extern const u16 gEventObjectPalette8[];
extern const u16 gEventObjectPalette17[];
extern const u16 gEventObjectPalette33[];
extern const u16 gEventObjectPalette34[];
-
void UpdateMovedLilycoveFanClubMembers(void);
void sub_813BF60(void);
u16 GetNumMovedLilycoveFanClubMembers(void);
@@ -99,23 +105,23 @@ static void Task_LotteryCornerComputerEffect(u8);
static void LotteryCornerComputerEffect(struct Task *);
static void sub_81395BC(u8 taskId);
static void sub_8139620(u8 taskId);
-static void sub_8139AF4(u8 taskId);
-static void sub_8139C2C(u16 a1, u8 a2);
-static void MoveElevatorWindowLights(u8 taskId);
-static void sub_813A2DC(u8 taskId);
-static void sub_813AA60(u16 a0, u16 a1);
-static void sub_813ACE8(u8 a0, u16 a1);
-static void sub_813A42C(void);
-static void sub_813A4EC(u8 taskId);
-static void sub_813A694(u8 taskId);
-static void sub_813A46C(s32 itemIndex, bool8 onInit, struct ListMenu *list);
-static void sub_813AC44(u16 a0, u16 a1);
-static void sub_813AD34(u8 a0, u16 a1);
-static void sub_813A570(u8 taskId);
-static void sub_813A738(u8 taskId);
+static void Task_MoveElevator(u8 taskId);
+static void MoveElevatorWindowLights(u16 floorDelta, bool8 descending);
+static void Task_MoveElevatorWindowLights(u8 taskId);
+static void Task_ShowScrollableMultichoice(u8 taskId);
+static void FillFrontierExchangeCornerWindowAndItemIcon(u16 menu, u16 selection);
+static void ShowBattleFrontierTutorWindow(u8 menu, u16 selection);
+static void InitScrollableMultichoice(void);
+static void ScrollableMultichoice_ProcessInput(u8 taskId);
+static void ScrollableMultichoice_UpdateScrollArrows(u8 taskId);
+static void ScrollableMultichoice_MoveCursor(s32 itemIndex, bool8 onInit, struct ListMenu *list);
+static void HideFrontierExchangeCornerItemIcon(u16 menu, u16 unused);
+static void ShowBattleFrontierTutorMoveDescription(u8 menu, u16 selection);
+static void CloseScrollableMultichoice(u8 taskId);
+static void ScrollableMultichoice_RemoveScrollArrows(u8 taskId);
static void sub_813A600(u8 taskId);
static void sub_813A664(u8 taskId);
-static void sub_813ABD4(u16 a0);
+static void ShowFrontierExchangeCornerItemIcon(u16 item);
static void Task_DeoxysRockInteraction(u8 taskId);
static void ChangeDeoxysRockLevel(u8 a0);
static void WaitForDeoxysRockMovement(u8 taskId);
@@ -144,14 +150,14 @@ void ResetCyclingRoadChallengeData(void)
{
gBikeCyclingChallenge = FALSE;
gBikeCollisions = 0;
- gBikeCyclingTimer = 0;
+ sBikeCyclingTimer = 0;
}
void Special_BeginCyclingRoadChallenge(void)
{
gBikeCyclingChallenge = TRUE;
gBikeCollisions = 0;
- gBikeCyclingTimer = gMain.vblankCounter1;
+ sBikeCyclingTimer = gMain.vblankCounter1;
}
u16 GetPlayerAvatarBike(void)
@@ -237,7 +243,7 @@ static void DetermineCyclingRoadResults(u32 numFrames, u8 numBikeCollisions)
}
void FinishCyclingRoadChallenge(void) {
- const u32 numFrames = gMain.vblankCounter1 - gBikeCyclingTimer;
+ const u32 numFrames = gMain.vblankCounter1 - sBikeCyclingTimer;
DetermineCyclingRoadResults(numFrames, gBikeCollisions);
RecordCyclingRoadResults(numFrames, gBikeCollisions);
@@ -310,16 +316,16 @@ u8 GetSSTidalLocation(s8 *mapGroup, s8 *mapNum, s16 *x, s16 *y)
{
case 1:
case 8:
- return 1;
+ return SS_TIDAL_LOCATION_SLATEPORT;
case 3:
case 9:
- return 4;
+ return SS_TIDAL_LOCATION_ROUTE131;
case 4:
case 5:
- return 2;
+ return SS_TIDAL_LOCATION_LILYCOVE;
case 6:
case 10:
- return 3;
+ return SS_TIDAL_LOCATION_ROUTE124;
case 2:
if (*varCruiseStepCount < 60)
{
@@ -356,7 +362,7 @@ u8 GetSSTidalLocation(s8 *mapGroup, s8 *mapNum, s16 *x, s16 *y)
}
*mapGroup = MAP_GROUP(ROUTE132);
*y = 20;
- return 0;
+ return SS_TIDAL_LOCATION_OTHER;
}
bool32 ShouldDoWallyCall(void)
@@ -419,10 +425,10 @@ bool32 ShouldDoScottCall(void)
{
switch (gMapHeader.mapType)
{
- case 1:
- case 2:
- case 3:
- case 6:
+ case MAP_TYPE_TOWN:
+ case MAP_TYPE_CITY:
+ case MAP_TYPE_ROUTE:
+ case MAP_TYPE_OCEAN_ROUTE:
if (++(*GetVarPointer(VAR_SCOTT_CALL_STEP_COUNTER)) < 10)
{
return FALSE;
@@ -446,10 +452,10 @@ bool32 ShouldDoRoxanneCall(void)
{
switch (gMapHeader.mapType)
{
- case 1:
- case 2:
- case 3:
- case 6:
+ case MAP_TYPE_TOWN:
+ case MAP_TYPE_CITY:
+ case MAP_TYPE_ROUTE:
+ case MAP_TYPE_OCEAN_ROUTE:
if (++(*GetVarPointer(VAR_ROXANNE_CALL_STEP_COUNTER)) < 250)
{
return FALSE;
@@ -473,10 +479,10 @@ bool32 ShouldDoRivalRayquazaCall(void)
{
switch (gMapHeader.mapType)
{
- case 1:
- case 2:
- case 3:
- case 6:
+ case MAP_TYPE_TOWN:
+ case MAP_TYPE_CITY:
+ case MAP_TYPE_ROUTE:
+ case MAP_TYPE_OCEAN_ROUTE:
if (++(*GetVarPointer(VAR_RIVAL_RAYQUAZA_CALL_STEP_COUNTER)) < 250)
{
return FALSE;
@@ -516,8 +522,13 @@ void SpawnLinkPartnerEventObject(void)
u8 j = 0;
s16 x = 0;
s16 y = 0;
- u8 gUnknown_085B2B5C[] = {7, 9, 8, 10};
- s8 gUnknown_085B2B60[][2] = {
+ u8 movementTypes[] = {
+ MOVEMENT_TYPE_FACE_UP,
+ MOVEMENT_TYPE_FACE_LEFT,
+ MOVEMENT_TYPE_FACE_DOWN,
+ MOVEMENT_TYPE_FACE_RIGHT
+ };
+ s8 coordOffsets[][2] = {
{ 0, 1},
{ 1, 0},
{ 0, -1},
@@ -577,10 +588,10 @@ void SpawnLinkPartnerEventObject(void)
linkSpriteId = EVENT_OBJ_GFX_RIVAL_MAY_NORMAL;
break;
}
- SpawnSpecialEventObjectParameterized(linkSpriteId, gUnknown_085B2B5C[j], 0xf0 - i, gUnknown_085B2B60[j][0] + x + 7, gUnknown_085B2B60[j][1] + y + 7, 0);
- LoadLinkPartnerEventObjectSpritePalette(linkSpriteId, 0xf0 - i, i);
+ SpawnSpecialEventObjectParameterized(linkSpriteId, movementTypes[j], 240 - i, coordOffsets[j][0] + x + 7, coordOffsets[j][1] + y + 7, 0);
+ LoadLinkPartnerEventObjectSpritePalette(linkSpriteId, 240 - i, i);
j++;
- if (j == 4)
+ if (j == MAX_LINK_PLAYERS)
{
j = 0;
}
@@ -624,7 +635,8 @@ static void LoadLinkPartnerEventObjectSpritePalette(u8 graphicsId, u8 localEvent
}
}
-static const struct UCoords8 sMauvilleGymSwitchCoords[] = {
+static const struct UCoords8 sMauvilleGymSwitchCoords[] =
+{
{ 7, 22},
{11, 19},
{10, 16},
@@ -814,7 +826,7 @@ static const u16 sPetalburgGymSlidingDoorMetatiles[] = {
void PetalburgGymSpecial1(void)
{
- gUnknown_0203AB5C = 0;
+ sUnknown_0203AB5C = 0;
sPetalburgGymSlidingDoorFrameCounter = 0;
PlaySE(SE_KI_GASYAN);
CreateTask(Task_PetalburgGym, 8);
@@ -822,10 +834,10 @@ void PetalburgGymSpecial1(void)
static void Task_PetalburgGym(u8 taskId)
{
- if (gUnknown_085B2B78[sPetalburgGymSlidingDoorFrameCounter] == gUnknown_0203AB5C)
+ if (gUnknown_085B2B78[sPetalburgGymSlidingDoorFrameCounter] == sUnknown_0203AB5C)
{
PetalburgGymFunc(gSpecialVar_0x8004, sPetalburgGymSlidingDoorMetatiles[sPetalburgGymSlidingDoorFrameCounter]);
- gUnknown_0203AB5C = 0;
+ sUnknown_0203AB5C = 0;
if ((++sPetalburgGymSlidingDoorFrameCounter) == ARRAY_COUNT(sPetalburgGymSlidingDoorMetatiles))
{
DestroyTask(taskId);
@@ -834,7 +846,7 @@ static void Task_PetalburgGym(u8 taskId)
}
else
{
- gUnknown_0203AB5C++;
+ sUnknown_0203AB5C++;
}
}
@@ -1077,36 +1089,35 @@ static void PCTurnOnEffect_0(struct Task *task)
task->data[3]++;
}
-// enum pc location,
-static void PCTurnOnEffect_1(s16 flag, s8 dx, s8 dy)
+static void PCTurnOnEffect_1(s16 isPcTurnedOn, s8 dx, s8 dy)
{
u16 tileId = 0;
- if (flag != 0)
+ if (isPcTurnedOn)
{
- if (gSpecialVar_0x8004 == 0)
+ if (gSpecialVar_0x8004 == PC_LOCATION_OTHER)
{
tileId = METATILE_ID(Building, PC_Off);
}
- else if (gSpecialVar_0x8004 == 1)
+ else if (gSpecialVar_0x8004 == PC_LOCATION_BRENDANS_HOUSE)
{
tileId = METATILE_ID(BrendansMaysHouse, BrendanPC_Off);
}
- else if (gSpecialVar_0x8004 == 2)
+ else if (gSpecialVar_0x8004 == PC_LOCATION_MAYS_HOUSE)
{
tileId = METATILE_ID(BrendansMaysHouse, MayPC_Off);
}
}
else
{
- if (gSpecialVar_0x8004 == 0)
+ if (gSpecialVar_0x8004 == PC_LOCATION_OTHER)
{
tileId = METATILE_ID(Building, PC_On);
}
- else if (gSpecialVar_0x8004 == 1)
+ else if (gSpecialVar_0x8004 == PC_LOCATION_BRENDANS_HOUSE)
{
tileId = METATILE_ID(BrendansMaysHouse, BrendanPC_On);
}
- else if (gSpecialVar_0x8004 == 2)
+ else if (gSpecialVar_0x8004 == PC_LOCATION_MAYS_HOUSE)
{
tileId = METATILE_ID(BrendansMaysHouse, MayPC_On);
}
@@ -1294,7 +1305,7 @@ void IsGrassTypeInParty(void)
void SpawnCameraObject(void)
{
- u8 obj = SpawnSpecialEventObjectParameterized(EVENT_OBJ_GFX_BOY_1, 8, EVENT_OBJ_ID_CAMERA, gSaveBlock1Ptr->pos.x + 7, gSaveBlock1Ptr->pos.y + 7, 3);
+ u8 obj = SpawnSpecialEventObjectParameterized(EVENT_OBJ_GFX_BOY_1, MOVEMENT_TYPE_FACE_DOWN, EVENT_OBJ_ID_CAMERA, gSaveBlock1Ptr->pos.x + 7, gSaveBlock1Ptr->pos.y + 7, 3);
gEventObjects[obj].invisible = TRUE;
CameraObjectSetFollowedObjectId(gEventObjects[obj].spriteId);
}
@@ -1327,16 +1338,16 @@ void BufferEReaderTrainerName(void)
u16 GetSlotMachineId(void)
{
- static const u8 gUnknown_085B2B88[] = {12, 2, 4, 5, 1, 8, 7, 11, 3, 10, 9, 6};
- static const u8 gUnknown_085B2B94[] = {0, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 5};
- static const u8 gUnknown_085B2BA0[] = {3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5};
+ static const u8 sSlotMachineRandomSeeds[] = {12, 2, 4, 5, 1, 8, 7, 11, 3, 10, 9, 6};
+ static const u8 sSlotMachineIds[] = {0, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 5};
+ static const u8 sSlotMachineServiceDayIds[] = {3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5};
- u32 v0 = gSaveBlock1Ptr->easyChatPairs[0].unk0_0 + gSaveBlock1Ptr->easyChatPairs[0].unk2 + gUnknown_085B2B88[gSpecialVar_0x8004];
- if (GetPriceReduction(2))
+ u32 rnd = gSaveBlock1Ptr->easyChatPairs[0].unk0_0 + gSaveBlock1Ptr->easyChatPairs[0].unk2 + sSlotMachineRandomSeeds[gSpecialVar_0x8004];
+ if (GetPriceReduction(POKENEWS_GAME_CORNER))
{
- return gUnknown_085B2BA0[v0 % 12];
+ return sSlotMachineServiceDayIds[rnd % SLOT_MACHINE_COUNT];
}
- return gUnknown_085B2B94[v0 % 12];
+ return sSlotMachineIds[rnd % SLOT_MACHINE_COUNT];
}
bool8 FoundAbandonedShipRoom1Key(void)
@@ -1434,7 +1445,7 @@ u8 TryUpdateRusturfTunnelState(void)
return FALSE;
}
-void SetShoalItemFlag(u16 v0)
+void SetShoalItemFlag(u16 unused)
{
FlagSet(FLAG_SYS_SHOAL_ITEM);
}
@@ -1442,7 +1453,7 @@ void SetShoalItemFlag(u16 v0)
void PutZigzagoonInPlayerParty(void)
{
u16 monData;
- CreateMon(&gPlayerParty[0], SPECIES_ZIGZAGOON, 7, 0x20, FALSE, 0, FALSE, 0);
+ CreateMon(&gPlayerParty[0], SPECIES_ZIGZAGOON, 7, 32, FALSE, 0, OT_ID_PLAYER_ID, 0);
monData = TRUE;
SetMonData(&gPlayerParty[0], MON_DATA_ABILITY_NUM, &monData);
monData = MOVE_TACKLE;
@@ -1529,7 +1540,7 @@ void SetRoute119Weather(void)
{
if (IsMapTypeOutdoors(GetLastUsedWarpMapType()) != TRUE)
{
- SetSav1Weather(20);
+ SetSav1Weather(WEATHER_ROUTE119_CYCLE);
}
}
@@ -1537,7 +1548,7 @@ void SetRoute123Weather(void)
{
if (IsMapTypeOutdoors(GetLastUsedWarpMapType()) != TRUE)
{
- SetSav1Weather(21);
+ SetSav1Weather(WEATHER_ROUTE123_CYCLE);
}
}
@@ -1560,9 +1571,10 @@ u16 ScriptGetPartyMonSpecies(void)
return GetMonData(&gPlayerParty[gSpecialVar_0x8004], MON_DATA_SPECIES2, NULL);
}
-void nullsub_54(void)
+// Removed for Emerald
+void TryInitBattleTowerAwardManEventObject(void)
{
-
+ //TryInitLocalEventObject(6);
}
u16 GetDaysUntilPacifidlogTMAvailable(void)
@@ -1653,7 +1665,7 @@ u16 sub_813986C(void)
}
}
-bool8 sub_81398C0(void)
+bool8 BufferTMHMMoveName(void)
{
if (gSpecialVar_0x8004 >= ITEM_TM01 && gSpecialVar_0x8004 <= ITEM_HM08)
{
@@ -1664,14 +1676,14 @@ bool8 sub_81398C0(void)
return FALSE;
}
-bool8 sub_813990C(void)
+bool8 IsBadEggInParty(void)
{
u8 partyCount = CalculatePlayerPartyCount();
u8 i;
for (i = 0; i < partyCount; i++)
{
- if (GetMonData(&gPlayerParty[i], MON_DATA_SANITY_IS_BAD_EGG) == 1)
+ if (GetMonData(&gPlayerParty[i], MON_DATA_SANITY_IS_BAD_EGG) == TRUE)
return TRUE;
}
@@ -1693,7 +1705,8 @@ void sub_8139980(void)
SetCameraPanning(8, 0);
}
-const struct WindowTemplate gUnknown_085B2BAC = {
+const struct WindowTemplate gElevatorFloor_WindowTemplate =
+{
.bg = 0,
.tilemapLeft = 21,
.tilemapTop = 1,
@@ -1703,23 +1716,24 @@ const struct WindowTemplate gUnknown_085B2BAC = {
.baseBlock = 8,
};
-const u8 *const gElevatorFloorsTable[] = {
- gText_B4F,
- gText_B3F,
- gText_B2F,
- gText_B1F,
- gText_1F,
- gText_2F,
- gText_3F,
- gText_4F,
- gText_5F,
- gText_6F,
- gText_7F,
- gText_8F,
- gText_9F,
- gText_10F,
- gText_11F,
- gText_Rooftop
+const u8 *const gDeptStoreFloorNames[] =
+{
+ [DEPT_STORE_FLOORNUM_B4F] = gText_B4F,
+ [DEPT_STORE_FLOORNUM_B3F] = gText_B3F,
+ [DEPT_STORE_FLOORNUM_B2F] = gText_B2F,
+ [DEPT_STORE_FLOORNUM_B1F] = gText_B1F,
+ [DEPT_STORE_FLOORNUM_1F] = gText_1F,
+ [DEPT_STORE_FLOORNUM_2F] = gText_2F,
+ [DEPT_STORE_FLOORNUM_3F] = gText_3F,
+ [DEPT_STORE_FLOORNUM_4F] = gText_4F,
+ [DEPT_STORE_FLOORNUM_5F] = gText_5F,
+ [DEPT_STORE_FLOORNUM_6F] = gText_6F,
+ [DEPT_STORE_FLOORNUM_7F] = gText_7F,
+ [DEPT_STORE_FLOORNUM_8F] = gText_8F,
+ [DEPT_STORE_FLOORNUM_9F] = gText_9F,
+ [DEPT_STORE_FLOORNUM_10F] = gText_10F,
+ [DEPT_STORE_FLOORNUM_11F] = gText_11F,
+ [DEPT_STORE_FLOORNUM_ROOFTOP] = gText_Rooftop
};
static const u16 sElevatorWindowTiles_Ascending[][3] =
@@ -1760,104 +1774,105 @@ static const u16 sElevatorWindowTiles_Descending[][3] =
},
};
-void SetDepartmentStoreFloorVar(void)
+void SetDeptStoreFloor(void)
{
u8 deptStoreFloor;
switch (gSaveBlock1Ptr->dynamicWarp.mapNum)
{
case MAP_NUM(LILYCOVE_CITY_DEPARTMENT_STORE_1F):
- deptStoreFloor = 4;
+ deptStoreFloor = DEPT_STORE_FLOORNUM_1F;
break;
case MAP_NUM(LILYCOVE_CITY_DEPARTMENT_STORE_2F):
- deptStoreFloor = 5;
+ deptStoreFloor = DEPT_STORE_FLOORNUM_2F;
break;
case MAP_NUM(LILYCOVE_CITY_DEPARTMENT_STORE_3F):
- deptStoreFloor = 6;
+ deptStoreFloor = DEPT_STORE_FLOORNUM_3F;
break;
case MAP_NUM(LILYCOVE_CITY_DEPARTMENT_STORE_4F):
- deptStoreFloor = 7;
+ deptStoreFloor = DEPT_STORE_FLOORNUM_4F;
break;
case MAP_NUM(LILYCOVE_CITY_DEPARTMENT_STORE_5F):
- deptStoreFloor = 8;
+ deptStoreFloor = DEPT_STORE_FLOORNUM_5F;
break;
case MAP_NUM(LILYCOVE_CITY_DEPARTMENT_STORE_ROOFTOP):
- deptStoreFloor = 15;
+ deptStoreFloor = DEPT_STORE_FLOORNUM_ROOFTOP;
break;
default:
- deptStoreFloor = 4;
+ deptStoreFloor = DEPT_STORE_FLOORNUM_1F;
break;
}
VarSet(VAR_DEPT_STORE_FLOOR, deptStoreFloor);
}
-u16 sub_81399F4(void)
+u16 GetDeptStoreDefaultFloorChoice(void)
{
- gUnknown_0203AB60 = 0;
- gUnknown_0203AB62 = 0;
+ sLilycoveDeptStore_NeverRead = 0;
+ sLilycoveDeptStore_DefaultFloorChoice = 0;
if (gSaveBlock1Ptr->dynamicWarp.mapGroup == MAP_GROUP(LILYCOVE_CITY_DEPARTMENT_STORE_1F))
{
switch (gSaveBlock1Ptr->dynamicWarp.mapNum)
{
case MAP_NUM(LILYCOVE_CITY_DEPARTMENT_STORE_5F):
- gUnknown_0203AB60 = 0;
- gUnknown_0203AB62 = 0;
+ sLilycoveDeptStore_NeverRead = 0;
+ sLilycoveDeptStore_DefaultFloorChoice = 0;
break;
case MAP_NUM(LILYCOVE_CITY_DEPARTMENT_STORE_4F):
- gUnknown_0203AB60 = 0;
- gUnknown_0203AB62 = 1;
+ sLilycoveDeptStore_NeverRead = 0;
+ sLilycoveDeptStore_DefaultFloorChoice = 1;
break;
case MAP_NUM(LILYCOVE_CITY_DEPARTMENT_STORE_3F):
- gUnknown_0203AB60 = 0;
- gUnknown_0203AB62 = 2;
+ sLilycoveDeptStore_NeverRead = 0;
+ sLilycoveDeptStore_DefaultFloorChoice = 2;
break;
case MAP_NUM(LILYCOVE_CITY_DEPARTMENT_STORE_2F):
- gUnknown_0203AB60 = 0;
- gUnknown_0203AB62 = 3;
+ sLilycoveDeptStore_NeverRead = 0;
+ sLilycoveDeptStore_DefaultFloorChoice = 3;
break;
case MAP_NUM(LILYCOVE_CITY_DEPARTMENT_STORE_1F):
- gUnknown_0203AB60 = 0;
- gUnknown_0203AB62 = 4;
+ sLilycoveDeptStore_NeverRead = 0;
+ sLilycoveDeptStore_DefaultFloorChoice = 4;
break;
}
}
- return gUnknown_0203AB62;
+ return sLilycoveDeptStore_DefaultFloorChoice;
}
-void ShakeScreenInElevator(void)
+void MoveElevator(void)
{
- static const u8 gUnknown_085B2C18[] = { 0x08, 0x10, 0x18, 0x20, 0x26, 0x2e, 0x34, 0x38, 0x39 };
+ static const u8 sElevatorTripLength[] = { 8, 16, 24, 32, 38, 46, 52, 56, 57 };
- s16 *data = gTasks[CreateTask(sub_8139AF4, 9)].data;
+ s16 *data = gTasks[CreateTask(Task_MoveElevator, 9)].data;
u16 floorDelta;
data[1] = 0;
data[2] = 0;
data[4] = 1;
+ // descending
if (gSpecialVar_0x8005 > gSpecialVar_0x8006)
{
floorDelta = gSpecialVar_0x8005 - gSpecialVar_0x8006;
- data[6] = 1;
+ data[6] = TRUE;
}
else
{
floorDelta = gSpecialVar_0x8006 - gSpecialVar_0x8005;
- data[6] = 0;
+ data[6] = FALSE;
}
if (floorDelta > 8)
floorDelta = 8;
- data[5] = gUnknown_085B2C18[floorDelta];
+ data[5] = sElevatorTripLength[floorDelta];
SetCameraPanningCallback(NULL);
- sub_8139C2C(floorDelta, data[6]);
+ MoveElevatorWindowLights(floorDelta, data[6]);
PlaySE(SE_ELEBETA);
}
-static void sub_8139AF4(u8 taskId)
+static void Task_MoveElevator(u8 taskId)
{
s16 *data = gTasks[taskId].data;
data[1]++;
@@ -1867,6 +1882,8 @@ static void sub_8139AF4(u8 taskId)
data[2]++;
data[4] = -data[4];
SetCameraPanning(0, data[4]);
+
+ // arrived at floor
if (data[2] == data[5])
{
PlaySE(SE_PINPON);
@@ -1877,44 +1894,44 @@ static void sub_8139AF4(u8 taskId)
}
}
-void sub_8139B60(void)
+void ShowDeptStoreElevatorFloorSelect(void)
{
int xPos;
- gUnknown_0203AB5E = AddWindow(&gUnknown_085B2BAC);
- SetStandardWindowBorderStyle(gUnknown_0203AB5E, 0);
+ sTutorMoveAndElevatorWindowId = AddWindow(&gElevatorFloor_WindowTemplate);
+ SetStandardWindowBorderStyle(sTutorMoveAndElevatorWindowId, 0);
xPos = GetStringCenterAlignXOffset(1, gText_ElevatorNowOn, 64);
- AddTextPrinterParameterized(gUnknown_0203AB5E, 1, gText_ElevatorNowOn, xPos, 1, TEXT_SPEED_FF, NULL);
+ AddTextPrinterParameterized(sTutorMoveAndElevatorWindowId, 1, gText_ElevatorNowOn, xPos, 1, TEXT_SPEED_FF, NULL);
- xPos = GetStringCenterAlignXOffset(1, gElevatorFloorsTable[gSpecialVar_0x8005], 64);
- AddTextPrinterParameterized(gUnknown_0203AB5E, 1, gElevatorFloorsTable[gSpecialVar_0x8005], xPos, 17, TEXT_SPEED_FF, NULL);
+ xPos = GetStringCenterAlignXOffset(1, gDeptStoreFloorNames[gSpecialVar_0x8005], 64);
+ AddTextPrinterParameterized(sTutorMoveAndElevatorWindowId, 1, gDeptStoreFloorNames[gSpecialVar_0x8005], xPos, 17, TEXT_SPEED_FF, NULL);
- PutWindowTilemap(gUnknown_0203AB5E);
- CopyWindowToVram(gUnknown_0203AB5E, 3);
+ PutWindowTilemap(sTutorMoveAndElevatorWindowId);
+ CopyWindowToVram(sTutorMoveAndElevatorWindowId, 3);
}
-void sub_8139C10(void)
+void CloseDeptStoreElevatorWindow(void)
{
- ClearStdWindowAndFrameToTransparent(gUnknown_0203AB5E, TRUE);
- RemoveWindow(gUnknown_0203AB5E);
+ ClearStdWindowAndFrameToTransparent(sTutorMoveAndElevatorWindowId, TRUE);
+ RemoveWindow(sTutorMoveAndElevatorWindowId);
}
-static void sub_8139C2C(u16 a1, bool8 descending)
+static void MoveElevatorWindowLights(u16 floorDelta, bool8 descending)
{
- static const u8 gUnknown_085B2C21[] = { 0x03, 0x06, 0x09, 0x0c, 0x0f, 0x12, 0x15, 0x18, 0x1b };
+ static const u8 sElevatorLightCycles[] = { 3, 6, 9, 12, 15, 18, 21, 24, 27 };
- if (FuncIsActiveTask(MoveElevatorWindowLights) != TRUE)
+ if (FuncIsActiveTask(Task_MoveElevatorWindowLights) != TRUE)
{
- u8 taskId = CreateTask(MoveElevatorWindowLights, 8);
+ u8 taskId = CreateTask(Task_MoveElevatorWindowLights, 8);
gTasks[taskId].data[0] = 0;
gTasks[taskId].data[1] = 0;
gTasks[taskId].data[2] = descending;
- gTasks[taskId].data[3] = gUnknown_085B2C21[a1];
+ gTasks[taskId].data[3] = sElevatorLightCycles[floorDelta];
}
}
-static void MoveElevatorWindowLights(u8 taskId)
+static void Task_MoveElevatorWindowLights(u8 taskId)
{
u8 x, y;
s16 *data = gTasks[taskId].data;
@@ -1922,6 +1939,8 @@ static void MoveElevatorWindowLights(u8 taskId)
if (data[1] == 6)
{
data[0]++;
+
+ // ascending
if (data[2] == FALSE)
{
for (y = 0; y < 3; y++)
@@ -1932,6 +1951,7 @@ static void MoveElevatorWindowLights(u8 taskId)
}
}
}
+ // descending
else
{
for (y = 0; y < 3; y++)
@@ -1952,7 +1972,7 @@ static void MoveElevatorWindowLights(u8 taskId)
data[1]++;
}
-void sub_8139D98(void)
+void BufferVarsForIVRater(void)
{
u8 i;
u32 ivStorage[NUM_STATS];
@@ -1993,16 +2013,37 @@ void sub_8139D98(void)
}
}
-bool8 warp0_in_pokecenter(void)
-{
- static const u16 gUnknown_085B2C2A[] = { 0x0202, 0x0301, 0x0405, 0x0504, 0x0604, 0x0700, 0x0804, 0x090b, 0x0a05, 0x0b05, 0x0c02, 0x0d06, 0x0e03, 0x0f02, 0x100c, 0x100a, 0x1a35, 0x193c, 0xFFFF };
+bool8 UsedPokemonCenterWarp(void)
+{
+ static const u16 sPokemonCenters[] =
+ {
+ MAP_OLDALE_TOWN_POKEMON_CENTER_1F,
+ MAP_DEWFORD_TOWN_POKEMON_CENTER_1F,
+ MAP_LAVARIDGE_TOWN_POKEMON_CENTER_1F,
+ MAP_FALLARBOR_TOWN_POKEMON_CENTER_1F,
+ MAP_VERDANTURF_TOWN_POKEMON_CENTER_1F,
+ MAP_PACIFIDLOG_TOWN_POKEMON_CENTER_1F,
+ MAP_PETALBURG_CITY_POKEMON_CENTER_1F,
+ MAP_SLATEPORT_CITY_POKEMON_CENTER_1F,
+ MAP_MAUVILLE_CITY_POKEMON_CENTER_1F,
+ MAP_RUSTBORO_CITY_POKEMON_CENTER_1F,
+ MAP_FORTREE_CITY_POKEMON_CENTER_1F,
+ MAP_LILYCOVE_CITY_POKEMON_CENTER_1F,
+ MAP_MOSSDEEP_CITY_POKEMON_CENTER_1F,
+ MAP_SOOTOPOLIS_CITY_POKEMON_CENTER_1F,
+ MAP_EVER_GRANDE_CITY_POKEMON_CENTER_1F,
+ MAP_EVER_GRANDE_CITY_POKEMON_LEAGUE_1F,
+ MAP_BATTLE_FRONTIER_POKEMON_CENTER_1F,
+ MAP_UNION_ROOM,
+ 0xFFFF
+ };
int i;
u16 map = (gLastUsedWarp.mapGroup << 8) + gLastUsedWarp.mapNum;
- for (i = 0; gUnknown_085B2C2A[i] != 0xFFFF; i++)
+ for (i = 0; sPokemonCenters[i] != 0xFFFF; i++)
{
- if (gUnknown_085B2C2A[i] == map)
+ if (sPokemonCenters[i] == map)
return TRUE;
}
@@ -2018,130 +2059,191 @@ bool32 sub_8139ED0(void)
return TRUE;
}
-void UpdateFrontierManiac(u16 a0)
+void UpdateFrontierManiac(u16 daysSince)
{
u16 *var = GetVarPointer(VAR_FRONTIER_MANIAC_FACILITY);
- *var += a0;
- *var %= 10;
-}
-
-void sub_8139F20(void)
-{
- static const u8 *const gUnknown_085B2C50[][3] = {
- { BattleFrontier_Lounge2_Text_260971, BattleFrontier_Lounge2_Text_260A1E, BattleFrontier_Lounge2_Text_260AE7 },
- { BattleFrontier_Lounge2_Text_2619AC, BattleFrontier_Lounge2_Text_261A91, BattleFrontier_Lounge2_Text_261B0C },
- { BattleFrontier_Lounge2_Text_261B95, BattleFrontier_Lounge2_Text_261B95, BattleFrontier_Lounge2_Text_261B95 },
- { BattleFrontier_Lounge2_Text_261C1A, BattleFrontier_Lounge2_Text_261C1A, BattleFrontier_Lounge2_Text_261C1A },
- { BattleFrontier_Lounge2_Text_260BC4, BattleFrontier_Lounge2_Text_260C6D, BattleFrontier_Lounge2_Text_260D3A },
- { BattleFrontier_Lounge2_Text_260E1E, BattleFrontier_Lounge2_Text_260EC7, BattleFrontier_Lounge2_Text_260F74 },
- { BattleFrontier_Lounge2_Text_2614E6, BattleFrontier_Lounge2_Text_261591, BattleFrontier_Lounge2_Text_26166F },
- { BattleFrontier_Lounge2_Text_261282, BattleFrontier_Lounge2_Text_261329, BattleFrontier_Lounge2_Text_261403 },
- { BattleFrontier_Lounge2_Text_261026, BattleFrontier_Lounge2_Text_2610CC, BattleFrontier_Lounge2_Text_261194 },
- { BattleFrontier_Lounge2_Text_26174D, BattleFrontier_Lounge2_Text_2617F9, BattleFrontier_Lounge2_Text_2618C4 },
+ *var += daysSince;
+ *var %= FRONTIER_MANIAC_FACILITY_COUNT;
+}
+
+void ShowFrontierManiacMessage(void)
+{
+ static const u8 *const sFrontierManiacMessages[][FRONTIER_MANIAC_MESSAGE_COUNT] =
+ {
+ [FRONTIER_MANIAC_BATTLE_TOWER_SINGLES] =
+ {
+ BattleFrontier_Lounge2_Text_260971,
+ BattleFrontier_Lounge2_Text_260A1E,
+ BattleFrontier_Lounge2_Text_260AE7
+ },
+ [FRONTIER_MANIAC_BATTLE_TOWER_DOUBLES] =
+ {
+ BattleFrontier_Lounge2_Text_2619AC,
+ BattleFrontier_Lounge2_Text_261A91,
+ BattleFrontier_Lounge2_Text_261B0C
+ },
+ [FRONTIER_MANIAC_BATTLE_TOWER_MULTIS] =
+ {
+ BattleFrontier_Lounge2_Text_261B95,
+ BattleFrontier_Lounge2_Text_261B95,
+ BattleFrontier_Lounge2_Text_261B95
+ },
+ [FRONTIER_MANIAC_BATTLE_TOWER_LINK_MULTIS] =
+ {
+ BattleFrontier_Lounge2_Text_261C1A,
+ BattleFrontier_Lounge2_Text_261C1A,
+ BattleFrontier_Lounge2_Text_261C1A
+ },
+ [FRONTIER_MANIAC_BATTLE_DOME] =
+ {
+ BattleFrontier_Lounge2_Text_260BC4,
+ BattleFrontier_Lounge2_Text_260C6D,
+ BattleFrontier_Lounge2_Text_260D3A
+ },
+ [FRONTIER_MANIAC_BATTLE_FACTORY] =
+ {
+ BattleFrontier_Lounge2_Text_260E1E,
+ BattleFrontier_Lounge2_Text_260EC7,
+ BattleFrontier_Lounge2_Text_260F74
+ },
+ [FRONTIER_MANIAC_BATTLE_PALACE] =
+ {
+ BattleFrontier_Lounge2_Text_2614E6,
+ BattleFrontier_Lounge2_Text_261591,
+ BattleFrontier_Lounge2_Text_26166F
+ },
+ [FRONTIER_MANIAC_BATTLE_ARENA] =
+ {
+ BattleFrontier_Lounge2_Text_261282,
+ BattleFrontier_Lounge2_Text_261329,
+ BattleFrontier_Lounge2_Text_261403
+ },
+ [FRONTIER_MANIAC_BATTLE_PIKE] =
+ {
+ BattleFrontier_Lounge2_Text_261026,
+ BattleFrontier_Lounge2_Text_2610CC,
+ BattleFrontier_Lounge2_Text_261194
+ },
+ [FRONTIER_MANIAC_BATTLE_PYRAMID] =
+ {
+ BattleFrontier_Lounge2_Text_26174D,
+ BattleFrontier_Lounge2_Text_2617F9,
+ BattleFrontier_Lounge2_Text_2618C4
+ },
};
- static const u8 gUnknown_085B2CC8[][2] = {
- { 0x15, 0x38 },
- { 0x15, 0x23 },
- { 0xff, 0xff },
- { 0xff, 0xff },
- { 0x02, 0x04 },
- { 0x07, 0x15 },
- { 0x07, 0x15 },
- { 0x0e, 0x1c },
- { 0x0d, 0x70 },
- { 0x07, 0x38 }
+ static const u8 sFrontierManiacStreakThresholds[][FRONTIER_MANIAC_MESSAGE_COUNT - 1] =
+ {
+ [FRONTIER_MANIAC_BATTLE_TOWER_SINGLES] = { 21, 56 },
+ [FRONTIER_MANIAC_BATTLE_TOWER_DOUBLES] = { 21, 35 },
+ [FRONTIER_MANIAC_BATTLE_TOWER_MULTIS] = { 255, 255 },
+ [FRONTIER_MANIAC_BATTLE_TOWER_LINK_MULTIS] = { 255, 255 },
+ [FRONTIER_MANIAC_BATTLE_DOME] = { 2, 4 },
+ [FRONTIER_MANIAC_BATTLE_FACTORY] = { 7, 21 },
+ [FRONTIER_MANIAC_BATTLE_PALACE] = { 7, 21 },
+ [FRONTIER_MANIAC_BATTLE_ARENA] = { 14, 28 },
+ [FRONTIER_MANIAC_BATTLE_PIKE] = { 13, 112 }, //BUG: 112 (0x70) is probably a mistake; the Pike Queen is battled twice well before that
+ [FRONTIER_MANIAC_BATTLE_PYRAMID] = { 7, 56 }
};
u8 i;
- u16 unk = 0;
- u16 var = VarGet(VAR_FRONTIER_MANIAC_FACILITY);
- switch (var)
+ u16 winStreak = 0;
+ u16 facility = VarGet(VAR_FRONTIER_MANIAC_FACILITY);
+
+ switch (facility)
{
- case 0:
- case 1:
- case 2:
- case 3:
- if (gSaveBlock2Ptr->frontier.towerWinStreaks[var][0] >= gSaveBlock2Ptr->frontier.towerWinStreaks[var][1])
+ case FRONTIER_MANIAC_BATTLE_TOWER_SINGLES:
+ case FRONTIER_MANIAC_BATTLE_TOWER_DOUBLES:
+ case FRONTIER_MANIAC_BATTLE_TOWER_MULTIS:
+ case FRONTIER_MANIAC_BATTLE_TOWER_LINK_MULTIS:
+ if (gSaveBlock2Ptr->frontier.towerWinStreaks[facility][FRONTIER_LVL_50]
+ >= gSaveBlock2Ptr->frontier.towerWinStreaks[facility][FRONTIER_LVL_OPEN])
{
- unk = gSaveBlock2Ptr->frontier.towerWinStreaks[var][0];
+ winStreak = gSaveBlock2Ptr->frontier.towerWinStreaks[facility][FRONTIER_LVL_50];
}
else
{
- unk = gSaveBlock2Ptr->frontier.towerWinStreaks[var][1];
+ winStreak = gSaveBlock2Ptr->frontier.towerWinStreaks[facility][FRONTIER_LVL_OPEN];
}
break;
- case 4:
- if (gSaveBlock2Ptr->frontier.domeWinStreaks[0][0] >= gSaveBlock2Ptr->frontier.domeWinStreaks[0][1])
+ case FRONTIER_MANIAC_BATTLE_DOME:
+ if (gSaveBlock2Ptr->frontier.domeWinStreaks[FRONTIER_MODE_SINGLES][FRONTIER_LVL_50]
+ >= gSaveBlock2Ptr->frontier.domeWinStreaks[FRONTIER_MODE_SINGLES][FRONTIER_LVL_OPEN])
{
- unk = gSaveBlock2Ptr->frontier.domeWinStreaks[0][0];
+ winStreak = gSaveBlock2Ptr->frontier.domeWinStreaks[FRONTIER_MODE_SINGLES][FRONTIER_LVL_50];
}
else
{
- unk = gSaveBlock2Ptr->frontier.domeWinStreaks[0][1];
+ winStreak = gSaveBlock2Ptr->frontier.domeWinStreaks[FRONTIER_MODE_SINGLES][FRONTIER_LVL_OPEN];
}
break;
- case 5:
- if (gSaveBlock2Ptr->frontier.factoryWinStreaks[0][0] >= gSaveBlock2Ptr->frontier.factoryWinStreaks[0][1])
+ case FRONTIER_MANIAC_BATTLE_FACTORY:
+ if (gSaveBlock2Ptr->frontier.factoryWinStreaks[FRONTIER_MODE_SINGLES][FRONTIER_LVL_50]
+ >= gSaveBlock2Ptr->frontier.factoryWinStreaks[FRONTIER_MODE_SINGLES][FRONTIER_LVL_OPEN])
{
- unk = gSaveBlock2Ptr->frontier.factoryWinStreaks[0][0];
+ winStreak = gSaveBlock2Ptr->frontier.factoryWinStreaks[FRONTIER_MODE_SINGLES][FRONTIER_LVL_50];
}
else
{
- unk = gSaveBlock2Ptr->frontier.factoryWinStreaks[0][1];
+ winStreak = gSaveBlock2Ptr->frontier.factoryWinStreaks[FRONTIER_MODE_SINGLES][FRONTIER_LVL_OPEN];
}
break;
- case 6:
- if (gSaveBlock2Ptr->frontier.palaceWinStreaks[0][0] >= gSaveBlock2Ptr->frontier.palaceWinStreaks[0][1])
+ case FRONTIER_MANIAC_BATTLE_PALACE:
+ if (gSaveBlock2Ptr->frontier.palaceWinStreaks[FRONTIER_MODE_SINGLES][FRONTIER_LVL_50]
+ >= gSaveBlock2Ptr->frontier.palaceWinStreaks[FRONTIER_MODE_SINGLES][FRONTIER_LVL_OPEN])
{
- unk = gSaveBlock2Ptr->frontier.palaceWinStreaks[0][0];
+ winStreak = gSaveBlock2Ptr->frontier.palaceWinStreaks[FRONTIER_MODE_SINGLES][FRONTIER_LVL_50];
}
else
{
- unk = gSaveBlock2Ptr->frontier.palaceWinStreaks[0][1];
+ winStreak = gSaveBlock2Ptr->frontier.palaceWinStreaks[FRONTIER_MODE_SINGLES][FRONTIER_LVL_OPEN];
}
break;
- case 7:
- if (gSaveBlock2Ptr->frontier.arenaWinStreaks[0] >= gSaveBlock2Ptr->frontier.arenaWinStreaks[1])
+ case FRONTIER_MANIAC_BATTLE_ARENA:
+ if (gSaveBlock2Ptr->frontier.arenaWinStreaks[FRONTIER_LVL_50]
+ >= gSaveBlock2Ptr->frontier.arenaWinStreaks[FRONTIER_LVL_OPEN])
{
- unk = gSaveBlock2Ptr->frontier.arenaWinStreaks[0];
+ winStreak = gSaveBlock2Ptr->frontier.arenaWinStreaks[FRONTIER_LVL_50];
}
else
{
- unk = gSaveBlock2Ptr->frontier.arenaWinStreaks[1];
+ winStreak = gSaveBlock2Ptr->frontier.arenaWinStreaks[FRONTIER_LVL_OPEN];
}
break;
- case 8:
- if (gSaveBlock2Ptr->frontier.pikeWinStreaks[0] >= gSaveBlock2Ptr->frontier.pikeWinStreaks[1])
+ case FRONTIER_MANIAC_BATTLE_PIKE:
+ if (gSaveBlock2Ptr->frontier.pikeWinStreaks[FRONTIER_LVL_50]
+ >= gSaveBlock2Ptr->frontier.pikeWinStreaks[FRONTIER_LVL_OPEN])
{
- unk = gSaveBlock2Ptr->frontier.pikeWinStreaks[0];
+ winStreak = gSaveBlock2Ptr->frontier.pikeWinStreaks[FRONTIER_LVL_50];
}
else
{
- unk = gSaveBlock2Ptr->frontier.pikeWinStreaks[1];
+ winStreak = gSaveBlock2Ptr->frontier.pikeWinStreaks[FRONTIER_LVL_OPEN];
}
break;
- case 9:
- if (gSaveBlock2Ptr->frontier.pyramidWinStreaks[0] >= gSaveBlock2Ptr->frontier.pyramidWinStreaks[1])
+ case FRONTIER_MANIAC_BATTLE_PYRAMID:
+ if (gSaveBlock2Ptr->frontier.pyramidWinStreaks[FRONTIER_LVL_50]
+ >= gSaveBlock2Ptr->frontier.pyramidWinStreaks[FRONTIER_LVL_OPEN])
{
- unk = gSaveBlock2Ptr->frontier.pyramidWinStreaks[0];
+ winStreak = gSaveBlock2Ptr->frontier.pyramidWinStreaks[FRONTIER_LVL_50];
}
else
{
- unk = gSaveBlock2Ptr->frontier.pyramidWinStreaks[1];
+ winStreak = gSaveBlock2Ptr->frontier.pyramidWinStreaks[FRONTIER_LVL_OPEN];
}
break;
}
- for (i = 0; i < 2 && gUnknown_085B2CC8[var][i] < unk; i++);
+ for (i = 0; i < FRONTIER_MANIAC_MESSAGE_COUNT - 1 && sFrontierManiacStreakThresholds[facility][i] < winStreak; i++);
- ShowFieldMessage(gUnknown_085B2C50[var][i]);
+ ShowFieldMessage(sFrontierManiacMessages[facility][i]);
}
-void sub_813A080(void)
+// gSpecialVar_0x8005 and 0x8006 here are used by MoveElevator
+void BufferBattleTowerElevatorFloors(void)
{
- static const u16 gUnknown_085B2CDC[] = {
- 0x0007, 0x000e, 0x0015, 0x001c, 0x0023, 0x0031, 0x003f, 0x004d, 0x005b, 0x0000
+ static const u16 sBattleTowerStreakThresholds[] = {
+ 7, 14, 21, 28, 35, 49, 63, 77, 91, 0
};
u8 i;
@@ -2155,9 +2257,9 @@ void sub_813A080(void)
return;
}
- for (i = 0; i < 9; i++)
+ for (i = 0; i < ARRAY_COUNT(sBattleTowerStreakThresholds) - 1; i++)
{
- if (gUnknown_085B2CDC[i] > gSaveBlock2Ptr->frontier.towerWinStreaks[battleMode][lvlMode])
+ if (sBattleTowerStreakThresholds[i] > gSaveBlock2Ptr->frontier.towerWinStreaks[battleMode][lvlMode])
{
gSpecialVar_0x8005 = 4;
gSpecialVar_0x8006 = i + 5;
@@ -2169,161 +2271,166 @@ void sub_813A080(void)
gSpecialVar_0x8006 = 12;
}
-void sub_813A128(void)
-{
- u8 taskId = CreateTask(sub_813A2DC, 8);
+// Scrollable Multichoice task data defines
+#define tMaxItemsOnScreen data[0]
+#define tNumItems data[1]
+#define tLeft data[2]
+#define tTop data[3]
+#define tWidth data[4]
+#define tHeight data[5]
+#define tKeepOpenAfterSelect data[6]
+#define tScrollOffset data[7]
+#define tSelectedRow data[8]
+#define tScrollMultiId data[11]
+#define tScrollArrowId data[12]
+#define tWindowId data[13]
+#define tListTaskId data[14]
+#define tTaskId data[15]
+// data[9] and [10] unused
+
+void ShowScrollableMultichoice(void)
+{
+ u8 taskId = CreateTask(Task_ShowScrollableMultichoice, 8);
struct Task *task = &gTasks[taskId];
- task->data[11] = gSpecialVar_0x8004;
+ task->tScrollMultiId = gSpecialVar_0x8004;
switch (gSpecialVar_0x8004)
{
- case 0:
- task->data[0] = 1;
- task->data[1] = 1;
- task->data[2] = 1;
- task->data[3] = 1;
- task->data[4] = 1;
- task->data[5] = 1;
- task->data[6] = 0;
- task->data[15] = taskId;
+ case SCROLL_MULTI_NONE:
+ task->tMaxItemsOnScreen = 1;
+ task->tNumItems = 1;
+ task->tLeft = 1;
+ task->tTop = 1;
+ task->tWidth = 1;
+ task->tHeight = 1;
+ task->tKeepOpenAfterSelect = FALSE;
+ task->tTaskId = taskId;
break;
- case 1:
- task->data[0] = 5;
- task->data[1] = 8;
- task->data[2] = 1;
- task->data[3] = 1;
- task->data[4] = 9;
- task->data[5] = 10;
- task->data[6] = 0;
- task->data[15] = taskId;
+ case SCROLL_MULTI_GLASS_WORKSHOP_VENDOR:
+ task->tMaxItemsOnScreen = MAX_SCROLL_MULTI_ON_SCREEN - 1;
+ task->tNumItems = 8;
+ task->tLeft = 1;
+ task->tTop = 1;
+ task->tWidth = 9;
+ task->tHeight = 10;
+ task->tKeepOpenAfterSelect = FALSE;
+ task->tTaskId = taskId;
break;
- case 2:
- task->data[0] = 6;
- task->data[1] = 12;
- task->data[2] = 1;
- task->data[3] = 1;
- task->data[4] = 7;
- task->data[5] = 12;
- task->data[6] = 0;
- task->data[15] = taskId;
+ case SCROLL_MULTI_POKEMON_FAN_CLUB_RATER:
+ task->tMaxItemsOnScreen = MAX_SCROLL_MULTI_ON_SCREEN;
+ task->tNumItems = 12;
+ task->tLeft = 1;
+ task->tTop = 1;
+ task->tWidth = 7;
+ task->tHeight = 12;
+ task->tKeepOpenAfterSelect = FALSE;
+ task->tTaskId = taskId;
break;
- case 3:
- task->data[0] = 6;
- task->data[1] = 11;
- task->data[2] = 14;
- task->data[3] = 1;
- task->data[4] = 15;
- task->data[5] = 12;
- task->data[6] = 0;
- task->data[15] = taskId;
+ case SCROLL_MULTI_BF_EXCHANGE_CORNER_DECOR_VENDOR_1:
+ task->tMaxItemsOnScreen = MAX_SCROLL_MULTI_ON_SCREEN;
+ task->tNumItems = 11;
+ task->tLeft = 14;
+ task->tTop = 1;
+ task->tWidth = 15;
+ task->tHeight = 12;
+ task->tKeepOpenAfterSelect = FALSE;
+ task->tTaskId = taskId;
break;
- case 4:
- task->data[0] = 6;
- task->data[1] = 6;
- task->data[2] = 14;
- task->data[3] = 1;
- task->data[4] = 15;
- task->data[5] = 12;
- task->data[6] = 0;
- task->data[15] = taskId;
+ case SCROLL_MULTI_BF_EXCHANGE_CORNER_DECOR_VENDOR_2:
+ task->tMaxItemsOnScreen = MAX_SCROLL_MULTI_ON_SCREEN;
+ task->tNumItems = 6;
+ task->tLeft = 14;
+ task->tTop = 1;
+ task->tWidth = 15;
+ task->tHeight = 12;
+ task->tKeepOpenAfterSelect = FALSE;
+ task->tTaskId = taskId;
break;
- case 5:
- task->data[0] = 6;
- task->data[1] = 7;
- task->data[2] = 14;
- task->data[3] = 1;
- task->data[4] = 15;
- task->data[5] = 12;
- task->data[6] = 0;
- task->data[15] = taskId;
+ case SCROLL_MULTI_BF_EXCHANGE_CORNER_VITAMIN_VENDOR:
+ task->tMaxItemsOnScreen = MAX_SCROLL_MULTI_ON_SCREEN;
+ task->tNumItems = 7;
+ task->tLeft = 14;
+ task->tTop = 1;
+ task->tWidth = 15;
+ task->tHeight = 12;
+ task->tKeepOpenAfterSelect = FALSE;
+ task->tTaskId = taskId;
break;
- case 6:
- task->data[0] = 6;
- task->data[1] = 10;
- task->data[2] = 14;
- task->data[3] = 1;
- task->data[4] = 15;
- task->data[5] = 12;
- task->data[6] = 0;
- task->data[15] = taskId;
+ case SCROLL_MULTI_BF_EXCHANGE_CORNER_HOLD_ITEM_VENDOR:
+ task->tMaxItemsOnScreen = MAX_SCROLL_MULTI_ON_SCREEN;
+ task->tNumItems = 10;
+ task->tLeft = 14;
+ task->tTop = 1;
+ task->tWidth = 15;
+ task->tHeight = 12;
+ task->tKeepOpenAfterSelect = FALSE;
+ task->tTaskId = taskId;
break;
- case 7:
- task->data[0] = 6;
- task->data[1] = 12;
- task->data[2] = 15;
- task->data[3] = 1;
- task->data[4] = 14;
- task->data[5] = 12;
- task->data[6] = 0;
- task->data[15] = taskId;
+ case SCROLL_MULTI_BERRY_POWDER_VENDOR:
+ task->tMaxItemsOnScreen = MAX_SCROLL_MULTI_ON_SCREEN;
+ task->tNumItems = 12;
+ task->tLeft = 15;
+ task->tTop = 1;
+ task->tWidth = 14;
+ task->tHeight = 12;
+ task->tKeepOpenAfterSelect = FALSE;
+ task->tTaskId = taskId;
break;
- case 8:
- task->data[0] = 6;
- task->data[1] = 10;
- task->data[2] = 17;
- task->data[3] = 1;
- task->data[4] = 11;
- task->data[5] = 12;
- task->data[6] = 0;
- task->data[15] = taskId;
+ case SCROLL_MULTI_BF_RECEPTIONIST:
+ task->tMaxItemsOnScreen = MAX_SCROLL_MULTI_ON_SCREEN;
+ task->tNumItems = 10;
+ task->tLeft = 17;
+ task->tTop = 1;
+ task->tWidth = 11;
+ task->tHeight = 12;
+ task->tKeepOpenAfterSelect = FALSE;
+ task->tTaskId = taskId;
break;
- case 9:
- case 10:
- task->data[0] = 6;
- task->data[1] = 11;
- task->data[2] = 15;
- task->data[3] = 1;
- task->data[4] = 14;
- task->data[5] = 12;
- task->data[6] = 0;
- task->data[15] = taskId;
+ case SCROLL_MULTI_BF_MOVE_TUTOR_1:
+ case SCROLL_MULTI_BF_MOVE_TUTOR_2:
+ task->tMaxItemsOnScreen = MAX_SCROLL_MULTI_ON_SCREEN;
+ task->tNumItems = 11;
+ task->tLeft = 15;
+ task->tTop = 1;
+ task->tWidth = 14;
+ task->tHeight = 12;
+ task->tKeepOpenAfterSelect = FALSE;
+ task->tTaskId = taskId;
break;
- case 11:
- task->data[0] = 6;
- task->data[1] = 7;
- task->data[2] = 19;
- task->data[3] = 1;
- task->data[4] = 10;
- task->data[5] = 12;
- task->data[6] = 0;
- task->data[15] = taskId;
+ case SCROLL_MULTI_SS_TIDAL_DESTINATION:
+ task->tMaxItemsOnScreen = MAX_SCROLL_MULTI_ON_SCREEN;
+ task->tNumItems = 7;
+ task->tLeft = 19;
+ task->tTop = 1;
+ task->tWidth = 10;
+ task->tHeight = 12;
+ task->tKeepOpenAfterSelect = FALSE;
+ task->tTaskId = taskId;
break;
- case 12:
- task->data[0] = 6;
- task->data[1] = 7;
- task->data[2] = 17;
- task->data[3] = 1;
- task->data[4] = 12;
- task->data[5] = 12;
- task->data[6] = 0;
- task->data[15] = taskId;
+ case SCROLL_MULTI_BATTLE_TENT_RULES:
+ task->tMaxItemsOnScreen = MAX_SCROLL_MULTI_ON_SCREEN;
+ task->tNumItems = 7;
+ task->tLeft = 17;
+ task->tTop = 1;
+ task->tWidth = 12;
+ task->tHeight = 12;
+ task->tKeepOpenAfterSelect = FALSE;
+ task->tTaskId = taskId;
break;
default:
- gSpecialVar_Result = 0x7F;
+ gSpecialVar_Result = MULTI_B_PRESSED;
DestroyTask(taskId);
break;
}
}
-static const u8 *const gUnknown_085B2CF0[][16] = {
+static const u8 *const sScrollableMultichoiceOptions[][MAX_SCROLL_MULTI_LENGTH] =
+{
+ [SCROLL_MULTI_NONE] =
{
- gText_Exit,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL
+ gText_Exit
},
+ [SCROLL_MULTI_GLASS_WORKSHOP_VENDOR] =
{
gText_BlueFlute,
gText_YellowFlute,
@@ -2332,16 +2439,9 @@ static const u8 *const gUnknown_085B2CF0[][16] = {
gText_BlackFlute,
gText_PrettyChair,
gText_PrettyDesk,
- gText_Exit,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL
+ gText_Exit
},
+ [SCROLL_MULTI_POKEMON_FAN_CLUB_RATER] =
{
gText_0Pts,
gText_10Pts,
@@ -2354,12 +2454,9 @@ static const u8 *const gUnknown_085B2CF0[][16] = {
gText_80Pts,
gText_90Pts,
gText_100Pts,
- gText_QuestionMark,
- NULL,
- NULL,
- NULL,
- NULL
+ gText_QuestionMark
},
+ [SCROLL_MULTI_BF_EXCHANGE_CORNER_DECOR_VENDOR_1] =
{
gText_KissPoster16BP,
gText_KissCushion32BP,
@@ -2371,31 +2468,18 @@ static const u8 *const gUnknown_085B2CF0[][16] = {
gText_CyndaquilDoll80BP,
gText_ChikoritaDoll80BP,
gText_TotodileDoll80BP,
- gText_Exit,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL
+ gText_Exit
},
+ [SCROLL_MULTI_BF_EXCHANGE_CORNER_DECOR_VENDOR_2] =
{
gText_LaprasDoll128BP,
gText_SnorlaxDoll128BP,
gText_VenusaurDoll256BP,
gText_CharizardDoll256BP,
gText_BlastoiseDoll256BP,
- gText_Exit,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL
+ gText_Exit
},
+ [SCROLL_MULTI_BF_EXCHANGE_CORNER_VITAMIN_VENDOR] =
{
gText_Protein1BP,
gText_Calcium1BP,
@@ -2403,17 +2487,9 @@ static const u8 *const gUnknown_085B2CF0[][16] = {
gText_Zinc1BP,
gText_Carbos1BP,
gText_HpUp1BP,
- gText_Exit,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL
+ gText_Exit
},
+ [SCROLL_MULTI_BF_EXCHANGE_CORNER_HOLD_ITEM_VENDOR] =
{
gText_Leftovers48BP,
gText_WhiteHerb48BP,
@@ -2424,14 +2500,9 @@ static const u8 *const gUnknown_085B2CF0[][16] = {
gText_KingsRock64BP,
gText_FocusBand64BP,
gText_ScopeLens64BP,
- gText_Exit,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL
+ gText_Exit
},
+ [SCROLL_MULTI_BERRY_POWDER_VENDOR] =
{
gText_EnergyPowder50,
gText_EnergyRoot80,
@@ -2444,12 +2515,9 @@ static const u8 *const gUnknown_085B2CF0[][16] = {
gText_Zinc1000,
gText_HPUp1000,
gText_PPUp3000,
- gText_Exit,
- NULL,
- NULL,
- NULL,
- NULL
+ gText_Exit
},
+ [SCROLL_MULTI_BF_RECEPTIONIST] =
{
gText_BattleTower2,
gText_BattleDome,
@@ -2460,14 +2528,9 @@ static const u8 *const gUnknown_085B2CF0[][16] = {
gText_BattlePyramid,
gText_RankingHall,
gText_ExchangeService,
- gText_Exit,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL
+ gText_Exit
},
+ [SCROLL_MULTI_BF_MOVE_TUTOR_1] =
{
gText_Softboiled16BP,
gText_SeismicToss24BP,
@@ -2479,13 +2542,9 @@ static const u8 *const gUnknown_085B2CF0[][16] = {
gText_Counter48BP,
gText_ThunderWave48BP,
gText_SwordsDance48BP,
- gText_Exit,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL
+ gText_Exit
},
+ [SCROLL_MULTI_BF_MOVE_TUTOR_2] =
{
gText_DefenseCurl16BP,
gText_Snore24BP,
@@ -2497,13 +2556,9 @@ static const u8 *const gUnknown_085B2CF0[][16] = {
gText_IcePunch48BP,
gText_ThunderPunch48BP,
gText_FirePunch48BP,
- gText_Exit,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL
+ gText_Exit
},
+ [SCROLL_MULTI_SS_TIDAL_DESTINATION] =
{
gText_SlateportCity,
gText_BattleFrontier,
@@ -2511,17 +2566,9 @@ static const u8 *const gUnknown_085B2CF0[][16] = {
gText_NavelRock,
gText_BirthIsland,
gText_FarawayIsland,
- gText_Exit,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL
+ gText_Exit
},
+ [SCROLL_MULTI_BATTLE_TENT_RULES] =
{
gText_BattleTrainers,
gText_BattleBasics,
@@ -2529,142 +2576,134 @@ static const u8 *const gUnknown_085B2CF0[][16] = {
gText_PokemonMoves,
gText_Underpowered,
gText_WhenInDanger,
- gText_Exit,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL
+ gText_Exit
}
};
-static void sub_813A2DC(u8 taskId)
+static void Task_ShowScrollableMultichoice(u8 taskId)
{
- u32 unk1;
+ u32 width;
u8 i, windowId;
struct WindowTemplate template;
struct Task *task = &gTasks[taskId];
ScriptContext2_Enable();
- gUnknown_0203AB68 = 0;
- gUnknown_0203AB6C = 0x40;
- sub_813AA60(task->data[11], 0);
- sub_813ACE8(task->data[11], 0);
- gUnknown_0203AB64 = AllocZeroed(task->data[1] * 8);
- gUnknown_0203AB6A = 0;
- sub_813A42C();
+ sScrollableMultichoice_ScrollOffset = 0;
+ sScrollableMultichoice_ItemSpriteId = MAX_SPRITES;
+ FillFrontierExchangeCornerWindowAndItemIcon(task->tScrollMultiId, 0);
+ ShowBattleFrontierTutorWindow(task->tScrollMultiId, 0);
+ sScrollableMultichoice_ListMenuItem = AllocZeroed(task->tNumItems * 8);
+ sFrontierExchangeCorner_NeverRead = 0;
+ InitScrollableMultichoice();
- for (unk1 = 0, i = 0; i < task->data[1]; i++)
+ for (width = 0, i = 0; i < task->tNumItems; i++)
{
- const u8 *text = gUnknown_085B2CF0[gSpecialVar_0x8004][i];
- gUnknown_0203AB64[i].name = text;
- gUnknown_0203AB64[i].id = i;
- unk1 = display_text_and_get_width(text, unk1);
+ const u8 *text = sScrollableMultichoiceOptions[gSpecialVar_0x8004][i];
+ sScrollableMultichoice_ListMenuItem[i].name = text;
+ sScrollableMultichoice_ListMenuItem[i].id = i;
+ width = DisplayTextAndGetWidth(text, width);
}
- task->data[4] = convert_pixel_width_to_tile_width(unk1);
+ task->tWidth = ConvertPixelWidthToTileWidth(width);
- if (task->data[2] + task->data[4] > 0x1D)
+ if (task->tLeft + task->tWidth > MAX_MULTICHOICE_WIDTH + 1)
{
- int unk2 = 0x1D - task->data[4];
- if (unk2 < 0)
+ int adjustedLeft = MAX_MULTICHOICE_WIDTH + 1 - task->tWidth;
+ if (adjustedLeft < 0)
{
- task->data[2] = 0;
+ task->tLeft = 0;
}
else
{
- task->data[2] = unk2;
+ task->tLeft = adjustedLeft;
}
}
- template = CreateWindowTemplate(0, task->data[2], task->data[3], task->data[4], task->data[5], 0xF, 0x64);
+ template = CreateWindowTemplate(0, task->tLeft, task->tTop, task->tWidth, task->tHeight, 0xF, 0x64);
windowId = AddWindow(&template);
- task->data[13] = windowId;
+ task->tWindowId = windowId;
SetStandardWindowBorderStyle(windowId, 0);
- gUnknown_030061D0.totalItems = task->data[1];
- gUnknown_030061D0.maxShowed = task->data[0];
- gUnknown_030061D0.windowId = task->data[13];
+ gScrollableMultichoice_ListMenuTemplate.totalItems = task->tNumItems;
+ gScrollableMultichoice_ListMenuTemplate.maxShowed = task->tMaxItemsOnScreen;
+ gScrollableMultichoice_ListMenuTemplate.windowId = task->tWindowId;
- sub_813A694(taskId);
- task->data[14] = ListMenuInit(&gUnknown_030061D0, task->data[7], task->data[8]);
+ ScrollableMultichoice_UpdateScrollArrows(taskId);
+ task->tListTaskId = ListMenuInit(&gScrollableMultichoice_ListMenuTemplate, task->tScrollOffset, task->tSelectedRow);
schedule_bg_copy_tilemap_to_vram(0);
- gTasks[taskId].func = sub_813A4EC;
+ gTasks[taskId].func = ScrollableMultichoice_ProcessInput;
}
-static void sub_813A42C(void)
+static void InitScrollableMultichoice(void)
{
- gUnknown_030061D0.items = gUnknown_0203AB64;
- gUnknown_030061D0.moveCursorFunc = sub_813A46C;
- gUnknown_030061D0.itemPrintFunc = NULL;
- gUnknown_030061D0.totalItems = 1;
- gUnknown_030061D0.maxShowed = 1;
- gUnknown_030061D0.windowId = 0;
- gUnknown_030061D0.header_X = 0;
- gUnknown_030061D0.item_X = 8;
- gUnknown_030061D0.cursor_X = 0;
- gUnknown_030061D0.upText_Y = 1;
- gUnknown_030061D0.cursorPal = 2;
- gUnknown_030061D0.fillValue = 1;
- gUnknown_030061D0.cursorShadowPal = 3;
- gUnknown_030061D0.lettersSpacing = 0;
- gUnknown_030061D0.itemVerticalPadding = 0;
- gUnknown_030061D0.scrollMultiple = 0;
- gUnknown_030061D0.fontId = 1;
- gUnknown_030061D0.cursorKind = 0;
+ gScrollableMultichoice_ListMenuTemplate.items = sScrollableMultichoice_ListMenuItem;
+ gScrollableMultichoice_ListMenuTemplate.moveCursorFunc = ScrollableMultichoice_MoveCursor;
+ gScrollableMultichoice_ListMenuTemplate.itemPrintFunc = NULL;
+ gScrollableMultichoice_ListMenuTemplate.totalItems = 1;
+ gScrollableMultichoice_ListMenuTemplate.maxShowed = 1;
+ gScrollableMultichoice_ListMenuTemplate.windowId = 0;
+ gScrollableMultichoice_ListMenuTemplate.header_X = 0;
+ gScrollableMultichoice_ListMenuTemplate.item_X = 8;
+ gScrollableMultichoice_ListMenuTemplate.cursor_X = 0;
+ gScrollableMultichoice_ListMenuTemplate.upText_Y = 1;
+ gScrollableMultichoice_ListMenuTemplate.cursorPal = 2;
+ gScrollableMultichoice_ListMenuTemplate.fillValue = 1;
+ gScrollableMultichoice_ListMenuTemplate.cursorShadowPal = 3;
+ gScrollableMultichoice_ListMenuTemplate.lettersSpacing = 0;
+ gScrollableMultichoice_ListMenuTemplate.itemVerticalPadding = 0;
+ gScrollableMultichoice_ListMenuTemplate.scrollMultiple = 0;
+ gScrollableMultichoice_ListMenuTemplate.fontId = 1;
+ gScrollableMultichoice_ListMenuTemplate.cursorKind = 0;
}
-static void sub_813A46C(s32 itemIndex, bool8 onInit, struct ListMenu *list)
+static void ScrollableMultichoice_MoveCursor(s32 itemIndex, bool8 onInit, struct ListMenu *list)
{
u8 taskId;
PlaySE(SE_SELECT);
- taskId = FindTaskIdByFunc(sub_813A4EC);
+ taskId = FindTaskIdByFunc(ScrollableMultichoice_ProcessInput);
if (taskId != 0xFF)
{
- u16 misc;
+ u16 selection;
struct Task *task = &gTasks[taskId];
- ListMenuGetScrollAndRow(task->data[14], &misc, NULL);
- gUnknown_0203AB68 = misc;
- ListMenuGetCurrentItemArrayId(task->data[14], &misc);
- sub_813AC44(task->data[11], gUnknown_0203AB6A);
- sub_813AA60(task->data[11], misc);
- sub_813AD34(task->data[11], misc);
- gUnknown_0203AB6A = misc;
+ ListMenuGetScrollAndRow(task->tListTaskId, &selection, NULL);
+ sScrollableMultichoice_ScrollOffset = selection;
+ ListMenuGetCurrentItemArrayId(task->tListTaskId, &selection);
+ HideFrontierExchangeCornerItemIcon(task->tScrollMultiId, sFrontierExchangeCorner_NeverRead);
+ FillFrontierExchangeCornerWindowAndItemIcon(task->tScrollMultiId, selection);
+ ShowBattleFrontierTutorMoveDescription(task->tScrollMultiId, selection);
+ sFrontierExchangeCorner_NeverRead = selection;
}
}
-static void sub_813A4EC(u8 taskId)
+static void ScrollableMultichoice_ProcessInput(u8 taskId)
{
struct Task *task = &gTasks[taskId];
- s32 input = ListMenu_ProcessInput(task->data[14]);
+ s32 input = ListMenu_ProcessInput(task->tListTaskId);
switch (input)
{
case LIST_NOTHING_CHOSEN:
break;
case LIST_CANCEL:
- gSpecialVar_Result = 0x7F;
+ gSpecialVar_Result = MULTI_B_PRESSED;
PlaySE(SE_SELECT);
- sub_813A570(taskId);
+ CloseScrollableMultichoice(taskId);
break;
default:
gSpecialVar_Result = input;
PlaySE(SE_SELECT);
- if (!task->data[6])
+ if (!task->tKeepOpenAfterSelect)
{
- sub_813A570(taskId);
+ CloseScrollableMultichoice(taskId);
}
- else if (input == task->data[1] - 1)
+ // if selected option was the last one (Exit)
+ else if (input == task->tNumItems - 1)
{
- sub_813A570(taskId);
+ CloseScrollableMultichoice(taskId);
}
else
{
- sub_813A738(taskId);
+ ScrollableMultichoice_RemoveScrollArrows(taskId);
task->func = sub_813A600;
EnableBothScriptContexts();
}
@@ -2672,37 +2711,39 @@ static void sub_813A4EC(u8 taskId)
}
}
-static void sub_813A570(u8 taskId)
+static void CloseScrollableMultichoice(u8 taskId)
{
- u16 array;
+ u16 selection;
struct Task *task = &gTasks[taskId];
- ListMenuGetCurrentItemArrayId(task->data[14], &array);
- sub_813AC44(task->data[11], array);
- sub_813A738(taskId);
- DestroyListMenuTask(task->data[14], NULL, NULL);
- Free(gUnknown_0203AB64);
- ClearStdWindowAndFrameToTransparent(task->data[13], 1);
- FillWindowPixelBuffer(task->data[13], PIXEL_FILL(0));
- CopyWindowToVram(task->data[13], 2);
- RemoveWindow(task->data[13]);
+ ListMenuGetCurrentItemArrayId(task->tListTaskId, &selection);
+ HideFrontierExchangeCornerItemIcon(task->tScrollMultiId, selection);
+ ScrollableMultichoice_RemoveScrollArrows(taskId);
+ DestroyListMenuTask(task->tListTaskId, NULL, NULL);
+ Free(sScrollableMultichoice_ListMenuItem);
+ ClearStdWindowAndFrameToTransparent(task->tWindowId, 1);
+ FillWindowPixelBuffer(task->tWindowId, PIXEL_FILL(0));
+ CopyWindowToVram(task->tWindowId, 2);
+ RemoveWindow(task->tWindowId);
DestroyTask(taskId);
EnableBothScriptContexts();
}
+// Functionally unused; tKeepOpenAfterSelect is only != 0 in unused functions
static void sub_813A600(u8 taskId)
{
- switch (gTasks[taskId].data[6])
+ switch (gTasks[taskId].tKeepOpenAfterSelect)
{
case 1:
default:
break;
case 2:
- gTasks[taskId].data[6] = 1;
+ gTasks[taskId].tKeepOpenAfterSelect = 1;
gTasks[taskId].func = sub_813A664;
break;
}
}
+// Never called
void sub_813A630(void)
{
u8 taskId = FindTaskIdByFunc(sub_813A600);
@@ -2712,20 +2753,20 @@ void sub_813A630(void)
}
else
{
- gTasks[taskId].data[6]++;
+ gTasks[taskId].tKeepOpenAfterSelect++;
}
}
static void sub_813A664(u8 taskId)
{
ScriptContext2_Enable();
- sub_813A694(taskId);
- gTasks[taskId].func = sub_813A4EC;
+ ScrollableMultichoice_UpdateScrollArrows(taskId);
+ gTasks[taskId].func = ScrollableMultichoice_ProcessInput;
}
-static void sub_813A694(u8 taskId)
+static void ScrollableMultichoice_UpdateScrollArrows(u8 taskId)
{
- static const struct ScrollArrowsTemplate gUnknown_085B3030 = {
+ static const struct ScrollArrowsTemplate sScrollableMultichoice_ScrollArrowsTemplate = {
.firstArrowType = SCROLL_ARROW_UP,
.firstX = 0,
.firstY = 0,
@@ -2740,34 +2781,51 @@ static void sub_813A694(u8 taskId)
};
struct Task *task = &gTasks[taskId];
- struct ScrollArrowsTemplate template = gUnknown_085B3030;
- if (task->data[0] != task->data[1])
+ struct ScrollArrowsTemplate template = sScrollableMultichoice_ScrollArrowsTemplate;
+ if (task->tMaxItemsOnScreen != task->data[1])
{
- template.firstX = (task->data[4] / 2) * 8 + 12 + (task->data[2] - 1) * 8;
+ template.firstX = (task->tWidth / 2) * 8 + 12 + (task->tLeft - 1) * 8;
template.firstY = 8;
- template.secondX = (task->data[4] / 2) * 8 + 12 + (task->data[2] - 1) * 8;
- template.secondY = task->data[5] * 8 + 10;
+ template.secondX = (task->tWidth / 2) * 8 + 12 + (task->tLeft - 1) * 8;
+ template.secondY = task->tHeight * 8 + 10;
template.fullyUpThreshold = 0;
- template.fullyDownThreshold = task->data[1] - task->data[0];
- task->data[12] = AddScrollIndicatorArrowPair(&template, &gUnknown_0203AB68);
+ template.fullyDownThreshold = task->data[1] - task->tMaxItemsOnScreen;
+ task->tScrollArrowId = AddScrollIndicatorArrowPair(&template, &sScrollableMultichoice_ScrollOffset);
}
}
-static void sub_813A738(u8 taskId)
+static void ScrollableMultichoice_RemoveScrollArrows(u8 taskId)
{
struct Task *task = &gTasks[taskId];
- if (task->data[0] != task->data[1])
+ if (task->tMaxItemsOnScreen != task->data[1])
{
- RemoveScrollIndicatorArrowPair(task->data[12]);
+ RemoveScrollIndicatorArrowPair(task->tScrollArrowId);
}
}
-void nullsub_55(void)
+// Removed for Emerald (replaced by ShowScrollableMultichoice)
+void ShowGlassWorkshopMenu(void)
{
-
+ /*
+ u8 i;
+ ScriptContext2_Enable();
+ Menu_DrawStdWindowFrame(0, 0, 10, 11);
+ InitMenu(0, 1, 1, 5, 0, 9);
+ gUnknown_0203925C = 0;
+ ClearVerticalScrollIndicatorPalettes();
+ LoadScrollIndicatorPalette();
+ sub_810F2B4();
+ for (i = 0; i < 5; i++)
+ {
+ Menu_PrintText(gUnknown_083F83C0[i], 1, 2 * i + 1);
+ }
+ gUnknown_0203925B = 0;
+ gUnknown_0203925A = ARRAY_COUNT(gUnknown_083F83C0);
+ CreateTask(sub_810F118, 8);
+ */
}
-void sub_813A76C(void)
+void SetBattleTowerLinkPlayerGfx(void)
{
u8 i;
for (i = 0; i < 2; i++)
@@ -2783,34 +2841,34 @@ void sub_813A76C(void)
}
}
-void sub_813A7B8(void)
-{
- static const u8 *const gUnknown_085B3040[] = {
- BattleFrontier_Lounge5_Text_26468D,
- BattleFrontier_Lounge5_Text_2646E5,
- BattleFrontier_Lounge5_Text_264741,
- BattleFrontier_Lounge5_Text_2647A4,
- BattleFrontier_Lounge5_Text_2647FC,
- BattleFrontier_Lounge5_Text_264858,
- BattleFrontier_Lounge5_Text_2648BE,
- BattleFrontier_Lounge5_Text_264916,
- BattleFrontier_Lounge5_Text_264972,
- BattleFrontier_Lounge5_Text_2649D5,
- BattleFrontier_Lounge5_Text_264A3F,
- BattleFrontier_Lounge5_Text_264A9B,
- BattleFrontier_Lounge5_Text_264AF3,
- BattleFrontier_Lounge5_Text_264B5D,
- BattleFrontier_Lounge5_Text_2648BE,
- BattleFrontier_Lounge5_Text_264BC3,
- BattleFrontier_Lounge5_Text_264C36,
- BattleFrontier_Lounge5_Text_2648BE,
- BattleFrontier_Lounge5_Text_264C95,
- BattleFrontier_Lounge5_Text_264D01,
- BattleFrontier_Lounge5_Text_264D6B,
- BattleFrontier_Lounge5_Text_264DD7,
- BattleFrontier_Lounge5_Text_264E33,
- BattleFrontier_Lounge5_Text_264E8F,
- BattleFrontier_Lounge5_Text_2648BE,
+void ShowNatureGirlMessage(void)
+{
+ static const u8 *const sNatureGirlMessages[] = {
+ [NATURE_HARDY] = BattleFrontier_Lounge5_Text_NatureGirlHardy,
+ [NATURE_LONELY] = BattleFrontier_Lounge5_Text_NatureGirlLonely,
+ [NATURE_BRAVE] = BattleFrontier_Lounge5_Text_NatureGirlBrave,
+ [NATURE_ADAMANT] = BattleFrontier_Lounge5_Text_NatureGirlAdamant,
+ [NATURE_NAUGHTY] = BattleFrontier_Lounge5_Text_NatureGirlNaughty,
+ [NATURE_BOLD] = BattleFrontier_Lounge5_Text_NatureGirlBold,
+ [NATURE_DOCILE] = BattleFrontier_Lounge5_Text_NatureGirlDocileNaiveQuietQuirky,
+ [NATURE_RELAXED] = BattleFrontier_Lounge5_Text_NatureGirlRelaxed,
+ [NATURE_IMPISH] = BattleFrontier_Lounge5_Text_NatureGirlImpish,
+ [NATURE_LAX] = BattleFrontier_Lounge5_Text_NatureGirlLax,
+ [NATURE_TIMID] = BattleFrontier_Lounge5_Text_NatureGirlTimid,
+ [NATURE_HASTY] = BattleFrontier_Lounge5_Text_NatureGirlHasty,
+ [NATURE_SERIOUS] = BattleFrontier_Lounge5_Text_NatureGirlSerious,
+ [NATURE_JOLLY] = BattleFrontier_Lounge5_Text_NatureGirlJolly,
+ [NATURE_NAIVE] = BattleFrontier_Lounge5_Text_NatureGirlDocileNaiveQuietQuirky,
+ [NATURE_MODEST] = BattleFrontier_Lounge5_Text_NatureGirlModest,
+ [NATURE_MILD] = BattleFrontier_Lounge5_Text_NatureGirlMild,
+ [NATURE_QUIET] = BattleFrontier_Lounge5_Text_NatureGirlDocileNaiveQuietQuirky,
+ [NATURE_BASHFUL] = BattleFrontier_Lounge5_Text_NatureGirlBashful,
+ [NATURE_RASH] = BattleFrontier_Lounge5_Text_NatureGirlRash,
+ [NATURE_CALM] = BattleFrontier_Lounge5_Text_NatureGirlCalm,
+ [NATURE_GENTLE] = BattleFrontier_Lounge5_Text_NatureGirlGentle,
+ [NATURE_SASSY] = BattleFrontier_Lounge5_Text_NatureGirlSassy,
+ [NATURE_CAREFUL] = BattleFrontier_Lounge5_Text_NatureGirlCareful,
+ [NATURE_QUIRKY] = BattleFrontier_Lounge5_Text_NatureGirlDocileNaiveQuietQuirky,
};
u8 nature;
@@ -2821,19 +2879,20 @@ void sub_813A7B8(void)
}
nature = GetNature(&gPlayerParty[gSpecialVar_0x8004]);
- ShowFieldMessage(gUnknown_085B3040[nature]);
+ ShowFieldMessage(sNatureGirlMessages[nature]);
}
-void UpdateFrontierGambler(u16 a0)
+void UpdateFrontierGambler(u16 daysSince)
{
- u16 *var = GetVarPointer(VAR_FRONTIER_GAMBLER_FACILITY);
- *var += a0;
- *var %= 12;
+ u16 *var = GetVarPointer(VAR_FRONTIER_GAMBLER_CHALLENGE);
+ *var += daysSince;
+ *var %= FRONTIER_GAMBLER_CHALLENGE_COUNT;
}
-void sub_813A820(void)
+void ShowFrontierGamblerLookingMessage(void)
{
- static const u8 *const gUnknown_085B30A4[] = {
+ static const u8 *const sFrontierGamblerLookingMessages[] =
+ {
BattleFrontier_Lounge3_Text_262261,
BattleFrontier_Lounge3_Text_26230D,
BattleFrontier_Lounge3_Text_2623B9,
@@ -2848,14 +2907,15 @@ void sub_813A820(void)
BattleFrontier_Lounge3_Text_2629BC,
};
- u16 var = VarGet(VAR_FRONTIER_GAMBLER_FACILITY);
- ShowFieldMessage(gUnknown_085B30A4[var]);
- VarSet(VAR_FRONTIER_GAMBLER_SET_FACILITY_F, var);
+ u16 challenge = VarGet(VAR_FRONTIER_GAMBLER_CHALLENGE);
+ ShowFieldMessage(sFrontierGamblerLookingMessages[challenge]);
+ VarSet(VAR_FRONTIER_GAMBLER_SET_CHALLENGE, challenge);
}
-void sub_813A854(void)
+void ShowFrontierGamblerGoMessage(void)
{
- static const u8 *const gUnknown_085B30D4[] = {
+ static const u8 *const sFrontierGamblerGoMessages[] =
+ {
BattleFrontier_Lounge3_Text_262C04,
BattleFrontier_Lounge3_Text_262C90,
BattleFrontier_Lounge3_Text_262D1C,
@@ -2870,45 +2930,59 @@ void sub_813A854(void)
BattleFrontier_Lounge3_Text_263211,
};
- ShowFieldMessage(gUnknown_085B30D4[VarGet(VAR_FRONTIER_GAMBLER_SET_FACILITY_F)]);
+ ShowFieldMessage(sFrontierGamblerGoMessages[VarGet(VAR_FRONTIER_GAMBLER_SET_CHALLENGE)]);
}
-void sub_813A878(u8 a0)
+void FrontierGamblerSetWonOrLost(bool8 won)
{
- static const u16 gUnknown_085B3104[] = {0x0000, 0x0001, 0x0002, 0x0100, 0x0101, 0x0400, 0x0401, 0x0200, 0x0201, 0x0300, 0x0500, 0x0600};
+ static const u16 sFrontierChallenges[] =
+ {
+ FRONTIER_CHALLENGE(FRONTIER_FACILITY_TOWER, FRONTIER_MODE_SINGLES),
+ FRONTIER_CHALLENGE(FRONTIER_FACILITY_TOWER, FRONTIER_MODE_DOUBLES),
+ FRONTIER_CHALLENGE(FRONTIER_FACILITY_TOWER, FRONTIER_MODE_MULTIS),
+ FRONTIER_CHALLENGE(FRONTIER_FACILITY_DOME, FRONTIER_MODE_SINGLES),
+ FRONTIER_CHALLENGE(FRONTIER_FACILITY_DOME, FRONTIER_MODE_DOUBLES),
+ FRONTIER_CHALLENGE(FRONTIER_FACILITY_FACTORY, FRONTIER_MODE_SINGLES),
+ FRONTIER_CHALLENGE(FRONTIER_FACILITY_FACTORY, FRONTIER_MODE_DOUBLES),
+ FRONTIER_CHALLENGE(FRONTIER_FACILITY_PALACE, FRONTIER_MODE_SINGLES),
+ FRONTIER_CHALLENGE(FRONTIER_FACILITY_PALACE, FRONTIER_MODE_DOUBLES),
+ FRONTIER_CHALLENGE(FRONTIER_FACILITY_ARENA, FRONTIER_MODE_SINGLES),
+ FRONTIER_CHALLENGE(FRONTIER_FACILITY_PIKE, FRONTIER_MODE_SINGLES),
+ FRONTIER_CHALLENGE(FRONTIER_FACILITY_PYRAMID, FRONTIER_MODE_SINGLES)
+ };
u16 battleMode = VarGet(VAR_FRONTIER_BATTLE_MODE);
- u16 var2 = VarGet(VAR_FRONTIER_GAMBLER_SET_FACILITY_F);
+ u16 challenge = VarGet(VAR_FRONTIER_GAMBLER_SET_CHALLENGE);
u16 frontierFacilityId = VarGet(VAR_FRONTIER_FACILITY);
- if (VarGet(VAR_FRONTIER_GAMBLER_PLACED_BET_F) == 1)
+ if (VarGet(VAR_FRONTIER_GAMBLER_STATE) == FRONTIER_GAMBLER_PLACED_BET)
{
- if (gUnknown_085B3104[var2] == (frontierFacilityId << 8) + battleMode)
+ if (sFrontierChallenges[challenge] == FRONTIER_CHALLENGE(frontierFacilityId, battleMode))
{
- if (a0 != 0)
+ if (won)
{
- VarSet(VAR_FRONTIER_GAMBLER_PLACED_BET_F, 2);
+ VarSet(VAR_FRONTIER_GAMBLER_STATE, FRONTIER_GAMBLER_WON);
}
else
{
- VarSet(VAR_FRONTIER_GAMBLER_PLACED_BET_F, 3);
+ VarSet(VAR_FRONTIER_GAMBLER_STATE, FRONTIER_GAMBLER_LOST);
}
}
}
}
-void sub_813A8FC(void)
+void UpdateBattlePointsWindow(void)
{
u8 string[32];
u32 x;
StringCopy(ConvertIntToDecimalStringN(string, gSaveBlock2Ptr->frontier.battlePoints, STR_CONV_MODE_RIGHT_ALIGN, 4), gText_BP);
x = GetStringRightAlignXOffset(1, string, 48);
- AddTextPrinterParameterized(gUnknown_0203AB6D, 1, string, x, 1, 0, NULL);
+ AddTextPrinterParameterized(sBattlePointsWindowId, 1, string, x, 1, 0, NULL);
}
-void sub_813A958(void)
+void ShowBattlePointsWindow(void)
{
- static const struct WindowTemplate gUnknown_085B311C = {
+ static const struct WindowTemplate sBattlePoints_WindowTemplate = {
.bg = 0,
.tilemapLeft = 1,
.tilemapTop = 1,
@@ -2918,19 +2992,19 @@ void sub_813A958(void)
.baseBlock = 8,
};
- gUnknown_0203AB6D = AddWindow(&gUnknown_085B311C);
- SetStandardWindowBorderStyle(gUnknown_0203AB6D, 0);
- sub_813A8FC();
- CopyWindowToVram(gUnknown_0203AB6D, 2);
+ sBattlePointsWindowId = AddWindow(&sBattlePoints_WindowTemplate);
+ SetStandardWindowBorderStyle(sBattlePointsWindowId, 0);
+ UpdateBattlePointsWindow();
+ CopyWindowToVram(sBattlePointsWindowId, 2);
}
-void sub_813A988(void)
+void CloseBattlePointsWindow(void)
{
- ClearStdWindowAndFrameToTransparent(gUnknown_0203AB6D, TRUE);
- RemoveWindow(gUnknown_0203AB6D);
+ ClearStdWindowAndFrameToTransparent(sBattlePointsWindowId, TRUE);
+ RemoveWindow(sBattlePointsWindowId);
}
-void sub_813A9A4(void)
+void TakeFrontierBattlePoints(void)
{
if (gSaveBlock2Ptr->frontier.battlePoints < gSpecialVar_0x8004)
{
@@ -2942,11 +3016,11 @@ void sub_813A9A4(void)
}
}
-void sub_813A9D0(void)
+void GiveFrontierBattlePoints(void)
{
- if (gSaveBlock2Ptr->frontier.battlePoints + gSpecialVar_0x8004 > 9999)
+ if (gSaveBlock2Ptr->frontier.battlePoints + gSpecialVar_0x8004 > MAX_BATTLE_FRONTIER_POINTS)
{
- gSaveBlock2Ptr->frontier.battlePoints = 9999;
+ gSaveBlock2Ptr->frontier.battlePoints = MAX_BATTLE_FRONTIER_POINTS;
}
else
{
@@ -2954,14 +3028,14 @@ void sub_813A9D0(void)
}
}
-u16 sub_813AA04(void)
+u16 GetFrontierBattlePoints(void)
{
return gSaveBlock2Ptr->frontier.battlePoints;
}
-void sub_813AA18(void)
+void ShowFrontierExchangeCornerItemIconWindow(void)
{
- static const struct WindowTemplate gUnknown_085B3124 = {
+ static const struct WindowTemplate sFrontierExchangeCorner_ItemIconWindowTemplate = {
.bg = 0,
.tilemapLeft = 2,
.tilemapTop = 9,
@@ -2971,159 +3045,139 @@ void sub_813AA18(void)
.baseBlock = 20,
};
- gUnknown_0203AB6E = AddWindow(&gUnknown_085B3124);
- SetStandardWindowBorderStyle(gUnknown_0203AB6E, 0);
- CopyWindowToVram(gUnknown_0203AB6E, 2);
+ sFrontierExchangeCorner_ItemIconWindowId = AddWindow(&sFrontierExchangeCorner_ItemIconWindowTemplate);
+ SetStandardWindowBorderStyle(sFrontierExchangeCorner_ItemIconWindowId, 0);
+ CopyWindowToVram(sFrontierExchangeCorner_ItemIconWindowId, 2);
}
-void sub_813AA44(void)
+void CloseFrontierExchangeCornerItemIconWindow(void)
{
- ClearStdWindowAndFrameToTransparent(gUnknown_0203AB6E, TRUE);
- RemoveWindow(gUnknown_0203AB6E);
+ ClearStdWindowAndFrameToTransparent(sFrontierExchangeCorner_ItemIconWindowId, TRUE);
+ RemoveWindow(sFrontierExchangeCorner_ItemIconWindowId);
}
-static void sub_813AA60(u16 a0, u16 a1)
+static void FillFrontierExchangeCornerWindowAndItemIcon(u16 menu, u16 selection)
{
- static const u16 gUnknown_085B312C[] = { 0x004b, 0x0067, 0x0057, 0x004f, 0x0054, 0x0055, 0x0056, 0x0050, 0x0051, 0x0052, 0xFFFF };
- static const u16 gUnknown_085B3142[] = { 0x0071, 0x006f, 0x0072, 0x0073, 0x0074, 0xFFFF };
- static const u16 gUnknown_085B314E[] = { 0x0040, 0x0043, 0x0041, 0x0046, 0x0042, 0x003f, 0xFFFF };
- static const u16 gUnknown_085B315C[] = { 0x00c8, 0x00b4, 0x00b7, 0x00b9, 0x00b3, 0x00ba, 0x00bb, 0x00c4, 0x00c6, 0xFFFF };
-
- static const u8 *const gUnknown_085B3170[] = {
- BattleFrontier_BattlePointExchangeServiceCorner_Text_2601AA,
- BattleFrontier_BattlePointExchangeServiceCorner_Text_2601D0,
- BattleFrontier_BattlePointExchangeServiceCorner_Text_260201,
- BattleFrontier_BattlePointExchangeServiceCorner_Text_26022F,
- BattleFrontier_BattlePointExchangeServiceCorner_Text_26025B,
- BattleFrontier_BattlePointExchangeServiceCorner_Text_260287,
- BattleFrontier_BattlePointExchangeServiceCorner_Text_2602B5,
- BattleFrontier_BattlePointExchangeServiceCorner_Text_2602E0,
- BattleFrontier_BattlePointExchangeServiceCorner_Text_26030F,
- BattleFrontier_BattlePointExchangeServiceCorner_Text_26033E,
- gText_Exit,
- };
-
- static const u8 *const gUnknown_085B319C[] = {
- BattleFrontier_BattlePointExchangeServiceCorner_Text_26036C,
- BattleFrontier_BattlePointExchangeServiceCorner_Text_26036C,
- BattleFrontier_BattlePointExchangeServiceCorner_Text_26036C,
- BattleFrontier_BattlePointExchangeServiceCorner_Text_26036C,
- BattleFrontier_BattlePointExchangeServiceCorner_Text_26036C,
- gText_Exit
- };
+ #include "data/battle_frontier/battle_frontier_exchange_corner.h"
- static const u8 *const gUnknown_085B31B4[] = {
- BattleFrontier_BattlePointExchangeServiceCorner_Text_260397,
- BattleFrontier_BattlePointExchangeServiceCorner_Text_2603BE,
- BattleFrontier_BattlePointExchangeServiceCorner_Text_2603E6,
- BattleFrontier_BattlePointExchangeServiceCorner_Text_26040E,
- BattleFrontier_BattlePointExchangeServiceCorner_Text_260436,
- BattleFrontier_BattlePointExchangeServiceCorner_Text_26045C,
- gText_Exit
- };
-
- static const u8 *const gUnknown_085B31D0[] = {
- BattleFrontier_BattlePointExchangeServiceCorner_Text_26047A,
- BattleFrontier_BattlePointExchangeServiceCorner_Text_2604AC,
- BattleFrontier_BattlePointExchangeServiceCorner_Text_2604D8,
- BattleFrontier_BattlePointExchangeServiceCorner_Text_26050F,
- BattleFrontier_BattlePointExchangeServiceCorner_Text_260542,
- BattleFrontier_BattlePointExchangeServiceCorner_Text_260575,
- BattleFrontier_BattlePointExchangeServiceCorner_Text_2605A8,
- BattleFrontier_BattlePointExchangeServiceCorner_Text_2605E2,
- BattleFrontier_BattlePointExchangeServiceCorner_Text_260613,
- gText_Exit
- };
-
- if (a0 > 2 && a0 < 7)
+ if (menu >= SCROLL_MULTI_BF_EXCHANGE_CORNER_DECOR_VENDOR_1 && menu <= SCROLL_MULTI_BF_EXCHANGE_CORNER_HOLD_ITEM_VENDOR)
{
FillWindowPixelRect(0, PIXEL_FILL(1), 0, 0, 216, 32);
- switch (a0)
+ switch (menu)
{
- case 3:
- AddTextPrinterParameterized2(0, 1, gUnknown_085B3170[a1], 0, NULL, 2, 1, 3);
- if (gUnknown_085B312C[a1] == 0xFFFF)
+ case SCROLL_MULTI_BF_EXCHANGE_CORNER_DECOR_VENDOR_1:
+ AddTextPrinterParameterized2(0, 1, sFrontierExchangeCorner_Decor1Descriptions[selection], 0, NULL, 2, 1, 3);
+ if (sFrontierExchangeCorner_Decor1[selection] == 0xFFFF)
{
- sub_813ABD4(gUnknown_085B312C[a1]);
+ ShowFrontierExchangeCornerItemIcon(sFrontierExchangeCorner_Decor1[selection]);
}
else
{
FreeSpriteTilesByTag(5500);
FreeSpritePaletteByTag(5500);
- gUnknown_0203AB6C = AddDecorationIconObject(gUnknown_085B312C[a1], 33, 88, 0, 5500, 5500);
+ sScrollableMultichoice_ItemSpriteId = AddDecorationIconObject(sFrontierExchangeCorner_Decor1[selection], 33, 88, 0, 5500, 5500);
}
break;
- case 4:
- AddTextPrinterParameterized2(0, 1, gUnknown_085B319C[a1], 0, NULL, 2, 1, 3);
- if (gUnknown_085B3142[a1] == 0xFFFF)
+ case SCROLL_MULTI_BF_EXCHANGE_CORNER_DECOR_VENDOR_2:
+ AddTextPrinterParameterized2(0, 1, sFrontierExchangeCorner_Decor2Descriptions[selection], 0, NULL, 2, 1, 3);
+ if (sFrontierExchangeCorner_Decor2[selection] == 0xFFFF)
{
- sub_813ABD4(gUnknown_085B3142[a1]);
+ ShowFrontierExchangeCornerItemIcon(sFrontierExchangeCorner_Decor2[selection]);
}
else
{
FreeSpriteTilesByTag(5500);
FreeSpritePaletteByTag(5500);
- gUnknown_0203AB6C = AddDecorationIconObject(gUnknown_085B3142[a1], 33, 88, 0, 5500, 5500);
+ sScrollableMultichoice_ItemSpriteId = AddDecorationIconObject(sFrontierExchangeCorner_Decor2[selection], 33, 88, 0, 5500, 5500);
}
break;
- case 5:
- AddTextPrinterParameterized2(0, 1, gUnknown_085B31B4[a1], 0, NULL, 2, 1, 3);
- sub_813ABD4(gUnknown_085B314E[a1]);
+ case SCROLL_MULTI_BF_EXCHANGE_CORNER_VITAMIN_VENDOR:
+ AddTextPrinterParameterized2(0, 1, sFrontierExchangeCorner_VitaminsDescriptions[selection], 0, NULL, 2, 1, 3);
+ ShowFrontierExchangeCornerItemIcon(sFrontierExchangeCorner_Vitamins[selection]);
break;
- case 6:
- AddTextPrinterParameterized2(0, 1, gUnknown_085B31D0[a1], 0, NULL, 2, 1, 3);
- sub_813ABD4(gUnknown_085B315C[a1]);
+ case SCROLL_MULTI_BF_EXCHANGE_CORNER_HOLD_ITEM_VENDOR:
+ AddTextPrinterParameterized2(0, 1, sFrontierExchangeCorner_HoldItemsDescriptions[selection], 0, NULL, 2, 1, 3);
+ ShowFrontierExchangeCornerItemIcon(sFrontierExchangeCorner_HoldItems[selection]);
break;
}
}
}
-static void sub_813ABD4(u16 a0)
+static void ShowFrontierExchangeCornerItemIcon(u16 item)
{
FreeSpriteTilesByTag(5500);
FreeSpritePaletteByTag(5500);
- gUnknown_0203AB6C = AddItemIconSprite(5500, 5500, a0);
+ sScrollableMultichoice_ItemSpriteId = AddItemIconSprite(5500, 5500, item);
- if (gUnknown_0203AB6C != MAX_SPRITES)
+ if (sScrollableMultichoice_ItemSpriteId != MAX_SPRITES)
{
- gSprites[gUnknown_0203AB6C].oam.priority = 0;
- gSprites[gUnknown_0203AB6C].pos1.x = 36;
- gSprites[gUnknown_0203AB6C].pos1.y = 92;
+ gSprites[sScrollableMultichoice_ItemSpriteId].oam.priority = 0;
+ gSprites[sScrollableMultichoice_ItemSpriteId].pos1.x = 36;
+ gSprites[sScrollableMultichoice_ItemSpriteId].pos1.y = 92;
}
}
-static void sub_813AC44(u16 a0, u16 unused)
+static void HideFrontierExchangeCornerItemIcon(u16 menu, u16 unused)
{
- if (gUnknown_0203AB6C != MAX_SPRITES)
+ if (sScrollableMultichoice_ItemSpriteId != MAX_SPRITES)
{
- switch (a0)
+ switch (menu)
{
- case 3 ... 6:
- DestroySpriteAndFreeResources(&gSprites[gUnknown_0203AB6C]);
+ case SCROLL_MULTI_BF_EXCHANGE_CORNER_DECOR_VENDOR_1:
+ case SCROLL_MULTI_BF_EXCHANGE_CORNER_DECOR_VENDOR_2:
+ case SCROLL_MULTI_BF_EXCHANGE_CORNER_VITAMIN_VENDOR:
+ case SCROLL_MULTI_BF_EXCHANGE_CORNER_HOLD_ITEM_VENDOR:
+ DestroySpriteAndFreeResources(&gSprites[sScrollableMultichoice_ItemSpriteId]);
break;
}
- gUnknown_0203AB6C = MAX_SPRITES;
- }
-}
+ sScrollableMultichoice_ItemSpriteId = MAX_SPRITES;
+ }
+}
+
+static const u16 sBattleFrontier_TutorMoves1[] =
+{
+ MOVE_SOFT_BOILED,
+ MOVE_SEISMIC_TOSS,
+ MOVE_DREAM_EATER,
+ MOVE_MEGA_PUNCH,
+ MOVE_MEGA_KICK,
+ MOVE_BODY_SLAM,
+ MOVE_ROCK_SLIDE,
+ MOVE_COUNTER,
+ MOVE_THUNDER_WAVE,
+ MOVE_SWORDS_DANCE
+};
-static const u16 gUnknown_085B31F8[] = { 0x0087, 0x0045, 0x008a, 0x0005, 0x0019, 0x0022, 0x009d, 0x0044, 0x0056, 0x000e };
-static const u16 gUnknown_085B320C[] = { 0x006f, 0x00ad, 0x00bd, 0x0081, 0x00c4, 0x00cb, 0x00f4, 0x0008, 0x0009, 0x0007 };
+static const u16 sBattleFrontier_TutorMoves2[] =
+{
+ MOVE_DEFENSE_CURL,
+ MOVE_SNORE,
+ MOVE_MUD_SLAP,
+ MOVE_SWIFT,
+ MOVE_ICY_WIND,
+ MOVE_ENDURE,
+ MOVE_PSYCH_UP,
+ MOVE_ICE_PUNCH,
+ MOVE_THUNDER_PUNCH,
+ MOVE_FIRE_PUNCH
+};
-void sub_813AC7C(void)
+void BufferBattleFrontierTutorMoveName(void)
{
if (gSpecialVar_0x8005 != 0)
{
- StringCopy(gStringVar1, gMoveNames[gUnknown_085B320C[gSpecialVar_0x8004]]);
+ StringCopy(gStringVar1, gMoveNames[sBattleFrontier_TutorMoves2[gSpecialVar_0x8004]]);
}
else
{
- StringCopy(gStringVar1, gMoveNames[gUnknown_085B31F8[gSpecialVar_0x8004]]);
+ StringCopy(gStringVar1, gMoveNames[sBattleFrontier_TutorMoves1[gSpecialVar_0x8004]]);
}
}
-static void sub_813ACE8(u8 a0, u16 a1)
+static void ShowBattleFrontierTutorWindow(u8 menu, u16 selection)
{
- static const struct WindowTemplate gUnknown_085B3220 = {
+ static const struct WindowTemplate sBattleFrontierTutor_WindowTemplate =
+ {
.bg = 0,
.tilemapLeft = 1,
.tilemapTop = 7,
@@ -3133,20 +3187,21 @@ static void sub_813ACE8(u8 a0, u16 a1)
.baseBlock = 28,
};
- if (a0 == 9 || a0 == 10)
+ if (menu == SCROLL_MULTI_BF_MOVE_TUTOR_1 || menu == SCROLL_MULTI_BF_MOVE_TUTOR_2)
{
if (gSpecialVar_0x8006 == 0)
{
- gUnknown_0203AB5E = AddWindow(&gUnknown_085B3220);
- SetStandardWindowBorderStyle(gUnknown_0203AB5E, 0);
+ sTutorMoveAndElevatorWindowId = AddWindow(&sBattleFrontierTutor_WindowTemplate);
+ SetStandardWindowBorderStyle(sTutorMoveAndElevatorWindowId, 0);
}
- sub_813AD34(a0, a1);
+ ShowBattleFrontierTutorMoveDescription(menu, selection);
}
}
-static void sub_813AD34(u8 a0, u16 a1)
+static void ShowBattleFrontierTutorMoveDescription(u8 menu, u16 selection)
{
- static const u8 *const gUnknown_085B3228[] = {
+ static const u8 *const sBattleFrontier_TutorMoveDescriptions1[] =
+ {
BattleFrontier_Lounge7_Text_265E30,
BattleFrontier_Lounge7_Text_265E5B,
BattleFrontier_Lounge7_Text_265E8A,
@@ -3160,7 +3215,8 @@ static void sub_813AD34(u8 a0, u16 a1)
gText_Exit,
};
- static const u8 *const gUnknown_085B3254[] = {
+ static const u8 *const sBattleFrontier_TutorMoveDescriptions2[] =
+ {
BattleFrontier_Lounge7_Text_26600A,
BattleFrontier_Lounge7_Text_26603E,
BattleFrontier_Lounge7_Text_266070,
@@ -3174,26 +3230,27 @@ static void sub_813AD34(u8 a0, u16 a1)
gText_Exit,
};
- if (a0 == 9 || a0 == 10)
+ if (menu == SCROLL_MULTI_BF_MOVE_TUTOR_1 || menu == SCROLL_MULTI_BF_MOVE_TUTOR_2)
{
- FillWindowPixelRect(gUnknown_0203AB5E, PIXEL_FILL(1), 0, 0, 96, 48);
- if (a0 == 10)
+ FillWindowPixelRect(sTutorMoveAndElevatorWindowId, PIXEL_FILL(1), 0, 0, 96, 48);
+ if (menu == SCROLL_MULTI_BF_MOVE_TUTOR_2)
{
- AddTextPrinterParameterized(gUnknown_0203AB5E, 1, gUnknown_085B3254[a1], 0, 1, 0, NULL);
+ AddTextPrinterParameterized(sTutorMoveAndElevatorWindowId, 1, sBattleFrontier_TutorMoveDescriptions2[selection], 0, 1, 0, NULL);
}
else
{
- AddTextPrinterParameterized(gUnknown_0203AB5E, 1, gUnknown_085B3228[a1], 0, 1, 0, NULL);
+ AddTextPrinterParameterized(sTutorMoveAndElevatorWindowId, 1, sBattleFrontier_TutorMoveDescriptions1[selection], 0, 1, 0, NULL);
}
}
}
-void sub_813ADB8(void)
+void CloseBattleFrontierTutorWindow(void)
{
- ClearStdWindowAndFrameToTransparent(gUnknown_0203AB5E, TRUE);
- RemoveWindow(gUnknown_0203AB5E);
+ ClearStdWindowAndFrameToTransparent(sTutorMoveAndElevatorWindowId, TRUE);
+ RemoveWindow(sTutorMoveAndElevatorWindowId);
}
+// Never called
void sub_813ADD4(void)
{
u16 scrollOffset, selectedRow;
@@ -3202,75 +3259,92 @@ void sub_813ADD4(void)
if (taskId != 0xFF)
{
struct Task *task = &gTasks[taskId];
- ListMenuGetScrollAndRow(task->data[14], &scrollOffset, &selectedRow);
- SetStandardWindowBorderStyle(task->data[13], 0);
+ ListMenuGetScrollAndRow(task->tListTaskId, &scrollOffset, &selectedRow);
+ SetStandardWindowBorderStyle(task->tWindowId, 0);
- for (i = 0; i < 6; i++)
+ for (i = 0; i < MAX_SCROLL_MULTI_ON_SCREEN; i++)
{
- AddTextPrinterParameterized5(task->data[13], 1, gUnknown_085B2CF0[gSpecialVar_0x8004][scrollOffset + i], 10, i * 16, TEXT_SPEED_FF, NULL, 0, 0);
+ AddTextPrinterParameterized5(task->tWindowId, 1, sScrollableMultichoiceOptions[gSpecialVar_0x8004][scrollOffset + i], 10, i * 16, TEXT_SPEED_FF, NULL, 0, 0);
}
- AddTextPrinterParameterized(task->data[13], 1, gText_SelectorArrow, 0, selectedRow * 16, TEXT_SPEED_FF, NULL);
- PutWindowTilemap(task->data[13]);
- CopyWindowToVram(task->data[13], 3);
+ AddTextPrinterParameterized(task->tWindowId, 1, gText_SelectorArrow, 0, selectedRow * 16, TEXT_SPEED_FF, NULL);
+ PutWindowTilemap(task->tWindowId);
+ CopyWindowToVram(task->tWindowId, 3);
}
}
-void sub_813AEB4(void)
+void GetBattleFrontierTutorMoveIndex(void)
{
u8 i;
- u16 temp1 = 0;
- u16 temp2 = 0;
+ u16 moveTutor = 0;
+ u16 moveIndex = 0;
gSpecialVar_0x8005 = 0;
- temp1 = VarGet(VAR_TEMP_E);
- temp2 = VarGet(VAR_TEMP_D);
+ moveTutor = VarGet(VAR_TEMP_E);
+ moveIndex = VarGet(VAR_TEMP_D);
- if (temp1 != 0)
+ if (moveTutor != 0)
{
i = 0;
do
{
- if (gTutorMoves[i] == gUnknown_085B320C[temp2])
+ if (gTutorMoves[i] == sBattleFrontier_TutorMoves2[moveIndex])
{
gSpecialVar_0x8005 = i;
break;
}
i++;
- } while (i < 30);
+ } while (i < TUTOR_MOVE_COUNT);
}
else
{
i = 0;
do
{
- if (gTutorMoves[i] == gUnknown_085B31F8[temp2])
+ if (gTutorMoves[i] == sBattleFrontier_TutorMoves1[moveIndex])
{
gSpecialVar_0x8005 = i;
break;
}
i++;
- } while (i < 30);
+ } while (i < TUTOR_MOVE_COUNT);
}
}
+// Never called
void sub_813AF48(void)
{
u8 taskId = FindTaskIdByFunc(sub_813A600);
if (taskId != 0xFF)
{
struct Task *task = &gTasks[taskId];
- DestroyListMenuTask(task->data[14], NULL, NULL);
- Free(gUnknown_0203AB64);
- ClearStdWindowAndFrameToTransparent(task->data[13], TRUE);
- FillWindowPixelBuffer(task->data[13], PIXEL_FILL(0));
- ClearWindowTilemap(task->data[13]);
- CopyWindowToVram(task->data[13], 2);
- RemoveWindow(task->data[13]);
+ DestroyListMenuTask(task->tListTaskId, NULL, NULL);
+ Free(sScrollableMultichoice_ListMenuItem);
+ ClearStdWindowAndFrameToTransparent(task->tWindowId, TRUE);
+ FillWindowPixelBuffer(task->tWindowId, PIXEL_FILL(0));
+ ClearWindowTilemap(task->tWindowId);
+ CopyWindowToVram(task->tWindowId, 2);
+ RemoveWindow(task->tWindowId);
DestroyTask(taskId);
}
}
+// Undefine Scrollable Multichoice task data macros
+#undef tMaxItemsOnScreen
+#undef tNumItems
+#undef tLeft
+#undef tTop
+#undef tWidth
+#undef tHeight
+#undef tKeepOpenAfterSelect
+#undef tScrollOffset
+#undef tSelectedRow
+#undef tScrollMultiId
+#undef tScrollArrowId
+#undef tWindowId
+#undef tListTaskId
+#undef tTaskId
+
void DoDeoxysRockInteraction(void)
{
CreateTask(Task_DeoxysRockInteraction, 8);
@@ -3405,47 +3479,47 @@ void sub_813B1D0(void)
BlendPalettes(0x04000000, 16, 0);
}
-void set_unknown_box_id(u8 id)
+void SetPCBoxToSendMon(u8 boxId)
{
- gUnknown_0203AB6F = id;
+ sPCBoxToSendMon = boxId;
}
-u16 get_unknown_box_id(void)
+u16 GetPCBoxToSendMon(void)
{
- return gUnknown_0203AB6F;
+ return sPCBoxToSendMon;
}
-bool8 sub_813B21C(void)
+bool8 ShouldShowBoxWasFullMessage(void)
{
- if (FlagGet(FLAG_SYS_STORAGE_UNKNOWN_FLAG) == FALSE)
+ if (!FlagGet(FLAG_SHOWN_BOX_WAS_FULL_MESSAGE))
{
- if (StorageGetCurrentBox() != VarGet(VAR_STORAGE_UNKNOWN))
+ if (StorageGetCurrentBox() != VarGet(VAR_PC_BOX_TO_SEND_MON))
{
- FlagSet(FLAG_SYS_STORAGE_UNKNOWN_FLAG);
+ FlagSet(FLAG_SHOWN_BOX_WAS_FULL_MESSAGE);
return TRUE;
}
}
return FALSE;
}
-bool8 sub_813B260(void)
+bool8 IsDestinationBoxFull(void)
{
int box;
int i;
- set_unknown_box_id(VarGet(VAR_STORAGE_UNKNOWN));
+ SetPCBoxToSendMon(VarGet(VAR_PC_BOX_TO_SEND_MON));
box = StorageGetCurrentBox();
do
{
for (i = 0; i < IN_BOX_COUNT; i++)
{
- if (GetBoxMonData(GetBoxedMonPtr(box, i), MON_DATA_SPECIES, 0) == 0)
+ if (GetBoxMonData(GetBoxedMonPtr(box, i), MON_DATA_SPECIES, 0) == SPECIES_NONE)
{
- if (get_unknown_box_id() != box)
+ if (GetPCBoxToSendMon() != box)
{
- FlagClear(FLAG_SYS_STORAGE_UNKNOWN_FLAG);
+ FlagClear(FLAG_SHOWN_BOX_WAS_FULL_MESSAGE);
}
- VarSet(VAR_STORAGE_UNKNOWN, box);
- return sub_813B21C();
+ VarSet(VAR_PC_BOX_TO_SEND_MON, box);
+ return ShouldShowBoxWasFullMessage();
}
}
@@ -3606,35 +3680,37 @@ void Unused_SetWeatherSunny(void)
SetCurrentAndNextWeather(WEATHER_SUNNY);
}
-bool32 sub_813B490(void)
-{
- static const u8 gUnknown_085B3420[][3] = {
- { 0x02, 0x04, 0x01 },
- { 0x04, 0x04, 0x01 },
- { 0x05, 0x00, 0x01 },
- { 0x06, 0x03, 0x01 },
- { 0x08, 0x06, 0x01 },
- { 0x09, 0x0d, 0x01 },
- { 0x0a, 0x07, 0x01 },
- { 0x0b, 0x07, 0x01 },
- { 0x0c, 0x04, 0x01 },
- { 0x0e, 0x05, 0x01 },
- { 0x0f, 0x04, 0x01 },
- { 0x1a, 0x37, 0x01 }
+// Always returns 1
+u32 GetMartEmployeeObjectEventId(void)
+{
+ static const u8 sPokeMarts[][3] =
+ {
+ { MAP_GROUP(OLDALE_TOWN_MART), MAP_NUM(OLDALE_TOWN_MART), 1 },
+ { MAP_GROUP(LAVARIDGE_TOWN_MART), MAP_NUM(LAVARIDGE_TOWN_MART), 1 },
+ { MAP_GROUP(FALLARBOR_TOWN_MART), MAP_NUM(FALLARBOR_TOWN_MART), 1 },
+ { MAP_GROUP(VERDANTURF_TOWN_MART), MAP_NUM(VERDANTURF_TOWN_MART), 1 },
+ { MAP_GROUP(PETALBURG_CITY_MART), MAP_NUM(PETALBURG_CITY_MART), 1 },
+ { MAP_GROUP(SLATEPORT_CITY_MART), MAP_NUM(SLATEPORT_CITY_MART), 1 },
+ { MAP_GROUP(MAUVILLE_CITY_MART), MAP_NUM(MAUVILLE_CITY_MART), 1 },
+ { MAP_GROUP(RUSTBORO_CITY_MART), MAP_NUM(RUSTBORO_CITY_MART), 1 },
+ { MAP_GROUP(FORTREE_CITY_MART), MAP_NUM(FORTREE_CITY_MART), 1 },
+ { MAP_GROUP(MOSSDEEP_CITY_MART), MAP_NUM(MOSSDEEP_CITY_MART), 1 },
+ { MAP_GROUP(SOOTOPOLIS_CITY_MART), MAP_NUM(SOOTOPOLIS_CITY_MART), 1 },
+ { MAP_GROUP(BATTLE_FRONTIER_MART), MAP_NUM(BATTLE_FRONTIER_MART), 1 }
};
u8 i;
- for (i = 0; i < 12; i++)
+ for (i = 0; i < ARRAY_COUNT(sPokeMarts); i++)
{
- if (gSaveBlock1Ptr->location.mapGroup == gUnknown_085B3420[i][0])
+ if (gSaveBlock1Ptr->location.mapGroup == sPokeMarts[i][0])
{
- if (gSaveBlock1Ptr->location.mapNum == gUnknown_085B3420[i][1])
+ if (gSaveBlock1Ptr->location.mapNum == sPokeMarts[i][1])
{
- return gUnknown_085B3420[i][2];
+ return sPokeMarts[i][2];
}
}
}
- return TRUE;
+ return 1;
}
bool32 sub_813B4E0(void)
@@ -3648,6 +3724,7 @@ bool32 sub_813B4E0(void)
return FALSE;
}
+// Always returns FALSE
bool32 sub_813B514(void)
{
if (!VarGet(VAR_ALWAYS_ZERO_0x403F))
@@ -3659,7 +3736,7 @@ bool32 sub_813B514(void)
void sub_813B534(void)
{
- gUnknown_0203AB70 = gBattleTypeFlags;
+ sUnknown_0203AB70 = gBattleTypeFlags;
gBattleTypeFlags = 0;
if (!gReceivedRemoteLinkPlayers)
{
@@ -3793,14 +3870,14 @@ static void sub_813B57C(u8 taskId)
{
sub_800AC34();
}
- gBattleTypeFlags = gUnknown_0203AB70;
+ gBattleTypeFlags = sUnknown_0203AB70;
EnableBothScriptContexts();
DestroyTask(taskId);
break;
}
}
-void sub_813B7D8(void)
+void Script_DoRayquazaScene(void)
{
if (gSpecialVar_0x8004 == 0)
{
@@ -3870,23 +3947,25 @@ static void _fwalk(u8 taskId)
}
}
-void sub_813B968(void)
+void GetBattlePyramidHint(void)
{
gSpecialVar_Result = gSpecialVar_0x8004 / 7;
gSpecialVar_Result -= (gSpecialVar_Result / 20) * 20;
}
-void sub_813B9A0(void)
+// Used to avoid a potential softlock if the player respawns on Dewford with no way off
+void ResetHealLocationFromDewford(void)
{
if (gSaveBlock1Ptr->lastHealLocation.mapGroup == MAP_GROUP(DEWFORD_TOWN) && gSaveBlock1Ptr->lastHealLocation.mapNum == MAP_NUM(DEWFORD_TOWN))
{
- SetLastHealLocationWarp(3);
+ SetLastHealLocationWarp(HEAL_LOCATION_PETALBURG_CITY);
}
}
-bool8 sub_813B9C0(void)
+bool8 InPokemonCenter(void)
{
- static const u16 gUnknown_085B3444[] = {
+ static const u16 sPokemonCenters[] =
+ {
MAP_OLDALE_TOWN_POKEMON_CENTER_1F,
MAP_DEWFORD_TOWN_POKEMON_CENTER_1F,
MAP_LAVARIDGE_TOWN_POKEMON_CENTER_1F,
@@ -3914,9 +3993,9 @@ bool8 sub_813B9C0(void)
int i;
u16 map = (gSaveBlock1Ptr->location.mapGroup << 8) + gSaveBlock1Ptr->location.mapNum;
- for (i = 0; gUnknown_085B3444[i] != 0xFFFF; i++)
+ for (i = 0; sPokemonCenters[i] != 0xFFFF; i++)
{
- if (gUnknown_085B3444[i] == map)
+ if (sPokemonCenters[i] == map)
{
return TRUE;
}
diff --git a/src/fight.c b/src/fight.c
index c924effae..5230c2f39 100644
--- a/src/fight.c
+++ b/src/fight.c
@@ -912,9 +912,9 @@ void sub_810D874(struct Sprite *sprite)
}
if (IsContest())
- sprite->oam.matrixNum |= 0x8;
+ sprite->oam.matrixNum |= ST_OAM_HFLIP;
else if (GetBattlerSide(battler) == B_SIDE_PLAYER)
- sprite->oam.matrixNum |= 0x18;
+ sprite->oam.matrixNum |= (ST_OAM_HFLIP | ST_OAM_VFLIP);
sprite->data[0] = 16;
sprite->data[1] = sprite->pos1.x;
diff --git a/src/fire.c b/src/fire.c
index 2998d46ca..fdbfb234e 100644
--- a/src/fire.c
+++ b/src/fire.c
@@ -949,7 +949,7 @@ static u16 sub_8109930(u8 spriteId)
{
u16 var1 = gSprites[spriteId].pos1.y + gSprites[spriteId].pos2.y + gSprites[spriteId].centerToCornerVecY;
- if (GetBattlerSide(gBattleAnimAttacker) == 0)
+ if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_PLAYER)
{
var1 = ((var1 << 16) + 0x4A0000) >> 16;
}
@@ -1059,7 +1059,7 @@ static void sub_8109AFC(struct Sprite *sprite)
StartSpriteAnim(sprite, gBattleAnimArgs[2]);
sprite->data[7] = gBattleAnimArgs[2];
- if (GetBattlerSide(gBattleAnimAttacker) != 0)
+ if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER)
{
sprite->data[4] = 4;
}
@@ -1073,7 +1073,7 @@ static void sub_8109AFC(struct Sprite *sprite)
break;
case 1:
sprite->data[1] += 192;
- if (GetBattlerSide(gBattleAnimAttacker) != 0)
+ if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER)
{
sprite->pos2.y = -(sprite->data[1] >> 8);
}
diff --git a/src/flying.c b/src/flying.c
index a157582e9..3d04a543c 100644
--- a/src/flying.c
+++ b/src/flying.c
@@ -1800,7 +1800,7 @@ void sub_810EEF8(struct Sprite *sprite)
sprite->data[2] = gBattleAnimArgs[0];
if (sprite->data[2])
- sprite->oam.matrixNum = 8;
+ sprite->oam.matrixNum = ST_OAM_HFLIP;
if (gBattleAnimArgs[1] == 0)
{
diff --git a/src/frontier_util.c b/src/frontier_util.c
index 4dd8159cb..88e466e8c 100644
--- a/src/frontier_util.c
+++ b/src/frontier_util.c
@@ -794,15 +794,15 @@ static void sub_81A17A0(void)
case 0:
break;
case 1:
- sub_813A878(0);
+ FrontierGamblerSetWonOrLost(FALSE);
VarSet(VAR_TEMP_0, gSaveBlock2Ptr->frontier.field_CA8);
break;
case 4:
- sub_813A878(0);
+ FrontierGamblerSetWonOrLost(FALSE);
VarSet(VAR_TEMP_0, gSaveBlock2Ptr->frontier.field_CA8);
break;
case 3:
- sub_813A878(1);
+ FrontierGamblerSetWonOrLost(TRUE);
VarSet(VAR_TEMP_0, gSaveBlock2Ptr->frontier.field_CA8);
break;
case 2:
@@ -2503,7 +2503,7 @@ void CreateFrontierBrainPokemon(void)
monLevel,
sFrontierBrainsMons[facility][symbol][i].fixedIV,
TRUE, j,
- TRUE, FRONTIER_BRAIN_OTID);
+ OT_ID_PRESET, FRONTIER_BRAIN_OTID);
SetMonData(&gEnemyParty[monPartyId], MON_DATA_HELD_ITEM, &sFrontierBrainsMons[facility][symbol][i].heldItem);
for (j = 0; j < NUM_STATS; j++)
SetMonData(&gEnemyParty[monPartyId], MON_DATA_HP_EV + j, &sFrontierBrainsMons[facility][symbol][i].evs[j]);
diff --git a/src/ghost.c b/src/ghost.c
index dd29fb7ca..41621ff54 100644
--- a/src/ghost.c
+++ b/src/ghost.c
@@ -1039,7 +1039,7 @@ static void sub_81129F0(struct Sprite *sprite)
{
xDelta = 24;
xDelta2 = -2;
- sprite->oam.matrixNum = 8;
+ sprite->oam.matrixNum = ST_OAM_HFLIP;
}
else
{
diff --git a/src/hall_of_fame.c b/src/hall_of_fame.c
index fdf2020ff..ac37b2ece 100644
--- a/src/hall_of_fame.c
+++ b/src/hall_of_fame.c
@@ -755,7 +755,7 @@ static void Task_Hof_HandleExit(u8 taskId)
static void SetCallback2AfterHallOfFameDisplay(void)
{
- SetMainCallback2(sub_8175620);
+ SetMainCallback2(CB2_StartCreditsSequence);
}
#undef tDontSaveData
diff --git a/src/hof_pc.c b/src/hof_pc.c
index 01015ee81..327749179 100644
--- a/src/hof_pc.c
+++ b/src/hof_pc.c
@@ -27,7 +27,7 @@ static void ReshowPCMenuAfterHallOfFamePC(void)
{
ScriptContext2_Enable();
Overworld_PlaySpecialMapMusic();
- ScrSpecial_CreatePCMenu();
+ ScriptMenu_CreatePCMultichoice();
ScriptMenu_DisplayPCStartupPrompt();
BeginNormalPaletteFade(0xFFFFFFFF, 0, 0x10, 0, RGB_BLACK);
CreateTask(Task_WaitForPaletteFade, 10);
diff --git a/src/ice.c b/src/ice.c
index 8f0c97d82..522fb1bbf 100644
--- a/src/ice.c
+++ b/src/ice.c
@@ -735,7 +735,7 @@ void AnimSwirlingSnowball_Step2(struct Sprite *sprite)
void AnimSwirlingSnowball_Step3(struct Sprite *sprite)
{
s16 tempVar;
- tempVar = GetBattlerSide(gBattleAnimAttacker) != 0 ? 20 : -20;
+ tempVar = GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER ? 20 : -20;
if (sprite->data[5] <= 31)
{
@@ -1190,12 +1190,12 @@ void InitPoisonGasCloudAnim(struct Sprite *sprite)
if (GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2) < GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2))
sprite->data[7] = 0x8000;
- if (!(gBattlerPositions[gBattleAnimTarget] & 1))
+ if ((gBattlerPositions[gBattleAnimTarget] & BIT_SIDE) == B_SIDE_PLAYER)
{
gBattleAnimArgs[1] = -gBattleAnimArgs[1];
gBattleAnimArgs[3] = -gBattleAnimArgs[3];
- if ((sprite->data[7] & 0x8000) && !(gBattlerPositions[gBattleAnimAttacker] & 1))
+ if ((sprite->data[7] & 0x8000) && (gBattlerPositions[gBattleAnimAttacker] & BIT_SIDE) == B_SIDE_PLAYER)
sprite->subpriority = gSprites[GetAnimBattlerSpriteId(ANIM_TARGET)].subpriority + 1;
sprite->data[6] = 1;
diff --git a/src/international_string_util.c b/src/international_string_util.c
index 9dc795dd0..ec5057359 100644
--- a/src/international_string_util.c
+++ b/src/international_string_util.c
@@ -45,7 +45,7 @@ int GetMaxWidthInMenuTable(const struct MenuAction *str, int arg1)
var = stringWidth;
}
- return convert_pixel_width_to_tile_width(var);
+ return ConvertPixelWidthToTileWidth(var);
}
int sub_81DB3D8(const struct MenuAction *str, const u8* arg1, int arg2)
@@ -59,7 +59,7 @@ int sub_81DB3D8(const struct MenuAction *str, const u8* arg1, int arg2)
var = stringWidth;
}
- return convert_pixel_width_to_tile_width(var);
+ return ConvertPixelWidthToTileWidth(var);
}
int Intl_GetListMenuWidth(const struct ListMenuTemplate *listMenu)
diff --git a/src/item_menu.c b/src/item_menu.c
index 5b47a567b..12f03b328 100755
--- a/src/item_menu.c
+++ b/src/item_menu.c
@@ -118,9 +118,9 @@ void sub_81AD9C0(u8);
void sub_81ADB14(u8);
void sub_81ADA7C(u8);
void sub_81ADC0C(u8);
-void bag_menu_leave_maybe_3(void);
-void bag_menu_leave_maybe_2(void);
void bag_menu_leave_maybe(void);
+void CB2_FavorLadyExitBagMenu(void);
+void CB2_QuizLadyExitBagMenu(void);
void sub_81ABA6C(void);
static void SetPocketListPositions(void);
void sub_81ABAE0(void);
@@ -493,20 +493,20 @@ void sub_81AAC14(void)
void sub_81AAC28(void)
{
- GoToBagMenu(RETURN_LOCATION_FIELD_6, POCKETS_COUNT, bag_menu_leave_maybe_3);
+ GoToBagMenu(RETURN_LOCATION_FIELD_6, POCKETS_COUNT, bag_menu_leave_maybe);
gSpecialVar_0x8005 = 0;
gSpecialVar_Result = 0;
}
-void sub_81AAC50(void)
+void FavorLadyOpenBagMenu(void)
{
- GoToBagMenu(RETURN_LOCATION_FIELD_4, POCKETS_COUNT, bag_menu_leave_maybe_2);
+ GoToBagMenu(RETURN_LOCATION_FIELD_4, POCKETS_COUNT, CB2_FavorLadyExitBagMenu);
gSpecialVar_Result = 0;
}
-void sub_81AAC70(void)
+void QuizLadyOpenBagMenu(void)
{
- GoToBagMenu(RETURN_LOCATION_FIELD_5, POCKETS_COUNT, bag_menu_leave_maybe);
+ GoToBagMenu(RETURN_LOCATION_FIELD_5, POCKETS_COUNT, CB2_QuizLadyExitBagMenu);
gSpecialVar_Result = 0;
}
@@ -2202,7 +2202,7 @@ void unknown_ItemMenu_Show(u8 taskId)
unknown_ItemMenu_Confirm(taskId);
}
-void bag_menu_leave_maybe_3(void)
+void bag_menu_leave_maybe(void)
{
gFieldCallback = Apprentice_EnableBothScriptContexts;
SetMainCallback2(CB2_ReturnToField);
@@ -2216,9 +2216,9 @@ void unknown_ItemMenu_Give2(u8 taskId)
unknown_ItemMenu_Confirm(taskId);
}
-void bag_menu_leave_maybe_2(void)
+void CB2_FavorLadyExitBagMenu(void)
{
- gFieldCallback = sub_818DEF4;
+ gFieldCallback = FieldCallback_FavorLadyEnableScriptContexts;
SetMainCallback2(CB2_ReturnToField);
}
@@ -2229,9 +2229,9 @@ void unknown_ItemMenu_Confirm2(u8 taskId)
unknown_ItemMenu_Confirm(taskId);
}
-void bag_menu_leave_maybe(void)
+void CB2_QuizLadyExitBagMenu(void)
{
- gFieldCallback = sub_818E564;
+ gFieldCallback = FieldCallback_QuizLadyEnableScriptContexts;
SetMainCallback2(CB2_ReturnToField);
}
diff --git a/asm/libagbsyscall.s b/src/libagbsyscall.s
index d5639f689..d5639f689 100644
--- a/asm/libagbsyscall.s
+++ b/src/libagbsyscall.s
diff --git a/asm/libgcnmultiboot.s b/src/libgcnmultiboot.s
index 0e418e51f..0e418e51f 100644
--- a/asm/libgcnmultiboot.s
+++ b/src/libgcnmultiboot.s
diff --git a/src/lilycove_lady.c b/src/lilycove_lady.c
index dc38d8848..011d9fdfd 100644
--- a/src/lilycove_lady.c
+++ b/src/lilycove_lady.c
@@ -1,7 +1,3 @@
-//
-// Created by Scott Norton on 9/19/17.
-//
-
#include "global.h"
#include "main.h"
#include "overworld.h"
@@ -18,215 +14,25 @@
#include "text.h"
#include "easy_chat.h"
#include "lilycove_lady.h"
-
-static void SetLilycoveQuizLady(void);
-static void SetLilycoveFavourLady(void);
-static void SetLilycoveContestLady(void);
-static void sub_818E004(void);
-static void sub_818DBC4(void);
-static void sub_818E674(void);
-static u8 sub_818E13C(void);
-static bool8 sub_818E1F4(void);
-static u8 sub_818E258(const u8 *);
-
-extern const u8 gText_Lady2[];
-
-static const u16 sUnknown_0860B074[] = {
- 0x62, 0xcb, 0xdc, 0xcc, 0xd1
-};
-static const u16 sUnknown_0860B07E[] = {
- 0x1a, 0x14, 0x0a
-};
-
-static const u16 Unknown_0860B084[] = {
- 0x101b, 0x1623, 0x1812, 0x102c, 0x020e, 0x0c03, 0x1a0b, 0x0210, 0x020d
-};
-
-static const u16 Unknown_0860B096[] = {
- 0x101b, 0x1013, 0x1020, 0x1a0f, 0x020c, 0x0c03, 0x0211, 0x0203, 0x0400
-};
-
-static const u16 Unknown_0860B0A8[] = {
- 0x0e0f, 0x1018, 0x020e, 0x0204, 0x0c03, 0xffff, 0x0212, 0x0451, 0x0463
-};
-
-static const u16 Unknown_0860B0BA[] = {
- 0x101b, 0x100b, 0x0e0d, 0x141a, 0x181d, 0x0c03, 0x141e, 0x1a26, 0x1823
-};
-
-static const u16 Unknown_0860B0CC[] = {
- 0x101b, 0x181d, 0x1018, 0x0a02, 0x2014, 0x0c03, 0x0208, 0x1824, 0x181c
-};
-
-static const u16 Unknown_0860B0DE[] = {
- 0x101b, 0x1000, 0x1c19, 0x265d, 0x0c03, 0xffff, 0x0447, 0x045d, 0x042c
-};
-
-static const u16 Unknown_0860B0F0[] = {
- 0x101b, 0x1034, 0x1e11, 0x100b, 0x1a08, 0x0c03, 0x044b, 0x0446, 0x040a
-};
-
-static const u16 Unknown_0860B102[] = {
- 0x101b, 0x1000, 0x274f, 0x0626, 0x0c03, 0xffff, 0x0442, 0x0411, 0x0450
-};
-
-static const u16 Unknown_0860B114[] = {
- 0x101b, 0x1000, 0x1c19, 0x043c, 0x0c03, 0xffff, 0x0421, 0x0464, 0x0435
-};
-
-static const u16 Unknown_0860B126[] = {
- 0x101b, 0x1203, 0x1030, 0x0207, 0x0c03, 0xffff, 0x0210, 0x020e, 0x020d
-};
-
-static const u16 Unknown_0860B138[] = {
- 0x101b, 0x1623, 0x0a05, 0x020e, 0x0c03, 0xffff, 0x1a25, 0x181a, 0x181b
-};
-
-static const u16 Unknown_0860B14A[] = {
- 0x101b, 0x1823, 0x1603, 0x0a02, 0x1812, 0x0c03, 0x1a15, 0x1a23, 0x181b
-};
-
-static const u16 Unknown_0860B15C[] = {
- 0x1020, 0x020e, 0x1010, 0x1043, 0x1e0f, 0x0c03, 0x181c, 0x1a24, 0x1816
-};
-
-static const u16 Unknown_0860B16E[] = {
- 0x0446, 0x100b, 0x0620, 0x061c, 0x101b, 0x0c03, 0x0420, 0x0426, 0xffff
-};
-
-static const u16 Unknown_0860B180[] = {
- 0x0400, 0x100b, 0x0639, 0x061c, 0x101b, 0x0c03, 0x040e, 0x0410, 0xffff
-};
-
-static const u16 Unknown_0860B192[] = {
- 0x041f, 0x100b, 0x0639, 0x061c, 0x101b, 0x0c03, 0x0445, 0x0400, 0xffff
-};
-
-static const u16 *const gUnknown_0860B1A4[] = {
- Unknown_0860B084,
- Unknown_0860B096,
- Unknown_0860B0A8,
- Unknown_0860B0BA,
- Unknown_0860B0CC,
- Unknown_0860B0DE,
- Unknown_0860B0F0,
- Unknown_0860B102,
- Unknown_0860B114,
- Unknown_0860B126,
- Unknown_0860B138,
- Unknown_0860B14A,
- Unknown_0860B15C,
- Unknown_0860B16E,
- Unknown_0860B180,
- Unknown_0860B192
-};
-
-static const u16 sUnknown_0860B1E4[] = {
- 0x0210, 0x0400, 0x0212, 0x1a26, 0x0208, 0x045d, 0x040a, 0x0411, 0x0464, 0x020e, 0x1a25, 0x181b, 0x1a24, 0x0420, 0x0410, 0x0400
-};
-
-static const u16 sUnknown_0860B204[] = {
- 0x007b, 0x007f, 0x0081, 0x0023, 0x0023, 0x0023, 0x00a5, 0x00a7, 0x00a6, 0x000b, 0x012f, 0x006b, 0x006d, 0x0044, 0x0044, 0x000c
-};
-
-extern const u8 gUnknown_085EEB83[];
-extern const u8 gUnknown_085EEB8C[];
-extern const u8 gUnknown_085EEB95[];
-extern const u8 gUnknown_085EEB9E[];
-extern const u8 gUnknown_085EEBA4[];
-extern const u8 gUnknown_085EEBAB[];
-
-static const u8 *const gUnknown_0860B224[] = {
- gUnknown_085EEB83,
- gUnknown_085EEB8C,
- gUnknown_085EEB95,
- gUnknown_085EEB9E,
- gUnknown_085EEBA4,
- gUnknown_085EEBAB
-};
-
-static const u16 Unknown_0860B23C[] = {
- 0x0056, 0x0053, 0x0054, 0x000e, 0x0012, 0x000f, 0x00a7, 0x0011, 0x0010, 0x0018, 0x0019, 0x001e, 0x0000
-};
-
-static const u16 Unknown_0860B256[] = {
- 0x0051, 0x006a, 0x006b, 0x00cc, 0x00c2, 0x002f, 0x0067, 0x0068, 0x0087, 0x0089, 0x008b, 0x009d, 0x00a0, 0x00a5, 0x0004, 0x0002, 0x0000
-};
-
-static const u16 Unknown_0860B278[] = {
- 0x0021, 0x000d, 0x001a, 0x001b, 0x001c, 0x00cc, 0x00ca, 0x0026, 0x0086, 0x0096, 0x0097, 0x009a, 0x00a2, 0x00a6, 0x0000
-};
-
-static const u16 Unknown_0860B296[] = {
- 0x0020, 0x004d, 0x004b, 0x004c, 0x0027, 0x0028, 0x0029, 0x002a, 0x002b, 0x006e, 0x005d, 0x006c, 0x006d, 0x006a, 0x006b, 0x00d6, 0x00bc, 0x00b3, 0x000b, 0x000c, 0x0000
-};
-
-static const u16 Unknown_0860B2C0[] = {
- 0x001f, 0x0013, 0x0014, 0x004a, 0x004e, 0x0049, 0x00a5, 0x00c8, 0x0067, 0x006f, 0x0000
-};
-
-static const u16 Unknown_0860B2D6[] = {
- 0x00b7, 0x00d3, 0x00d2, 0x00d8, 0x009e, 0x00a6, 0x00ab, 0x00aa, 0x006c, 0x006d, 0x0000
-};
-
-static const u16 *const gUnknown_0860B2EC[] = {
- Unknown_0860B23C,
- Unknown_0860B256,
- Unknown_0860B278,
- Unknown_0860B296,
- Unknown_0860B2C0,
- Unknown_0860B2D6
-};
-
-static const u16 sUnknown_0860B304[] = {
- 0x0b, 0x6e, 0x40, 0x6f, 0x44, 0x47
-};
-
-extern const u8 gUnknown_085EEB2B[];
-extern const u8 gUnknown_085EEB34[];
-extern const u8 gUnknown_085EEB3A[];
-extern const u8 gUnknown_085EEB41[];
-extern const u8 gUnknown_085EEB4A[];
-extern const u8 gUnknown_085EEB51[];
-extern const u8 gUnknown_085EEB5A[];
-extern const u8 gUnknown_085EEB61[];
-extern const u8 gUnknown_085EEB6A[];
-extern const u8 gUnknown_085EEB74[];
-extern const u8 gUnknown_085EADA4[];
-extern const u8 gUnknown_085EADB5[];
-extern const u8 gUnknown_085EADC4[];
-extern const u8 gUnknown_085EADD5[];
-extern const u8 gUnknown_085EADE7[];
-
-static const u8 *const gUnknown_0860B310[] = {
- gUnknown_085EEB2B,
- gUnknown_085EEB34,
- gUnknown_085EEB3A,
- gUnknown_085EEB41,
- gUnknown_085EEB4A
-};
-static const u8 *const gUnknown_0860B324[] = {
- gUnknown_085EEB51,
- gUnknown_085EEB5A,
- gUnknown_085EEB61,
- gUnknown_085EEB6A,
- gUnknown_085EEB74
-};
-static const u8 *const gUnknown_0860B338[] = {
- gUnknown_085EADA4,
- gUnknown_085EADB5,
- gUnknown_085EADC4,
- gUnknown_085EADD5,
- gUnknown_085EADE7
-};
-
-static const u16 sUnknown_0860B34C[] = {
- 0x0120, 0x013b, 0x011e, 0x013d, 0x0019
-};
-
-static EWRAM_DATA struct LilycoveLadyFavour *gUnknown_0203CD64 = NULL;
-static EWRAM_DATA struct LilycoveLadyQuiz *gUnknown_0203CD68 = NULL;
-static EWRAM_DATA struct LilycoveLadyContest *gUnknown_0203CD6C = NULL;
+#include "contest.h"
+#include "strings.h"
+#include "constants/lilycove_lady.h"
+
+#include "data/lilycove_lady.h"
+
+static void InitLilycoveQuizLady(void);
+static void InitLilycoveFavorLady(void);
+static void InitLilycoveContestLady(void);
+static void ResetQuizLadyForRecordMix(void);
+static void ResetFavorLadyForRecordMix(void);
+static void ResetContestLadyForRecordMix(void);
+static u8 BufferQuizAuthorName(void);
+static bool8 IsQuizTrainerIdNotPlayer(void);
+static u8 GetPlayerNameLength(const u8 *);
+
+static EWRAM_DATA struct LilycoveLadyFavor *sFavorLadyPtr = NULL;
+static EWRAM_DATA struct LilycoveLadyQuiz *sQuizLadyPtr = NULL;
+static EWRAM_DATA struct LilycoveLadyContest *sContestLadyPtr = NULL;
extern EWRAM_DATA u16 gSpecialVar_ItemId;
@@ -235,15 +41,15 @@ u8 GetLilycoveLadyId(void)
return gSaveBlock1Ptr->lilycoveLady.id;
}
-void sub_818D9C0(void)
+void SetLilycoveLadyGfx(void)
{
LilycoveLady *lilycoveLady;
- VarSet(VAR_OBJ_GFX_ID_0, sUnknown_0860B07E[GetLilycoveLadyId()]);
+ VarSet(VAR_OBJ_GFX_ID_0, sLilycoveLadyGfxId[GetLilycoveLadyId()]);
if (GetLilycoveLadyId() == LILYCOVE_LADY_CONTEST)
{
lilycoveLady = &gSaveBlock1Ptr->lilycoveLady;
- VarSet(VAR_OBJ_GFX_ID_1, sUnknown_0860B074[lilycoveLady->contest.category]);
+ VarSet(VAR_OBJ_GFX_ID_1, sContestLadyMonGfxId[lilycoveLady->contest.category]);
gSpecialVar_Result = TRUE;
}
else
@@ -252,718 +58,722 @@ void sub_818D9C0(void)
}
}
-void SetLilycoveLady(void)
+void InitLilycoveLady(void)
{
- u16 id;
-
- id = ((gSaveBlock2Ptr->playerTrainerId[1] << 8) | gSaveBlock2Ptr->playerTrainerId[0]);
+ u16 id = ((gSaveBlock2Ptr->playerTrainerId[1] << 8) | gSaveBlock2Ptr->playerTrainerId[0]);
id %= 6;
id >>= 1;
switch (id)
{
case LILYCOVE_LADY_QUIZ:
- SetLilycoveQuizLady();
+ InitLilycoveQuizLady();
break;
- case LILYCOVE_LADY_FAVOUR:
- SetLilycoveFavourLady();
+ case LILYCOVE_LADY_FAVOR:
+ InitLilycoveFavorLady();
break;
case LILYCOVE_LADY_CONTEST:
- SetLilycoveContestLady();
+ InitLilycoveContestLady();
break;
}
}
-void sub_818DA78(void)
+void ResetLilycoveLadyForRecordMix(void)
{
switch (GetLilycoveLadyId())
{
case LILYCOVE_LADY_QUIZ:
- sub_818E004();
+ ResetQuizLadyForRecordMix();
break;
- case LILYCOVE_LADY_FAVOUR:
- sub_818DBC4();
+ case LILYCOVE_LADY_FAVOR:
+ ResetFavorLadyForRecordMix();
break;
case LILYCOVE_LADY_CONTEST:
- sub_818E674();
+ ResetContestLadyForRecordMix();
break;
}
}
-void SetLilycoveLadyRandomly(void)
+// Unused
+void InitLilycoveLadyRandomly(void)
{
- u8 id;
+ u8 lady = Random() % LILYCOVE_LADY_COUNT;
- id = Random() % 3;
- switch (id)
+ switch (lady)
{
case LILYCOVE_LADY_QUIZ:
- SetLilycoveQuizLady();
+ InitLilycoveQuizLady();
break;
- case LILYCOVE_LADY_FAVOUR:
- SetLilycoveFavourLady();
+ case LILYCOVE_LADY_FAVOR:
+ InitLilycoveFavorLady();
break;
case LILYCOVE_LADY_CONTEST:
- SetLilycoveContestLady();
+ InitLilycoveContestLady();
break;
}
}
-void sub_818DAEC(void)
+void Script_GetLilycoveLadyId(void)
{
gSpecialVar_Result = GetLilycoveLadyId();
}
-static u8 sub_818DB04(const u16 *data)
+static u8 GetNumAcceptedItems(const u16 *itemsArray)
{
- u8 len;
+ u8 items;
- for (len = 0; *data != 0; len ++, data ++);
- return len;
+ for (items = 0; *itemsArray != ITEM_NONE; items ++, itemsArray ++);
+ return items;
}
-static void sub_818DB20(void)
+static void FavorLadyPickFavorAndBestItem(void)
{
- u8 size;
- u8 idx;
+ u8 numItems;
+ u8 bestItem;
- gUnknown_0203CD64->unk_00c = Random() % 6;
- size = sub_818DB04(gUnknown_0860B2EC[gUnknown_0203CD64->unk_00c]);
- idx = Random() % size;
- gUnknown_0203CD64->unk_010 = gUnknown_0860B2EC[gUnknown_0203CD64->unk_00c][idx];
+ sFavorLadyPtr->favorId = Random() % ARRAY_COUNT(sFavorLadyRequests);
+ numItems = GetNumAcceptedItems(sFavorLadyAcceptedItemLists[sFavorLadyPtr->favorId]);
+ bestItem = Random() % numItems;
+ sFavorLadyPtr->bestItem = sFavorLadyAcceptedItemLists[sFavorLadyPtr->favorId][bestItem];
}
-static void SetLilycoveFavourLady(void)
+static void InitLilycoveFavorLady(void)
{
- gUnknown_0203CD64 = &gSaveBlock1Ptr->lilycoveLady.favour;
- gUnknown_0203CD64->id = LILYCOVE_LADY_FAVOUR;
- gUnknown_0203CD64->phase = 0;
- gUnknown_0203CD64->playerName[0] = EOS;
- gUnknown_0203CD64->unk_002 = 0;
- gUnknown_0203CD64->unk_003= 0;
- gUnknown_0203CD64->itemId = ITEM_NONE;
- gUnknown_0203CD64->language = gGameLanguage;
- sub_818DB20();
+ sFavorLadyPtr = &gSaveBlock1Ptr->lilycoveLady.favor;
+ sFavorLadyPtr->id = LILYCOVE_LADY_FAVOR;
+ sFavorLadyPtr->state = LILYCOVE_LADY_STATE_READY;
+ sFavorLadyPtr->playerName[0] = EOS;
+ sFavorLadyPtr->likedItem = FALSE;
+ sFavorLadyPtr->numItemsGiven = 0;
+ sFavorLadyPtr->itemId = ITEM_NONE;
+ sFavorLadyPtr->language = gGameLanguage;
+ FavorLadyPickFavorAndBestItem();
}
-static void sub_818DBC4(void)
+static void ResetFavorLadyForRecordMix(void)
{
- gUnknown_0203CD64 = &gSaveBlock1Ptr->lilycoveLady.favour;
- gUnknown_0203CD64->id = LILYCOVE_LADY_FAVOUR;
- gUnknown_0203CD64->phase = 0;
+ sFavorLadyPtr = &gSaveBlock1Ptr->lilycoveLady.favor;
+ sFavorLadyPtr->id = LILYCOVE_LADY_FAVOR;
+ sFavorLadyPtr->state = LILYCOVE_LADY_STATE_READY;
}
-u8 sub_818DBE8(void)
+u8 GetFavorLadyState(void)
{
- gUnknown_0203CD64 = &gSaveBlock1Ptr->lilycoveLady.favour;
- if (gUnknown_0203CD64->phase == 2)
+ sFavorLadyPtr = &gSaveBlock1Ptr->lilycoveLady.favor;
+ if (sFavorLadyPtr->state == LILYCOVE_LADY_STATE_PRIZE)
{
- return 2;
+ return LILYCOVE_LADY_STATE_PRIZE;
}
- else if (gUnknown_0203CD64->phase == 1)
+ else if (sFavorLadyPtr->state == LILYCOVE_LADY_STATE_COMPLETED)
{
- return 1;
+ return LILYCOVE_LADY_STATE_COMPLETED;
}
else
{
- return 0;
+ return LILYCOVE_LADY_STATE_READY;
}
}
-static const u8 *sub_818DC1C(u8 idx)
+static const u8 *GetFavorLadyRequest(u8 idx)
{
- return gUnknown_0860B224[idx];
+ return sFavorLadyRequests[idx];
}
-void sub_818DC2C(void)
+void BufferFavorLadyRequest(void)
{
- gUnknown_0203CD64 = &gSaveBlock1Ptr->lilycoveLady.favour;
- StringCopy(gStringVar1, sub_818DC1C(gUnknown_0203CD64->unk_00c));
+ sFavorLadyPtr = &gSaveBlock1Ptr->lilycoveLady.favor;
+ StringCopy(gStringVar1, GetFavorLadyRequest(sFavorLadyPtr->favorId));
}
-bool8 sub_818DC60(void)
+bool8 HasAnotherPlayerGivenFavorLadyItem(void)
{
- gUnknown_0203CD64 = &gSaveBlock1Ptr->lilycoveLady.favour;
- if (gUnknown_0203CD64->playerName[0] != EOS)
+ sFavorLadyPtr = &gSaveBlock1Ptr->lilycoveLady.favor;
+ if (sFavorLadyPtr->playerName[0] != EOS)
{
- StringCopy7(gStringVar3, gUnknown_0203CD64->playerName);
- ConvertInternationalString(gStringVar3, gUnknown_0203CD64->language);
+ StringCopy7(gStringVar3, sFavorLadyPtr->playerName);
+ ConvertInternationalString(gStringVar3, sFavorLadyPtr->language);
return TRUE;
}
return FALSE;
}
-static void sub_818DCAC(u8 *dest, u16 itemId)
+static void BufferItemName(u8 *dest, u16 itemId)
{
StringCopy(dest, ItemId_GetName(itemId));
}
-void sub_818DCC8(void)
+void BufferFavorLadyItemName(void)
{
- gUnknown_0203CD64 = &gSaveBlock1Ptr->lilycoveLady.favour;
- sub_818DCAC(gStringVar2, gUnknown_0203CD64->itemId);
+ sFavorLadyPtr = &gSaveBlock1Ptr->lilycoveLady.favor;
+ BufferItemName(gStringVar2, sFavorLadyPtr->itemId);
}
-static void sub_818DCF4(const u8 *src, u8 *dest)
+static void SetFavorLadyPlayerName(const u8 *src, u8 *dest)
{
memset(dest, 0xFF, 8);
StringCopy7(dest, src);
}
-void sub_818DD14(void)
+void BufferFavorLadyPlayerName(void)
{
- gUnknown_0203CD64 = &gSaveBlock1Ptr->lilycoveLady.favour;
- sub_818DCF4(gUnknown_0203CD64->playerName, gStringVar3);
- ConvertInternationalString(gStringVar3, gUnknown_0203CD64->language);
+ sFavorLadyPtr = &gSaveBlock1Ptr->lilycoveLady.favor;
+ SetFavorLadyPlayerName(sFavorLadyPtr->playerName, gStringVar3);
+ ConvertInternationalString(gStringVar3, sFavorLadyPtr->language);
}
-bool8 sub_818DD54(void)
+// Only used to determine if a record-mixed player had given her an item she liked
+bool8 DidFavorLadyLikeItem(void)
{
- gUnknown_0203CD64 = &gSaveBlock1Ptr->lilycoveLady.favour;
- return gUnknown_0203CD64->unk_002 ? TRUE : FALSE;
+ sFavorLadyPtr = &gSaveBlock1Ptr->lilycoveLady.favor;
+ return sFavorLadyPtr->likedItem ? TRUE : FALSE;
}
-void sub_818DD78(void)
+void Script_FavorLadyOpenBagMenu(void)
{
- sub_81AAC50();
+ FavorLadyOpenBagMenu();
}
-static bool8 sub_818DD84(u16 itemId)
+static bool8 DoesFavorLadyLikeItem(u16 itemId)
{
- u8 len;
+ u8 numItems;
u8 i;
- bool8 response;
-
- gUnknown_0203CD64 = &gSaveBlock1Ptr->lilycoveLady.favour;
- len = sub_818DB04(gUnknown_0860B2EC[gUnknown_0203CD64->unk_00c]);
- gUnknown_0203CD64->phase = 1;
- sub_818DCAC(gStringVar2, itemId);
- gUnknown_0203CD64->itemId = itemId;
- sub_818DCF4(gSaveBlock2Ptr->playerName, gUnknown_0203CD64->playerName);
- gUnknown_0203CD64->language = gGameLanguage;
- response = FALSE;
- for (i = 0; i < len; i ++)
- {
- if (gUnknown_0860B2EC[gUnknown_0203CD64->unk_00c][i] == itemId)
+ bool8 likedItem;
+
+ sFavorLadyPtr = &gSaveBlock1Ptr->lilycoveLady.favor;
+ numItems = GetNumAcceptedItems(sFavorLadyAcceptedItemLists[sFavorLadyPtr->favorId]);
+ sFavorLadyPtr->state = LILYCOVE_LADY_STATE_COMPLETED;
+ BufferItemName(gStringVar2, itemId);
+ sFavorLadyPtr->itemId = itemId;
+ SetFavorLadyPlayerName(gSaveBlock2Ptr->playerName, sFavorLadyPtr->playerName);
+ sFavorLadyPtr->language = gGameLanguage;
+ likedItem = FALSE;
+ for (i = 0; i < numItems; i ++)
+ {
+ if (sFavorLadyAcceptedItemLists[sFavorLadyPtr->favorId][i] == itemId)
{
- response = TRUE;
- gUnknown_0203CD64->unk_003 ++;
- gUnknown_0203CD64->unk_002 = 1;
- if (gUnknown_0203CD64->unk_010 == itemId)
+ likedItem = TRUE;
+ sFavorLadyPtr->numItemsGiven++;
+ sFavorLadyPtr->likedItem = TRUE;
+ if (sFavorLadyPtr->bestItem == itemId)
{
- gUnknown_0203CD64->unk_003 = 5;
+ sFavorLadyPtr->numItemsGiven = LILYCOVE_LADY_GIFT_THRESHOLD;
}
break;
}
- gUnknown_0203CD64->unk_002 = 0;
+ sFavorLadyPtr->likedItem = FALSE;
}
- return response;
+ return likedItem;
}
-bool8 sub_818DE44(void)
+bool8 Script_DoesFavorLadyLikeItem(void)
{
- return sub_818DD84(gSpecialVar_ItemId);
+ return DoesFavorLadyLikeItem(gSpecialVar_ItemId);
}
-bool8 sub_818DE5C(void)
+bool8 IsFavorLadyThresholdMet(void)
{
- u8 checkval;
+ u8 numItemsGiven;
- gUnknown_0203CD64 = &gSaveBlock1Ptr->lilycoveLady.favour;
- checkval = gUnknown_0203CD64->unk_003;
- return checkval < 5 ? FALSE : TRUE;
+ sFavorLadyPtr = &gSaveBlock1Ptr->lilycoveLady.favor;
+ numItemsGiven = sFavorLadyPtr->numItemsGiven;
+ return numItemsGiven < LILYCOVE_LADY_GIFT_THRESHOLD ? FALSE : TRUE;
}
-static void sub_818DE88(u16 itemId)
+static void FavorLadyBufferPrizeName(u16 prize)
{
- sub_818DCAC(gStringVar2, itemId);
+ BufferItemName(gStringVar2, prize);
}
-u16 sub_818DEA0(void)
+u16 FavorLadyGetPrize(void)
{
- u16 itemId;
+ u16 prize;
- gUnknown_0203CD64 = &gSaveBlock1Ptr->lilycoveLady.favour;
- itemId = sUnknown_0860B304[gUnknown_0203CD64->unk_00c];
- sub_818DE88(itemId);
- gUnknown_0203CD64->phase = 2;
- return itemId;
+ sFavorLadyPtr = &gSaveBlock1Ptr->lilycoveLady.favor;
+ prize = sFavorLadyPrizes[sFavorLadyPtr->favorId];
+ FavorLadyBufferPrizeName(prize);
+ sFavorLadyPtr->state = LILYCOVE_LADY_STATE_PRIZE;
+ return prize;
}
-void sub_818DEDC(void)
+void SetFavorLadyState_Complete(void)
{
- SetLilycoveFavourLady();
- gUnknown_0203CD64->phase = 1;
+ InitLilycoveFavorLady();
+ sFavorLadyPtr->state = LILYCOVE_LADY_STATE_COMPLETED;
}
-void sub_818DEF4(void)
+void FieldCallback_FavorLadyEnableScriptContexts(void)
{
EnableBothScriptContexts();
}
-static void sub_818DF00(void)
+static void QuizLadyPickQuestion(void)
{
- u8 v0;
+ u8 questionId;
u8 i;
- v0 = Random() % 16;
- for (i = 0; i < 9; i ++)
+ questionId = Random() % ARRAY_COUNT(sQuizLadyQuizQuestions);
+ for (i = 0; i < QUIZ_QUESTION_LEN; i ++)
{
- gUnknown_0203CD68->unk_002[i] = gUnknown_0860B1A4[v0][i];
+ sQuizLadyPtr->question[i] = sQuizLadyQuizQuestions[questionId][i];
}
- gUnknown_0203CD68->unk_014 = sUnknown_0860B1E4[v0];
- gUnknown_0203CD68->itemId = sUnknown_0860B204[v0];
- gUnknown_0203CD68->unk_02b = v0;
- gUnknown_0203CD68->playerName[0] = EOS;
+ sQuizLadyPtr->correctAnswer = sQuizLadyQuizAnswers[questionId];
+ sQuizLadyPtr->prize = sQuizLadyPrizes[questionId];
+ sQuizLadyPtr->questionId = questionId;
+ sQuizLadyPtr->playerName[0] = EOS;
}
-static void SetLilycoveQuizLady(void)
+static void InitLilycoveQuizLady(void)
{
u8 i;
- gUnknown_0203CD68 = &gSaveBlock1Ptr->lilycoveLady.quiz;
- gUnknown_0203CD68->id = LILYCOVE_LADY_QUIZ;
- gUnknown_0203CD68->phase = 0;
- for (i = 0; i < 9; i ++)
+ sQuizLadyPtr = &gSaveBlock1Ptr->lilycoveLady.quiz;
+ sQuizLadyPtr->id = LILYCOVE_LADY_QUIZ;
+ sQuizLadyPtr->state = LILYCOVE_LADY_STATE_READY;
+ for (i = 0; i < QUIZ_QUESTION_LEN; i ++)
{
- gUnknown_0203CD68->unk_002[i] = -1;
+ sQuizLadyPtr->question[i] = -1;
}
- gUnknown_0203CD68->unk_014 = -1;
- gUnknown_0203CD68->unk_016 = -1;
- for (i = 0; i < 4; i ++)
+ sQuizLadyPtr->correctAnswer = -1;
+ sQuizLadyPtr->playerAnswer = -1;
+ for (i = 0; i < TRAINER_ID_LENGTH; i ++)
{
- gUnknown_0203CD68->playerTrainerId[i] = 0;
+ sQuizLadyPtr->playerTrainerId[i] = 0;
}
- gUnknown_0203CD68->itemId = ITEM_NONE;
- gUnknown_0203CD68->unk_02a = 0;
- gUnknown_0203CD68->unk_02c = 0x10;
- gUnknown_0203CD68->language = gGameLanguage;
- sub_818DF00();
+ sQuizLadyPtr->prize = ITEM_NONE;
+ sQuizLadyPtr->waitingForChallenger = FALSE;
+ sQuizLadyPtr->prevQuestionId = ARRAY_COUNT(sQuizLadyQuizQuestions);
+ sQuizLadyPtr->language = gGameLanguage;
+ QuizLadyPickQuestion();
}
-static void sub_818E004(void)
+static void ResetQuizLadyForRecordMix(void)
{
- gUnknown_0203CD68 = &gSaveBlock1Ptr->lilycoveLady.quiz;
- gUnknown_0203CD68->id = LILYCOVE_LADY_QUIZ;
- gUnknown_0203CD68->phase = 0;
- gUnknown_0203CD68->unk_02a = 0;
- gUnknown_0203CD68->unk_016 = -1;
+ sQuizLadyPtr = &gSaveBlock1Ptr->lilycoveLady.quiz;
+ sQuizLadyPtr->id = LILYCOVE_LADY_QUIZ;
+ sQuizLadyPtr->state = LILYCOVE_LADY_STATE_READY;
+ sQuizLadyPtr->waitingForChallenger = FALSE;
+ sQuizLadyPtr->playerAnswer = -1;
}
-u8 sub_818E038(void)
+u8 GetQuizLadyState(void)
{
- gUnknown_0203CD68 = &gSaveBlock1Ptr->lilycoveLady.quiz;
- if (gUnknown_0203CD68->phase == 2)
+ sQuizLadyPtr = &gSaveBlock1Ptr->lilycoveLady.quiz;
+ if (sQuizLadyPtr->state == LILYCOVE_LADY_STATE_PRIZE)
{
- return 2;
+ return LILYCOVE_LADY_STATE_PRIZE;
}
- else if (gUnknown_0203CD68->phase == 1)
+ else if (sQuizLadyPtr->state == LILYCOVE_LADY_STATE_COMPLETED)
{
- return 1;
+ return LILYCOVE_LADY_STATE_COMPLETED;
}
else
{
- return 0;
+ return LILYCOVE_LADY_STATE_READY;
}
}
-u8 sub_818E06C(void)
+u8 GetQuizAuthor(void)
{
int i;
int j;
- u8 rv;
+ u8 authorNameId;
struct LilycoveLadyQuiz *quiz;
quiz = &gSaveBlock1Ptr->lilycoveLady.quiz;
- if (sub_811F8D8(quiz->unk_014) == 0)
- {
- i = quiz->unk_02b;
+ if (sub_811F8D8(quiz->correctAnswer) == 0)
+ {
+ i = quiz->questionId;
do
{
- if (++ i >= 16)
+ if (++ i >= (int)(ARRAY_COUNT(sQuizLadyQuizQuestions)))
{
i = 0;
}
- } while (sub_811F8D8(sUnknown_0860B1E4[i]) == 0);
- for (j = 0; j < 9; j ++)
+ } while (sub_811F8D8(sQuizLadyQuizAnswers[i]) == 0);
+ for (j = 0; j < QUIZ_QUESTION_LEN; j ++)
{
- quiz->unk_002[j] = gUnknown_0860B1A4[i][j];
+ quiz->question[j] = sQuizLadyQuizQuestions[i][j];
}
- quiz->unk_014 = sUnknown_0860B1E4[i];
- quiz->itemId = sUnknown_0860B204[i];
- quiz->unk_02b = i;
+ quiz->correctAnswer = sQuizLadyQuizAnswers[i];
+ quiz->prize = sQuizLadyPrizes[i];
+ quiz->questionId = i;
quiz->playerName[0] = EOS;
}
- rv = sub_818E13C();
- if (rv == 0)
+ authorNameId = BufferQuizAuthorName();
+ if (authorNameId == QUIZ_AUTHOR_NAME_LADY)
{
- return 2;
+ return QUIZ_AUTHOR_LADY;
}
- else if (rv == 2 || sub_818E1F4())
+ else if (authorNameId == QUIZ_AUTHOR_NAME_OTHER_PLAYER || IsQuizTrainerIdNotPlayer())
{
- return 1;
+ return QUIZ_AUTHOR_OTHER_PLAYER;
}
else
{
- return 0;
+ return QUIZ_AUTHOR_PLAYER;
}
}
-static u8 sub_818E13C(void)
+static u8 BufferQuizAuthorName(void)
{
- u8 retval;
- u8 len;
+ u8 authorNameId;
+ u8 nameLen;
u8 i;
- retval = 1;
- gUnknown_0203CD68 = &gSaveBlock1Ptr->lilycoveLady.quiz;
- if (gUnknown_0203CD68->playerName[0] == EOS)
+ authorNameId = QUIZ_AUTHOR_NAME_PLAYER;
+ sQuizLadyPtr = &gSaveBlock1Ptr->lilycoveLady.quiz;
+ if (sQuizLadyPtr->playerName[0] == EOS)
{
- StringCopy7(gStringVar1, gText_Lady2);
- retval = 0;
+ StringCopy7(gStringVar1, gText_QuizLady_Lady);
+ authorNameId = QUIZ_AUTHOR_NAME_LADY;
}
else
{
- StringCopy7(gStringVar1, gUnknown_0203CD68->playerName);
- ConvertInternationalString(gStringVar1, gUnknown_0203CD68->language);
- len = sub_818E258(gUnknown_0203CD68->playerName);
- if (len == sub_818E258(gSaveBlock2Ptr->playerName))
+ StringCopy7(gStringVar1, sQuizLadyPtr->playerName);
+ ConvertInternationalString(gStringVar1, sQuizLadyPtr->language);
+ nameLen = GetPlayerNameLength(sQuizLadyPtr->playerName);
+ if (nameLen == GetPlayerNameLength(gSaveBlock2Ptr->playerName))
{
- u8 *name = gUnknown_0203CD68->playerName;
- for (i = 0; i < len; i ++)
+ u8 *name = sQuizLadyPtr->playerName;
+ for (i = 0; i < nameLen; i ++)
{
- name = gUnknown_0203CD68->playerName;
+ name = sQuizLadyPtr->playerName;
if (name[i] != gSaveBlock2Ptr->playerName[i])
{
- retval = 2;
+ authorNameId = QUIZ_AUTHOR_NAME_OTHER_PLAYER;
break;
}
}
}
}
- return retval;
+ return authorNameId;
}
-static u8 sub_818E1F4(void)
+static bool8 IsQuizTrainerIdNotPlayer(void)
{
- bool8 response;
+ bool8 notPlayer;
u8 i;
- gUnknown_0203CD68 = &gSaveBlock1Ptr->lilycoveLady.quiz;
- response = FALSE;
- for (i = 0; i < 4; i ++)
+ sQuizLadyPtr = &gSaveBlock1Ptr->lilycoveLady.quiz;
+ notPlayer = FALSE;
+ for (i = 0; i < TRAINER_ID_LENGTH; i ++)
{
- if (gUnknown_0203CD68->playerTrainerId[i] != gSaveBlock2Ptr->playerTrainerId[i])
+ if (sQuizLadyPtr->playerTrainerId[i] != gSaveBlock2Ptr->playerTrainerId[i])
{
- response = TRUE;
+ notPlayer = TRUE;
break;
}
}
- return response;
+ return notPlayer;
}
-static u8 sub_818E258(const u8 *str)
+static u8 GetPlayerNameLength(const u8 *playerName)
{
u8 len;
const u8 *ptr;
- for (len = 0, ptr = str; *ptr != EOS; len ++, ptr ++);
+ for (len = 0, ptr = playerName; *ptr != EOS; len ++, ptr ++);
return len;
}
-void sub_818E274(void)
+void BufferQuizPrizeName(void)
{
- StringCopy(gStringVar1, ItemId_GetName(gUnknown_0203CD68->itemId));
+ StringCopy(gStringVar1, ItemId_GetName(sQuizLadyPtr->prize));
}
-bool8 sub_818E298(void)
+bool8 BufferQuizAuthorNameAndCheckIfLady(void)
{
- gUnknown_0203CD68 = &gSaveBlock1Ptr->lilycoveLady.quiz;
- if (!sub_818E13C())
+ sQuizLadyPtr = &gSaveBlock1Ptr->lilycoveLady.quiz;
+ if (BufferQuizAuthorName() == QUIZ_AUTHOR_NAME_LADY)
{
- gUnknown_0203CD68->language = gGameLanguage;
+ sQuizLadyPtr->language = gGameLanguage;
return TRUE;
}
return FALSE;
}
-u8 sub_818E2D8(void)
+bool8 IsQuizLadyWaitingForChallenger(void)
{
- gUnknown_0203CD68 = &gSaveBlock1Ptr->lilycoveLady.quiz;
- return gUnknown_0203CD68->unk_02a;
+ sQuizLadyPtr = &gSaveBlock1Ptr->lilycoveLady.quiz;
+ return sQuizLadyPtr->waitingForChallenger;
}
-void sub_818E2FC(void)
+void QuizLadyGetPlayerAnswer(void)
{
ShowEasyChatScreen();
}
-bool8 sub_818E308(void)
+bool8 IsQuizAnswerCorrect(void)
{
- gUnknown_0203CD68 = &gSaveBlock1Ptr->lilycoveLady.quiz;
- CopyEasyChatWord(gStringVar1, gUnknown_0203CD68->unk_014);
- CopyEasyChatWord(gStringVar2, gUnknown_0203CD68->unk_016);
+ sQuizLadyPtr = &gSaveBlock1Ptr->lilycoveLady.quiz;
+ CopyEasyChatWord(gStringVar1, sQuizLadyPtr->correctAnswer);
+ CopyEasyChatWord(gStringVar2, sQuizLadyPtr->playerAnswer);
return StringCompare(gStringVar1, gStringVar2) ? FALSE : TRUE;
}
-void sub_818E358(void)
+void BufferQuizPrizeItem(void)
{
- gUnknown_0203CD68 = &gSaveBlock1Ptr->lilycoveLady.quiz;
- gSpecialVar_0x8005 = gUnknown_0203CD68->itemId;
+ sQuizLadyPtr = &gSaveBlock1Ptr->lilycoveLady.quiz;
+ gSpecialVar_0x8005 = sQuizLadyPtr->prize;
}
-void sub_818E37C(void)
+void SetQuizLadyState_Complete(void)
{
- gUnknown_0203CD68 = &gSaveBlock1Ptr->lilycoveLady.quiz;
- gUnknown_0203CD68->phase = 1;
+ sQuizLadyPtr = &gSaveBlock1Ptr->lilycoveLady.quiz;
+ sQuizLadyPtr->state = LILYCOVE_LADY_STATE_COMPLETED;
}
-void sub_818E39C(void)
+void SetQuizLadyState_GivePrize(void)
{
- gUnknown_0203CD68 = &gSaveBlock1Ptr->lilycoveLady.quiz;
- gUnknown_0203CD68->phase = 2;
+ sQuizLadyPtr = &gSaveBlock1Ptr->lilycoveLady.quiz;
+ sQuizLadyPtr->state = LILYCOVE_LADY_STATE_PRIZE;
}
-void sub_818E3BC(void)
+void ClearQuizLadyPlayerAnswer(void)
{
- gUnknown_0203CD68 = &gSaveBlock1Ptr->lilycoveLady.quiz;
- gUnknown_0203CD68->unk_016 = -1;
+ sQuizLadyPtr = &gSaveBlock1Ptr->lilycoveLady.quiz;
+ sQuizLadyPtr->playerAnswer = -1;
}
-void sub_818E3E0(void)
+void Script_QuizLadyOpenBagMenu(void)
{
- sub_81AAC70();
+ QuizLadyOpenBagMenu();
}
-void sub_818E3EC(void)
+void QuizLadyPickNewQuestion(void)
{
- gUnknown_0203CD68 = &gSaveBlock1Ptr->lilycoveLady.quiz;
- if (sub_818E298())
+ sQuizLadyPtr = &gSaveBlock1Ptr->lilycoveLady.quiz;
+ if (BufferQuizAuthorNameAndCheckIfLady())
{
- gUnknown_0203CD68->unk_02c = gUnknown_0203CD68->unk_02b;
+ sQuizLadyPtr->prevQuestionId = sQuizLadyPtr->questionId;
}
else
{
- gUnknown_0203CD68->unk_02c = 0x10;
+ sQuizLadyPtr->prevQuestionId = ARRAY_COUNT(sQuizLadyQuizQuestions);
}
- sub_818DF00();
+ QuizLadyPickQuestion();
}
-void sub_818E430(void)
+void ClearQuizLadyQuestionAndAnswer(void)
{
u8 i;
- gUnknown_0203CD68 = &gSaveBlock1Ptr->lilycoveLady.quiz;
- for (i = 0; i < 9; i ++)
+ sQuizLadyPtr = &gSaveBlock1Ptr->lilycoveLady.quiz;
+ for (i = 0; i < QUIZ_QUESTION_LEN; i ++)
{
- gUnknown_0203CD68->unk_002[i] = -1;
+ sQuizLadyPtr->question[i] = -1;
}
- gUnknown_0203CD68->unk_014 = -1;
+ sQuizLadyPtr->correctAnswer = -1;
}
-void sub_818E47C(void)
+void QuizLadySetCustomQuestion(void)
{
gSpecialVar_0x8004 = EASY_CHAT_TYPE_QUIZ_SET_QUESTION;
ShowEasyChatScreen();
}
-void sub_818E490(void)
+void QuizLadyTakePrizeForCustomQuiz(void)
{
RemoveBagItem(gSpecialVar_ItemId, 1);
}
-void sub_818E4A4(void)
+void QuizLadyRecordCustomQuizData(void)
{
u8 i;
- gUnknown_0203CD68 = &gSaveBlock1Ptr->lilycoveLady.quiz;
- gUnknown_0203CD68->itemId = gSpecialVar_ItemId;
- for (i = 0; i < 4; i ++)
+ sQuizLadyPtr = &gSaveBlock1Ptr->lilycoveLady.quiz;
+ sQuizLadyPtr->prize = gSpecialVar_ItemId;
+ for (i = 0; i < TRAINER_ID_LENGTH; i ++)
{
- gUnknown_0203CD68->playerTrainerId[i] = gSaveBlock2Ptr->playerTrainerId[i];
+ sQuizLadyPtr->playerTrainerId[i] = gSaveBlock2Ptr->playerTrainerId[i];
}
- StringCopy7(gUnknown_0203CD68->playerName, gSaveBlock2Ptr->playerName);
- gUnknown_0203CD68->language = gGameLanguage;
+ StringCopy7(sQuizLadyPtr->playerName, gSaveBlock2Ptr->playerName);
+ sQuizLadyPtr->language = gGameLanguage;
}
-void sub_818E510(void)
+void QuizLadySetWaitingForChallenger(void)
{
- gUnknown_0203CD68 = &gSaveBlock1Ptr->lilycoveLady.quiz;
- gUnknown_0203CD68->unk_02a = 1;
+ sQuizLadyPtr = &gSaveBlock1Ptr->lilycoveLady.quiz;
+ sQuizLadyPtr->waitingForChallenger = TRUE;
}
-void sub_818E538(void)
+void BufferQuizCorrectAnswer(void)
{
- gUnknown_0203CD68 = &gSaveBlock1Ptr->lilycoveLady.quiz;
- CopyEasyChatWord(gStringVar3, gUnknown_0203CD68->unk_014);
+ sQuizLadyPtr = &gSaveBlock1Ptr->lilycoveLady.quiz;
+ CopyEasyChatWord(gStringVar3, sQuizLadyPtr->correctAnswer);
}
-void sub_818E564(void)
+
+void FieldCallback_QuizLadyEnableScriptContexts(void)
{
EnableBothScriptContexts();
}
-void sub_818E570(const LilycoveLady *lilycoveLady)
+void QuizLadyClearQuestionForRecordMix(const LilycoveLady *lilycoveLady)
{
u8 i;
- gUnknown_0203CD68 = &gSaveBlock1Ptr->lilycoveLady.quiz;
- if (lilycoveLady->quiz.unk_02c < 16 && gUnknown_0203CD68->id == LILYCOVE_LADY_QUIZ)
+ sQuizLadyPtr = &gSaveBlock1Ptr->lilycoveLady.quiz;
+ if (lilycoveLady->quiz.prevQuestionId < ARRAY_COUNT(sQuizLadyQuizQuestions)
+ && sQuizLadyPtr->id == LILYCOVE_LADY_QUIZ)
{
for (i = 0; i < 4; i ++)
{
- if (lilycoveLady->quiz.unk_02c != gUnknown_0203CD68->unk_02b)
+ if (lilycoveLady->quiz.prevQuestionId != sQuizLadyPtr->questionId)
{
break;
}
- gUnknown_0203CD68->unk_02b = Random() % 16;
+ sQuizLadyPtr->questionId = Random() % ARRAY_COUNT(sQuizLadyQuizQuestions);
}
- if (lilycoveLady->quiz.unk_02c == gUnknown_0203CD68->unk_02b)
+ if (lilycoveLady->quiz.prevQuestionId == sQuizLadyPtr->questionId)
{
- gUnknown_0203CD68->unk_02b = (gUnknown_0203CD68->unk_02b + 1) % 16;
+ sQuizLadyPtr->questionId = (sQuizLadyPtr->questionId + 1) % (int)(ARRAY_COUNT(sQuizLadyQuizQuestions));
}
- gUnknown_0203CD68->unk_02c = lilycoveLady->quiz.unk_02c;
+ sQuizLadyPtr->prevQuestionId = lilycoveLady->quiz.prevQuestionId;
}
}
-static void sub_818E604(void)
+static void ResetContestLadyContestData(void)
{
- gUnknown_0203CD6C->playerName[0] = EOS;
- gUnknown_0203CD6C->fave_pkblk = 0;
- gUnknown_0203CD6C->other_pkblk = 0;
- gUnknown_0203CD6C->max_sheen = 0;
- gUnknown_0203CD6C->category = Random() % 5;
+ sContestLadyPtr->playerName[0] = EOS;
+ sContestLadyPtr->numGoodPokeblocksGiven = 0;
+ sContestLadyPtr->numOtherPokeblocksGiven = 0;
+ sContestLadyPtr->maxSheen = 0;
+ sContestLadyPtr->category = Random() % CONTEST_CATEGORIES_COUNT;
}
-static void SetLilycoveContestLady(void)
+static void InitLilycoveContestLady(void)
{
- gUnknown_0203CD6C = &gSaveBlock1Ptr->lilycoveLady.contest;
- gUnknown_0203CD6C->id = LILYCOVE_LADY_CONTEST;
- gUnknown_0203CD6C->phase = 0;
- sub_818E604();
- gUnknown_0203CD6C->language = gGameLanguage;
+ sContestLadyPtr = &gSaveBlock1Ptr->lilycoveLady.contest;
+ sContestLadyPtr->id = LILYCOVE_LADY_CONTEST;
+ sContestLadyPtr->givenPokeblock = FALSE;
+ ResetContestLadyContestData();
+ sContestLadyPtr->language = gGameLanguage;
}
-static void sub_818E674(void)
+static void ResetContestLadyForRecordMix(void)
{
- gUnknown_0203CD6C = &gSaveBlock1Ptr->lilycoveLady.contest;
- gUnknown_0203CD6C->id = LILYCOVE_LADY_CONTEST;
- gUnknown_0203CD6C->phase = 0;
- if (gUnknown_0203CD6C->fave_pkblk == 5 || gUnknown_0203CD6C->other_pkblk == 5)
+ sContestLadyPtr = &gSaveBlock1Ptr->lilycoveLady.contest;
+ sContestLadyPtr->id = LILYCOVE_LADY_CONTEST;
+ sContestLadyPtr->givenPokeblock = FALSE;
+ if (sContestLadyPtr->numGoodPokeblocksGiven == LILYCOVE_LADY_GIFT_THRESHOLD
+ || sContestLadyPtr->numOtherPokeblocksGiven == LILYCOVE_LADY_GIFT_THRESHOLD)
{
- sub_818E604();
+ ResetContestLadyContestData();
}
}
-static void sub_818E6B0(u8 sheen)
+static void ContestLadySavePlayerNameIfHighSheen(u8 sheen)
{
- gUnknown_0203CD6C = &gSaveBlock1Ptr->lilycoveLady.contest;
- if (gUnknown_0203CD6C->max_sheen <= sheen)
+ sContestLadyPtr = &gSaveBlock1Ptr->lilycoveLady.contest;
+ if (sContestLadyPtr->maxSheen <= sheen)
{
- gUnknown_0203CD6C->max_sheen = sheen;
- memset(gUnknown_0203CD6C->playerName, EOS, sizeof(gUnknown_0203CD6C->playerName));
- memcpy(gUnknown_0203CD6C->playerName, gSaveBlock2Ptr->playerName, sizeof(gUnknown_0203CD6C->playerName));
- gUnknown_0203CD6C->language = gGameLanguage;
+ sContestLadyPtr->maxSheen = sheen;
+ memset(sContestLadyPtr->playerName, EOS, sizeof(sContestLadyPtr->playerName));
+ memcpy(sContestLadyPtr->playerName, gSaveBlock2Ptr->playerName, sizeof(sContestLadyPtr->playerName));
+ sContestLadyPtr->language = gGameLanguage;
}
}
bool8 GivePokeblockToContestLady(struct Pokeblock *pokeblock)
{
- u8 sheen;
- bool8 response;
+ u8 sheen = 0;
+ bool8 correctFlavor = FALSE;
- sheen = 0;
- response = FALSE;
- gUnknown_0203CD6C = &gSaveBlock1Ptr->lilycoveLady.contest;
- switch (gUnknown_0203CD6C->category)
+ sContestLadyPtr = &gSaveBlock1Ptr->lilycoveLady.contest;
+ switch (sContestLadyPtr->category)
{
- case 0:
+ case CONTEST_CATEGORY_COOL:
if (pokeblock->spicy != 0)
{
sheen = pokeblock->spicy;
- response = TRUE;
+ correctFlavor = TRUE;
}
break;
- case 1:
+ case CONTEST_CATEGORY_BEAUTY:
if (pokeblock->dry != 0)
{
sheen = pokeblock->dry;
- response = TRUE;
+ correctFlavor = TRUE;
}
break;
- case 2:
+ case CONTEST_CATEGORY_CUTE:
if (pokeblock->sweet != 0)
{
sheen = pokeblock->sweet;
- response = TRUE;
+ correctFlavor = TRUE;
}
break;
- case 3:
+ case CONTEST_CATEGORY_SMART:
if (pokeblock->bitter != 0)
{
sheen = pokeblock->bitter;
- response = TRUE;
+ correctFlavor = TRUE;
}
break;
- case 4:
+ case CONTEST_CATEGORY_TOUGH:
if (pokeblock->sour != 0)
{
sheen = pokeblock->sour;
- response = TRUE;
+ correctFlavor = TRUE;
}
break;
}
- if (response == TRUE)
+ if (correctFlavor == TRUE)
{
- sub_818E6B0(sheen);
- gUnknown_0203CD6C->fave_pkblk ++;
+ ContestLadySavePlayerNameIfHighSheen(sheen);
+ sContestLadyPtr->numGoodPokeblocksGiven++;
}
else
{
- gUnknown_0203CD6C->other_pkblk ++;
+ sContestLadyPtr->numOtherPokeblocksGiven++;
}
- return response;
+ return correctFlavor;
}
-static void sub_818E794(u8 *dest1, u8 *dest2)
+static void BufferContestLadyCategoryAndMonName(u8 *dest1, u8 *dest2)
{
- gUnknown_0203CD6C = &gSaveBlock1Ptr->lilycoveLady.contest;
- StringCopy(dest1, gUnknown_0860B324[gUnknown_0203CD6C->category]);
- StringCopy10(dest2, gUnknown_0860B310[gUnknown_0203CD6C->category]);
+ sContestLadyPtr = &gSaveBlock1Ptr->lilycoveLady.contest;
+ StringCopy(dest1, sContestLadyCategoryNames[sContestLadyPtr->category]);
+ StringCopy10(dest2, sContestLadyMonNames[sContestLadyPtr->category]);
}
-void sub_818E7E0(u8 *dest1, u8 *dest2)
+void BufferContestLadyMonName(u8 *dest1, u8 *dest2)
{
- gUnknown_0203CD6C = &gSaveBlock1Ptr->lilycoveLady.contest;
- *dest1 = gUnknown_0203CD6C->category;
- StringCopy(dest2, gUnknown_0860B310[gUnknown_0203CD6C->category]);
+ sContestLadyPtr = &gSaveBlock1Ptr->lilycoveLady.contest;
+ *dest1 = sContestLadyPtr->category;
+ StringCopy(dest2, sContestLadyMonNames[sContestLadyPtr->category]);
}
-void sub_818E81C(u8 *dest)
+void BufferContestLadyPlayerName(u8 *dest)
{
- gUnknown_0203CD6C = &gSaveBlock1Ptr->lilycoveLady.contest;
- StringCopy(dest, gUnknown_0203CD6C->playerName);
+ sContestLadyPtr = &gSaveBlock1Ptr->lilycoveLady.contest;
+ StringCopy(dest, sContestLadyPtr->playerName);
}
-void sub_818E848(u8 *dest)
+void BufferContestLadyLanguage(u8 *dest)
{
- gUnknown_0203CD6C = &gSaveBlock1Ptr->lilycoveLady.contest;
- *dest = gUnknown_0203CD6C->language;
+ sContestLadyPtr = &gSaveBlock1Ptr->lilycoveLady.contest;
+ *dest = sContestLadyPtr->language;
}
-void sub_818E868(u8 *dest, u8 category)
+void BufferContestName(u8 *dest, u8 category)
{
- StringCopy(dest, gUnknown_0860B338[category]);
+ StringCopy(dest, sContestNames[category]);
}
+// used in tv.c to determine sTVShowState for Contest Lady show
+// if return val is 1, sTVShowState is 1
+// if return val is 2, sTVShowState is 3
+// if return val is 0, sTVShowState is 2
u8 sub_818E880(void)
{
- gUnknown_0203CD6C = &gSaveBlock1Ptr->lilycoveLady.contest;
- if (gUnknown_0203CD6C->fave_pkblk >= 5)
+ sContestLadyPtr = &gSaveBlock1Ptr->lilycoveLady.contest;
+ if (sContestLadyPtr->numGoodPokeblocksGiven >= LILYCOVE_LADY_GIFT_THRESHOLD)
{
return 1;
}
- else if (gUnknown_0203CD6C->fave_pkblk == 0)
+ else if (sContestLadyPtr->numGoodPokeblocksGiven == 0)
{
return 2;
}
@@ -973,53 +783,54 @@ u8 sub_818E880(void)
}
}
-bool8 sub_818E8B4(void)
+
+bool8 HasPlayerGivenContestLadyPokeblock(void)
{
- gUnknown_0203CD6C = &gSaveBlock1Ptr->lilycoveLady.contest;
- if (gUnknown_0203CD6C->phase == 1)
+ sContestLadyPtr = &gSaveBlock1Ptr->lilycoveLady.contest;
+ if (sContestLadyPtr->givenPokeblock == TRUE)
{
return TRUE;
}
return FALSE;
}
-bool8 sub_818E8E0(void)
+bool8 ShouldContestLadyShowGoOnAir(void)
{
- bool8 response;
+ bool8 putOnAir = FALSE;
- response = FALSE;
- gUnknown_0203CD6C = &gSaveBlock1Ptr->lilycoveLady.contest;
- if (gUnknown_0203CD6C->fave_pkblk >= 5 || gUnknown_0203CD6C->other_pkblk >= 5)
+ sContestLadyPtr = &gSaveBlock1Ptr->lilycoveLady.contest;
+ if (sContestLadyPtr->numGoodPokeblocksGiven >= LILYCOVE_LADY_GIFT_THRESHOLD
+ || sContestLadyPtr->numOtherPokeblocksGiven >= LILYCOVE_LADY_GIFT_THRESHOLD)
{
- response = TRUE;
+ putOnAir = TRUE;
}
- return response;
+ return putOnAir;
}
-void sub_818E914(void)
+void Script_BufferContestLadyCategoryAndMonName(void)
{
- sub_818E794(gStringVar2, gStringVar1);
+ BufferContestLadyCategoryAndMonName(gStringVar2, gStringVar1);
}
-void sub_818E92C(void)
+void OpenPokeblockCaseForContestLady(void)
{
OpenPokeblockCase(3, CB2_ReturnToField);
}
-void sub_818E940(void)
+void SetContestLadyGivenPokeblock(void)
{
- gUnknown_0203CD6C = &gSaveBlock1Ptr->lilycoveLady.contest;
- gUnknown_0203CD6C->phase = 1;
+ sContestLadyPtr = &gSaveBlock1Ptr->lilycoveLady.contest;
+ sContestLadyPtr->givenPokeblock = TRUE;
}
-void sub_818E960(void)
+void GetContestLadyMonSpecies(void)
{
- gUnknown_0203CD6C = &gSaveBlock1Ptr->lilycoveLady.contest;
- gSpecialVar_0x8005 = sUnknown_0860B34C[gUnknown_0203CD6C->category];
+ sContestLadyPtr = &gSaveBlock1Ptr->lilycoveLady.contest;
+ gSpecialVar_0x8005 = sContestLadyMonSpecies[sContestLadyPtr->category];
}
-u8 sub_818E990(void)
+u8 GetContestLadyCategory(void)
{
- gUnknown_0203CD6C = &gSaveBlock1Ptr->lilycoveLady.contest;
- return gUnknown_0203CD6C->category;
+ sContestLadyPtr = &gSaveBlock1Ptr->lilycoveLady.contest;
+ return sContestLadyPtr->category;
}
diff --git a/asm/m4a_1.s b/src/m4a_1.s
index cab4ed174..cab4ed174 100644
--- a/asm/m4a_1.s
+++ b/src/m4a_1.s
diff --git a/src/match_call.c b/src/match_call.c
index b02af9977..4b0134d2c 100644
--- a/src/match_call.c
+++ b/src/match_call.c
@@ -1290,7 +1290,7 @@ static bool32 sub_81963F0(u8 taskId)
sub_81973A4();
playerObjectId = GetEventObjectIdByLocalIdAndMap(EVENT_OBJ_ID_PLAYER, 0, 0);
EventObjectClearHeldMovementIfFinished(&gEventObjects[playerObjectId]);
- sub_80D338C();
+ ScriptMovement_UnfreezeEventObjects();
UnfreezeEventObjects();
ScriptContext2_Disable();
}
diff --git a/src/mauville_old_man.c b/src/mauville_old_man.c
index 64f04f3bc..a4d70c062 100644
--- a/src/mauville_old_man.c
+++ b/src/mauville_old_man.c
@@ -1155,7 +1155,7 @@ static void PrintStoryList(void)
if (curWidth > width)
width = curWidth;
}
- sStorytellerWindowId = CreateWindowFromRect(0, 0, convert_pixel_width_to_tile_width(width), GetFreeStorySlot() * 2 + 2);
+ sStorytellerWindowId = CreateWindowFromRect(0, 0, ConvertPixelWidthToTileWidth(width), GetFreeStorySlot() * 2 + 2);
SetStandardWindowBorderStyle(sStorytellerWindowId, 0);
for (i = 0; i < 4; i++)
{
diff --git a/src/mon_markings.c b/src/mon_markings.c
index f8b128045..f4d6b3818 100644
--- a/src/mon_markings.c
+++ b/src/mon_markings.c
@@ -350,7 +350,7 @@ void sub_811FAA4(u8 markings, s16 x, s16 y)
u16 i;
sMenu->cursorPos = 0;
sMenu->markings = markings;
- for (i = 0; i < 4; i++)
+ for (i = 0; i < NUM_MON_MARKINGS; i++)
sMenu->markingsArray[i] = (sMenu->markings >> i) & 1;
sub_811FC80(x, y, sMenu->baseTileTag, sMenu->basePaletteTag);
}
@@ -371,7 +371,7 @@ void sub_811FAF8(void)
DestroySprite(sMenu->menuWindowSprites[i]);
sMenu->menuWindowSprites[i] = NULL;
}
- for (i = 0; i < 4; i++)
+ for (i = 0; i < NUM_MON_MARKINGS; i++)
{
if (!sMenu->menuMarkingSprites[i])
return;
@@ -422,7 +422,7 @@ bool8 sub_811FBA4(void)
{
case 4:
sMenu->markings = 0;
- for (i = 0; i < 4; i++)
+ for (i = 0; i < NUM_MON_MARKINGS; i++)
sMenu->markings |= sMenu->markingsArray[i] << i;
return FALSE;
case 5:
@@ -498,7 +498,7 @@ static void sub_811FC80(s16 x, s16 y, u16 baseTileTag, u16 basePaletteTag)
sprTemplate.callback = sub_811FF40;
sprTemplate.oam = &gUnknown_0859EE84;
- for (i = 0; i < 4; i++)
+ for (i = 0; i < NUM_MON_MARKINGS; i++)
{
spriteId = CreateSprite(&sprTemplate, x + 32, y + 16 + 16 * i, 0);
if (spriteId != MAX_SPRITES)
diff --git a/src/mossdeep_gym.c b/src/mossdeep_gym.c
index d8adbe0c6..880780638 100644
--- a/src/mossdeep_gym.c
+++ b/src/mossdeep_gym.c
@@ -55,7 +55,7 @@ void FinishMossdeepGymTiles(void)
id = GetEventObjectIdByLocalIdAndMap(EVENT_OBJ_ID_PLAYER, 0, 0);
EventObjectClearHeldMovementIfFinished(&gEventObjects[id]);
- sub_80D338C();
+ ScriptMovement_UnfreezeEventObjects();
}
u16 MossdeepGym_MoveEvents(u8 arg0)
diff --git a/src/move_relearner.c b/src/move_relearner.c
index 0b0b4a5aa..867c6c995 100644
--- a/src/move_relearner.c
+++ b/src/move_relearner.c
@@ -154,7 +154,7 @@ static EWRAM_DATA struct
{
u8 state;
u8 heartSpriteIds[16]; /*0x001*/
- u16 movesToLearn[4]; /*0x012*/
+ u16 movesToLearn[MAX_MON_MOVES]; /*0x012*/
u8 filler1A[0x44 - 0x1A]; /*0x01A*/
u8 partyMon; /*0x044*/
u8 moveSlot; /*0x045*/
diff --git a/src/naming_screen.c b/src/naming_screen.c
index 7da7d99b0..472489a26 100644
--- a/src/naming_screen.c
+++ b/src/naming_screen.c
@@ -541,16 +541,16 @@ static void DisplaySentToPCMessage(void)
{
u8 stringToDisplay = 0;
- if (!sub_813B260())
+ if (!IsDestinationBoxFull())
{
- StringCopy(gStringVar1, GetBoxNamePtr(VarGet(VAR_STORAGE_UNKNOWN)));
+ StringCopy(gStringVar1, GetBoxNamePtr(VarGet(VAR_PC_BOX_TO_SEND_MON)));
StringCopy(gStringVar2, gNamingScreenData->destBuffer);
}
else
{
- StringCopy(gStringVar1, GetBoxNamePtr(VarGet(VAR_STORAGE_UNKNOWN)));
+ StringCopy(gStringVar1, GetBoxNamePtr(VarGet(VAR_PC_BOX_TO_SEND_MON)));
StringCopy(gStringVar2, gNamingScreenData->destBuffer);
- StringCopy(gStringVar3, GetBoxNamePtr(get_unknown_box_id()));
+ StringCopy(gStringVar3, GetBoxNamePtr(GetPCBoxToSendMon()));
stringToDisplay = 2;
}
diff --git a/src/new_game.c b/src/new_game.c
index ee67da9be..1021ea96c 100644
--- a/src/new_game.c
+++ b/src/new_game.c
@@ -81,7 +81,7 @@ u32 GetTrainerId(u8 *trainerId)
void CopyTrainerId(u8 *dst, u8 *src)
{
s32 i;
- for (i = 0; i < 4; i++)
+ for (i = 0; i < TRAINER_ID_LENGTH; i++)
dst[i] = src[i];
}
@@ -198,7 +198,7 @@ void NewGameInitData(void)
ScriptContext2_RunNewScript(EventScript_ResetAllMapFlags);
ResetMiniGamesResults();
copy_strings_to_sav1();
- SetLilycoveLady();
+ InitLilycoveLady();
ResetAllApprenticeData();
ClearRankingHallRecords();
InitMatchCallCounters();
diff --git a/src/option_menu.c b/src/option_menu.c
index 3ffb2738f..e0473b5c3 100644
--- a/src/option_menu.c
+++ b/src/option_menu.c
@@ -48,6 +48,13 @@ enum
WIN_OPTIONS
};
+#define YPOS_TEXTSPEED (MENUITEM_TEXTSPEED * 16)
+#define YPOS_BATTLESCENE (MENUITEM_BATTLESCENE * 16)
+#define YPOS_BATTLESTYLE (MENUITEM_BATTLESTYLE * 16)
+#define YPOS_SOUND (MENUITEM_SOUND * 16)
+#define YPOS_BUTTONMODE (MENUITEM_BUTTONMODE * 16)
+#define YPOS_FRAMETYPE (MENUITEM_FRAMETYPE * 16)
+
// this file's functions
static void Task_OptionMenuFadeIn(u8 taskId);
static void Task_OptionMenuProcessInput(u8 taskId);
@@ -80,13 +87,13 @@ static const u8 sEqualSignGfx[] = INCBIN_U8("graphics/misc/option_menu_equals_si
static const u8 *const sOptionMenuItemsNames[MENUITEM_COUNT] =
{
- gText_TextSpeed,
- gText_BattleScene,
- gText_BattleStyle,
- gText_Sound,
- gText_ButtonMode,
- gText_Frame,
- gText_OptionMenuCancel,
+ [MENUITEM_TEXTSPEED] = gText_TextSpeed,
+ [MENUITEM_BATTLESCENE] = gText_BattleScene,
+ [MENUITEM_BATTLESTYLE] = gText_BattleStyle,
+ [MENUITEM_SOUND] = gText_Sound,
+ [MENUITEM_BUTTONMODE] = gText_ButtonMode,
+ [MENUITEM_FRAMETYPE] = gText_Frame,
+ [MENUITEM_CANCEL] = gText_OptionMenuCancel,
};
static const struct WindowTemplate sOptionMenuWinTemplates[] =
@@ -280,12 +287,12 @@ static void Task_OptionMenuProcessInput(u8 taskId)
if (gTasks[taskId].data[TD_MENUSELECTION] > 0)
gTasks[taskId].data[TD_MENUSELECTION]--;
else
- gTasks[taskId].data[TD_MENUSELECTION] = 6;
+ gTasks[taskId].data[TD_MENUSELECTION] = MENUITEM_CANCEL;
HighlightOptionMenuItem(gTasks[taskId].data[TD_MENUSELECTION]);
}
else if (gMain.newKeys & DPAD_DOWN)
{
- if (gTasks[taskId].data[TD_MENUSELECTION] <= 5)
+ if (gTasks[taskId].data[TD_MENUSELECTION] < MENUITEM_CANCEL)
gTasks[taskId].data[TD_MENUSELECTION]++;
else
gTasks[taskId].data[TD_MENUSELECTION] = 0;
@@ -431,7 +438,7 @@ static void TextSpeed_DrawChoices(u8 selection)
styles[2] = 0;
styles[selection] = 1;
- DrawOptionMenuChoice(gText_TextSpeedSlow, 104, 0, styles[0]);
+ DrawOptionMenuChoice(gText_TextSpeedSlow, 104, YPOS_TEXTSPEED, styles[0]);
widthSlow = GetStringWidth(1, gText_TextSpeedSlow, 0);
widthMid = GetStringWidth(1, gText_TextSpeedMid, 0);
@@ -439,9 +446,9 @@ static void TextSpeed_DrawChoices(u8 selection)
widthMid -= 94;
xMid = (widthSlow - widthMid - widthFast) / 2 + 104;
- DrawOptionMenuChoice(gText_TextSpeedMid, xMid, 0, styles[1]);
+ DrawOptionMenuChoice(gText_TextSpeedMid, xMid, YPOS_TEXTSPEED, styles[1]);
- DrawOptionMenuChoice(gText_TextSpeedFast, GetStringRightAlignXOffset(1, gText_TextSpeedFast, 198), 0, styles[2]);
+ DrawOptionMenuChoice(gText_TextSpeedFast, GetStringRightAlignXOffset(1, gText_TextSpeedFast, 198), YPOS_TEXTSPEED, styles[2]);
}
static u8 BattleScene_ProcessInput(u8 selection)
@@ -463,8 +470,8 @@ static void BattleScene_DrawChoices(u8 selection)
styles[1] = 0;
styles[selection] = 1;
- DrawOptionMenuChoice(gText_BattleSceneOn, 104, 16, styles[0]);
- DrawOptionMenuChoice(gText_BattleSceneOff, GetStringRightAlignXOffset(1, gText_BattleSceneOff, 198), 16, styles[1]);
+ DrawOptionMenuChoice(gText_BattleSceneOn, 104, YPOS_BATTLESCENE, styles[0]);
+ DrawOptionMenuChoice(gText_BattleSceneOff, GetStringRightAlignXOffset(1, gText_BattleSceneOff, 198), YPOS_BATTLESCENE, styles[1]);
}
static u8 BattleStyle_ProcessInput(u8 selection)
@@ -486,8 +493,8 @@ static void BattleStyle_DrawChoices(u8 selection)
styles[1] = 0;
styles[selection] = 1;
- DrawOptionMenuChoice(gText_BattleStyleShift, 104, 32, styles[0]);
- DrawOptionMenuChoice(gText_BattleStyleSet, GetStringRightAlignXOffset(1, gText_BattleStyleSet, 198), 32, styles[1]);
+ DrawOptionMenuChoice(gText_BattleStyleShift, 104, YPOS_BATTLESTYLE, styles[0]);
+ DrawOptionMenuChoice(gText_BattleStyleSet, GetStringRightAlignXOffset(1, gText_BattleStyleSet, 198), YPOS_BATTLESTYLE, styles[1]);
}
static u8 Sound_ProcessInput(u8 selection)
@@ -510,8 +517,8 @@ static void Sound_DrawChoices(u8 selection)
styles[1] = 0;
styles[selection] = 1;
- DrawOptionMenuChoice(gText_SoundMono, 104, 48, styles[0]);
- DrawOptionMenuChoice(gText_SoundStereo, GetStringRightAlignXOffset(1, gText_SoundStereo, 198), 48, styles[1]);
+ DrawOptionMenuChoice(gText_SoundMono, 104, YPOS_SOUND, styles[0]);
+ DrawOptionMenuChoice(gText_SoundStereo, GetStringRightAlignXOffset(1, gText_SoundStereo, 198), YPOS_SOUND, styles[1]);
}
static u8 FrameType_ProcessInput(u8 selection)
@@ -568,8 +575,8 @@ static void FrameType_DrawChoices(u8 selection)
text[i] = EOS;
- DrawOptionMenuChoice(gText_FrameType, 104, 80, 0);
- DrawOptionMenuChoice(text, 128, 80, 1);
+ DrawOptionMenuChoice(gText_FrameType, 104, YPOS_FRAMETYPE, 0);
+ DrawOptionMenuChoice(text, 128, YPOS_FRAMETYPE, 1);
}
static u8 ButtonMode_ProcessInput(u8 selection)
@@ -605,7 +612,7 @@ static void ButtonMode_DrawChoices(u8 selection)
styles[2] = 0;
styles[selection] = 1;
- DrawOptionMenuChoice(gText_ButtonTypeNormal, 104, 64, styles[0]);
+ DrawOptionMenuChoice(gText_ButtonTypeNormal, 104, YPOS_BUTTONMODE, styles[0]);
widthNormal = GetStringWidth(1, gText_ButtonTypeNormal, 0);
widthLR = GetStringWidth(1, gText_ButtonTypeLR, 0);
@@ -613,9 +620,9 @@ static void ButtonMode_DrawChoices(u8 selection)
widthLR -= 94;
xLR = (widthNormal - widthLR - widthLA) / 2 + 104;
- DrawOptionMenuChoice(gText_ButtonTypeLR, xLR, 64, styles[1]);
+ DrawOptionMenuChoice(gText_ButtonTypeLR, xLR, YPOS_BUTTONMODE, styles[1]);
- DrawOptionMenuChoice(gText_ButtonTypeLEqualsA, GetStringRightAlignXOffset(1, gText_ButtonTypeLEqualsA, 198), 64, styles[2]);
+ DrawOptionMenuChoice(gText_ButtonTypeLEqualsA, GetStringRightAlignXOffset(1, gText_ButtonTypeLEqualsA, 198), YPOS_BUTTONMODE, styles[2]);
}
static void DrawTextOption(void)
diff --git a/src/overworld.c b/src/overworld.c
index cefbd8159..0cac8390a 100644
--- a/src/overworld.c
+++ b/src/overworld.c
@@ -1759,7 +1759,7 @@ void CB2_ContinueSavedGame(void)
static void FieldClearVBlankHBlankCallbacks(void)
{
- if (warp0_in_pokecenter() == TRUE)
+ if (UsedPokemonCenterWarp() == TRUE)
CloseLink();
if (gWirelessCommType != 0)
@@ -2435,7 +2435,7 @@ static void UpdateAllLinkPlayers(u16 *keys, s32 selfId)
struct TradeRoomPlayer trainer;
s32 i;
- for (i = 0; i < 4; i++)
+ for (i = 0; i < MAX_LINK_PLAYERS; i++)
{
u8 key = keys[i];
u16 setFacing = FACING_NONE;
@@ -3026,7 +3026,7 @@ static s32 sub_80878E4(u8 linkPlayerId)
static u8 GetLinkPlayerIdAt(s16 x, s16 y)
{
u8 i;
- for (i = 0; i < 4; i++)
+ for (i = 0; i < MAX_LINK_PLAYERS; i++)
{
if (gLinkPlayerEventObjects[i].active
&& (gLinkPlayerEventObjects[i].movementMode == 0 || gLinkPlayerEventObjects[i].movementMode == 2))
diff --git a/src/party_menu.c b/src/party_menu.c
index dd0a4dabd..f4b749bde 100755
--- a/src/party_menu.c
+++ b/src/party_menu.c
@@ -3650,7 +3650,7 @@ static u8 sub_81B31B0(u8 a)
for (i = 0; i < gUnknown_0203CEC4->listSize; i++)
{
- u8 unk = (gUnknown_0203CEC4->actions[i] > 18) ? 4 : 3;
+ u8 unk = (gUnknown_0203CEC4->actions[i] >= MENU_FIELD_MOVES) ? 4 : 3;
AddTextPrinterParameterized4(gUnknown_0203CEC4->windowId[0], 1, cursorDimension, (i * 16) + 1, fontAttribute, 0, sFontColorTable[unk], 0, sCursorOptions[gUnknown_0203CEC4->actions[i]].text);
}
diff --git a/src/pokeblock.c b/src/pokeblock.c
index 0d8469132..30e630d9a 100644
--- a/src/pokeblock.c
+++ b/src/pokeblock.c
@@ -3,7 +3,6 @@
#include "battle.h"
#include "battle_controllers.h"
#include "battle_message.h"
-#include "berry.h"
#include "bg.h"
#include "decompress.h"
#include "event_data.h"
@@ -30,6 +29,7 @@
#include "task.h"
#include "text.h"
#include "text_window.h"
+#include "constants/berry.h"
#include "constants/items.h"
#include "constants/songs.h"
#include "constants/rgb.h"
diff --git a/src/pokedex.c b/src/pokedex.c
index 0e532ed92..c1787ef6a 100644
--- a/src/pokedex.c
+++ b/src/pokedex.c
@@ -4249,12 +4249,12 @@ u16 GetPokedexHeightWeight(u16 dexNum, u8 data)
{
switch (data)
{
- case 0: // height
- return gPokedexEntries[dexNum].height;
- case 1: // weight
- return gPokedexEntries[dexNum].weight;
- default:
- return 1;
+ case 0: // height
+ return gPokedexEntries[dexNum].height;
+ case 1: // weight
+ return gPokedexEntries[dexNum].weight;
+ default:
+ return 1;
}
}
@@ -4360,23 +4360,23 @@ u16 GetHoennPokedexCount(u8 caseID)
return count;
}
-u16 sub_80C089C(u8 caseID)
+u16 GetKantoPokedexCount(u8 caseID)
{
u16 count = 0;
u16 i;
- for (i = 0; i < 151; i++)
+ for (i = 0; i < KANTO_DEX_COUNT; i++)
{
switch (caseID)
{
- case FLAG_GET_SEEN:
- if (GetSetPokedexFlag(i + 1, FLAG_GET_SEEN))
- count++;
- break;
- case FLAG_GET_CAUGHT:
- if (GetSetPokedexFlag(i + 1, FLAG_GET_CAUGHT))
- count++;
- break;
+ case FLAG_GET_SEEN:
+ if (GetSetPokedexFlag(i + 1, FLAG_GET_SEEN))
+ count++;
+ break;
+ case FLAG_GET_CAUGHT:
+ if (GetSetPokedexFlag(i + 1, FLAG_GET_CAUGHT))
+ count++;
+ break;
}
}
return count;
@@ -4386,7 +4386,7 @@ bool16 HasAllHoennMons(void)
{
u16 i;
- for (i = 0; i < 200; i++)
+ for (i = 0; i < HOENN_DEX_COUNT - 2; i++)
{
if (!GetSetPokedexFlag(HoennToNationalOrder(i + 1), FLAG_GET_CAUGHT))
return FALSE;
@@ -4394,11 +4394,11 @@ bool16 HasAllHoennMons(void)
return TRUE;
}
-bool8 sub_80C0918(void)
+bool8 HasAllKantoMons(void)
{
u16 i;
- for (i = 0; i < 150; i++)
+ for (i = 0; i < KANTO_DEX_COUNT - 1; i++)
{
if (!GetSetPokedexFlag(i + 1, FLAG_GET_CAUGHT))
return FALSE;
@@ -4406,26 +4406,26 @@ bool8 sub_80C0918(void)
return TRUE;
}
-u16 sub_80C0944(void)
+bool16 HasAllMons(void)
{
u16 i;
- for (i = 0; i < 150; i++)
+ for (i = 0; i < NATIONAL_DEX_MEWTWO; i++)
{
if (!GetSetPokedexFlag(i + 1, FLAG_GET_CAUGHT))
- return 0;
+ return FALSE;
}
- for (i = 151; i < 248; i++)
+ for (i = NATIONAL_DEX_MEW; i < NATIONAL_DEX_TYRANITAR; i++)
{
if (!GetSetPokedexFlag(i + 1, FLAG_GET_CAUGHT))
- return 0;
+ return FALSE;
}
- for (i = 251; i < 384; i++)
+ for (i = NATIONAL_DEX_CELEBI; i < NATIONAL_DEX_RAYQUAZA; i++)
{
if (!GetSetPokedexFlag(i + 1, FLAG_GET_CAUGHT))
- return 0;
+ return FALSE;
}
- return 1;
+ return TRUE;
}
void sub_80C09B0(u16 a)
diff --git a/src/pokemon.c b/src/pokemon.c
index cb7be1715..8812e5bc4 100644
--- a/src/pokemon.c
+++ b/src/pokemon.c
@@ -2341,7 +2341,7 @@ void CreateMonWithEVSpread(struct Pokemon *mon, u16 species, u8 level, u8 fixedI
u16 evAmount;
u8 evsBits;
- CreateMon(mon, species, level, fixedIV, 0, 0, 0, 0);
+ CreateMon(mon, species, level, fixedIV, 0, 0, OT_ID_PLAYER_ID, 0);
evsBits = evSpread;
@@ -2373,7 +2373,7 @@ void CreateBattleTowerMon(struct Pokemon *mon, struct BattleTowerPokemon *src)
u8 language;
u8 value;
- CreateMon(mon, src->species, src->level, 0, 1, src->personality, 1, src->otId);
+ CreateMon(mon, src->species, src->level, 0, 1, src->personality, OT_ID_PRESET, src->otId);
for (i = 0; i < MAX_MON_MOVES; i++)
SetMonMoveSlot(mon, src->moves[i], i);
@@ -2435,7 +2435,7 @@ void CreateBattleTowerMon2(struct Pokemon *mon, struct BattleTowerPokemon *src,
else
level = src->level;
- CreateMon(mon, src->species, level, 0, 1, src->personality, 1, src->otId);
+ CreateMon(mon, src->species, level, 0, 1, src->personality, OT_ID_PRESET, src->otId);
for (i = 0; i < MAX_MON_MOVES; i++)
SetMonMoveSlot(mon, src->moves[i], i);
@@ -2497,7 +2497,7 @@ void CreateApprenticeMon(struct Pokemon *mon, const struct Apprentice *src, u8 m
0x1F,
TRUE,
personality,
- TRUE,
+ OT_ID_PRESET,
otId);
SetMonData(mon, MON_DATA_HELD_ITEM, &src->party[monId].item);
@@ -2527,7 +2527,7 @@ void CreateMonWithEVSpreadNatureOTID(struct Pokemon *mon, u16 species, u8 level,
i = Random32();
} while (nature != GetNatureFromPersonality(i));
- CreateMon(mon, species, level, fixedIV, TRUE, i, TRUE, otId);
+ CreateMon(mon, species, level, fixedIV, TRUE, i, OT_ID_PRESET, otId);
evsBits = evSpread;
for (i = 0; i < NUM_STATS; i++)
{
@@ -2989,11 +2989,11 @@ u16 MonTryLearningNewMove(struct Pokemon *mon, bool8 firstMove)
void DeleteFirstMoveAndGiveMoveToMon(struct Pokemon *mon, u16 move)
{
s32 i;
- u16 moves[4];
- u8 pp[4];
+ u16 moves[MAX_MON_MOVES];
+ u8 pp[MAX_MON_MOVES];
u8 ppBonuses;
- for (i = 0; i < 3; i++)
+ for (i = 0; i < MAX_MON_MOVES - 1; i++)
{
moves[i] = GetMonData(mon, MON_DATA_MOVE2 + i, NULL);
pp[i] = GetMonData(mon, MON_DATA_PP2 + i, NULL);
@@ -3016,11 +3016,11 @@ void DeleteFirstMoveAndGiveMoveToMon(struct Pokemon *mon, u16 move)
void DeleteFirstMoveAndGiveMoveToBoxMon(struct BoxPokemon *boxMon, u16 move)
{
s32 i;
- u16 moves[4];
- u8 pp[4];
+ u16 moves[MAX_MON_MOVES];
+ u8 pp[MAX_MON_MOVES];
u8 ppBonuses;
- for (i = 0; i < 3; i++)
+ for (i = 0; i < MAX_MON_MOVES - 1; i++)
{
moves[i] = GetBoxMonData(boxMon, MON_DATA_MOVE2 + i, NULL);
pp[i] = GetBoxMonData(boxMon, MON_DATA_PP2 + i, NULL);
@@ -3197,13 +3197,13 @@ s32 CalculateBaseDamage(struct BattlePokemon *attacker, struct BattlePokemon *de
if ((sideStatus & SIDE_STATUS_REFLECT) && gCritMultiplier == 1)
{
- if ((gBattleTypeFlags & BATTLE_TYPE_DOUBLE) && CountAliveMonsInBattle(2) == 2)
+ if ((gBattleTypeFlags & BATTLE_TYPE_DOUBLE) && CountAliveMonsInBattle(BATTLE_ALIVE_DEF_SIDE) == 2)
damage = 2 * (damage / 3);
else
damage /= 2;
}
- if ((gBattleTypeFlags & BATTLE_TYPE_DOUBLE) && gBattleMoves[move].target == 8 && CountAliveMonsInBattle(2) == 2)
+ if ((gBattleTypeFlags & BATTLE_TYPE_DOUBLE) && gBattleMoves[move].target == 8 && CountAliveMonsInBattle(BATTLE_ALIVE_DEF_SIDE) == 2)
damage /= 2;
// moves always do at least 1 damage.
@@ -3244,13 +3244,13 @@ s32 CalculateBaseDamage(struct BattlePokemon *attacker, struct BattlePokemon *de
if ((sideStatus & SIDE_STATUS_LIGHTSCREEN) && gCritMultiplier == 1)
{
- if ((gBattleTypeFlags & BATTLE_TYPE_DOUBLE) && CountAliveMonsInBattle(2) == 2)
+ if ((gBattleTypeFlags & BATTLE_TYPE_DOUBLE) && CountAliveMonsInBattle(BATTLE_ALIVE_DEF_SIDE) == 2)
damage = 2 * (damage / 3);
else
damage /= 2;
}
- if ((gBattleTypeFlags & BATTLE_TYPE_DOUBLE) && gBattleMoves[move].target == 8 && CountAliveMonsInBattle(2) == 2)
+ if ((gBattleTypeFlags & BATTLE_TYPE_DOUBLE) && gBattleMoves[move].target == 8 && CountAliveMonsInBattle(BATTLE_ALIVE_DEF_SIDE) == 2)
damage /= 2;
// are effects of weather negated with cloud nine or air lock
@@ -3304,21 +3304,21 @@ u8 CountAliveMonsInBattle(u8 caseId)
switch (caseId)
{
case BATTLE_ALIVE_EXCEPT_ACTIVE:
- for (i = 0; i < 4; i++)
+ for (i = 0; i < MAX_BATTLERS_COUNT; i++)
{
if (i != gActiveBattler && !(gAbsentBattlerFlags & gBitTable[i]))
retVal++;
}
break;
case BATTLE_ALIVE_ATK_SIDE:
- for (i = 0; i < 4; i++)
+ for (i = 0; i < MAX_BATTLERS_COUNT; i++)
{
if (GetBattlerSide(i) == GetBattlerSide(gBattlerAttacker) && !(gAbsentBattlerFlags & gBitTable[i]))
retVal++;
}
break;
case BATTLE_ALIVE_DEF_SIDE:
- for (i = 0; i < 4; i++)
+ for (i = 0; i < MAX_BATTLERS_COUNT; i++)
{
if (GetBattlerSide(i) == GetBattlerSide(gBattlerTarget) && !(gAbsentBattlerFlags & gBitTable[i]))
retVal++;
@@ -4329,7 +4329,7 @@ u8 SendMonToPC(struct Pokemon* mon)
{
s32 boxNo, boxPos;
- set_unknown_box_id(VarGet(VAR_STORAGE_UNKNOWN));
+ SetPCBoxToSendMon(VarGet(VAR_PC_BOX_TO_SEND_MON));
boxNo = StorageGetCurrentBox();
@@ -4344,9 +4344,9 @@ u8 SendMonToPC(struct Pokemon* mon)
CopyMon(checkingMon, &mon->box, sizeof(mon->box));
gSpecialVar_MonBoxId = boxNo;
gSpecialVar_MonBoxPos = boxPos;
- if (get_unknown_box_id() != boxNo)
- FlagClear(FLAG_SYS_STORAGE_UNKNOWN_FLAG);
- VarSet(VAR_STORAGE_UNKNOWN, boxNo);
+ if (GetPCBoxToSendMon() != boxNo)
+ FlagClear(FLAG_SHOWN_BOX_WAS_FULL_MESSAGE);
+ VarSet(VAR_PC_BOX_TO_SEND_MON, boxNo);
return MON_GIVEN_TO_PC;
}
}
@@ -4424,7 +4424,7 @@ u8 GetMonsStateToDoubles_2(void)
return (aliveCount > 1) ? PLAYER_HAS_TWO_USABLE_MONS : PLAYER_HAS_ONE_USABLE_MON;
}
-u8 GetAbilityBySpecies(u16 species, bool8 abilityNum)
+u8 GetAbilityBySpecies(u16 species, u8 abilityNum)
{
if (abilityNum)
gLastUsedAbility = gBaseStats[species].abilities[1];
@@ -4458,7 +4458,7 @@ void CreateSecretBaseEnemyParty(struct SecretBase *secretBaseRecord)
15,
1,
gBattleResources->secretBase->party.personality[i],
- 2,
+ OT_ID_RANDOM_NO_SHINY,
0);
SetMonData(&gEnemyParty[i], MON_DATA_HELD_ITEM, &gBattleResources->secretBase->party.heldItems[i]);
@@ -4817,11 +4817,11 @@ bool8 PokemonUseItemEffects(struct Pokemon *mon, u16 item, u8 partyIndex, u8 mov
{
if (evCount >= MAX_TOTAL_EVS)
return TRUE;
- if (dataSigned >= 100)
+ if (dataSigned >= EV_ITEM_RAISE_LIMIT)
break;
- if (dataSigned + r2 > 100)
- r5 = 100 - (dataSigned + r2) + r2;
+ if (dataSigned + r2 > EV_ITEM_RAISE_LIMIT)
+ r5 = EV_ITEM_RAISE_LIMIT - (dataSigned + r2) + r2;
else
r5 = r2;
@@ -5021,11 +5021,11 @@ bool8 PokemonUseItemEffects(struct Pokemon *mon, u16 item, u8 partyIndex, u8 mov
{
if (evCount >= MAX_TOTAL_EVS)
return TRUE;
- if (dataSigned >= 100)
+ if (dataSigned >= EV_ITEM_RAISE_LIMIT)
break;
- if (dataSigned + r2 > 100)
- r5 = 100 - (dataSigned + r2) + r2;
+ if (dataSigned + r2 > EV_ITEM_RAISE_LIMIT)
+ r5 = EV_ITEM_RAISE_LIMIT - (dataSigned + r2) + r2;
else
r5 = r2;
@@ -6096,7 +6096,7 @@ u32 CanSpeciesLearnTMHM(u16 species, u8 tm)
u8 GetMoveRelearnerMoves(struct Pokemon *mon, u16 *moves)
{
- u16 learnedMoves[4];
+ u16 learnedMoves[MAX_MON_MOVES];
u8 numMoves = 0;
u16 species = GetMonData(mon, MON_DATA_SPECIES, 0);
u8 level = GetMonData(mon, MON_DATA_LEVEL, 0);
@@ -6146,7 +6146,7 @@ u8 GetLevelUpMovesBySpecies(u16 species, u16 *moves)
u8 GetNumberOfRelearnableMoves(struct Pokemon *mon)
{
- u16 learnedMoves[4];
+ u16 learnedMoves[MAX_MON_MOVES];
u16 moves[20];
u8 numMoves = 0;
u16 species = GetMonData(mon, MON_DATA_SPECIES2, 0);
@@ -6683,7 +6683,7 @@ u8 sub_806EF08(u8 arg0)
var = (arg0 != 0) ? 2 : 0;
break;
}
- for (i = 0; i < 4; i++)
+ for (i = 0; i < MAX_LINK_PLAYERS; i++)
{
if (gLinkPlayers[i].id == (s16)(var))
break;
@@ -6706,7 +6706,7 @@ u8 sub_806EF84(u8 arg0, u8 arg1)
var = (arg0 != 0) ? 2 : 0;
break;
}
- for (i = 0; i < 4; i++)
+ for (i = 0; i < MAX_LINK_PLAYERS; i++)
{
if (gLinkPlayers[i].id == (s16)(var))
break;
diff --git a/src/pokemon_storage_system.c b/src/pokemon_storage_system.c
index 59ec8f4f1..fa9e61504 100644
--- a/src/pokemon_storage_system.c
+++ b/src/pokemon_storage_system.c
@@ -453,7 +453,7 @@ EWRAM_DATA static bool8 sInPartyMenu = 0;
EWRAM_DATA static u8 sCurrentBoxOption = 0;
EWRAM_DATA static u8 gUnknown_02039D0E = 0;
EWRAM_DATA static u8 sWhichToReshow = 0;
-EWRAM_DATA static u8 gUnknown_02039D10 = 0;
+EWRAM_DATA static u8 sLastUsedBox = 0;
EWRAM_DATA static u16 gUnknown_02039D12 = 0;
EWRAM_DATA static struct Pokemon gUnknown_02039D14 = {0};
EWRAM_DATA static s8 sBoxCursorArea = 0;
@@ -464,9 +464,6 @@ EWRAM_DATA static u8 sMovingMonOrigBoxPos = 0;
EWRAM_DATA static bool8 sCanOnlyMove = 0;
// This file's functions.
-#if !defined(NONMATCHING) && MODERN
-#define static
-#endif
static void CreatePCMenu(u8 whichMenu, s16 *windowIdPtr);
static void Cb2_EnterPSS(u8 boxOption);
static u8 GetCurrentBoxOption(void);
@@ -2170,7 +2167,7 @@ static void Cb2_EnterPSS(u8 boxOption)
gUnknown_02039D12 = 0;
sPSSData->state = 0;
sPSSData->taskId = CreateTask(Cb_InitPSS, 3);
- gUnknown_02039D10 = StorageGetCurrentBox();
+ sLastUsedBox = StorageGetCurrentBox();
SetMainCallback2(Cb2_PSS);
}
}
@@ -4369,10 +4366,10 @@ static bool8 DoShowPartyMenu(void)
static void sub_80CABE0(void)
{
- if (gUnknown_02039D10 != StorageGetCurrentBox())
+ if (sLastUsedBox != StorageGetCurrentBox())
{
- FlagClear(FLAG_SYS_STORAGE_UNKNOWN_FLAG);
- VarSet(VAR_STORAGE_UNKNOWN, StorageGetCurrentBox());
+ FlagClear(FLAG_SHOWN_BOX_WAS_FULL_MESSAGE);
+ VarSet(VAR_PC_BOX_TO_SEND_MON, StorageGetCurrentBox());
}
}
diff --git a/src/pokemon_summary_screen.c b/src/pokemon_summary_screen.c
index 79aac4b5e..8697c557f 100644
--- a/src/pokemon_summary_screen.c
+++ b/src/pokemon_summary_screen.c
@@ -121,8 +121,8 @@ static EWRAM_DATA struct PokemonSummaryScreenData
u8 metGame; // 0xB
u32 pid; // 0xC
u32 exp; // 0x10
- u16 moves[4]; // 0x14
- u8 pp[4]; // 0x1C
+ u16 moves[MAX_MON_MOVES]; // 0x14
+ u8 pp[MAX_MON_MOVES]; // 0x1C
u16 currentHP; // 0x20
u16 maxHP; // 0x22
u16 atk; // 0x24
@@ -224,10 +224,10 @@ static void DrawExperienceProgressBar(struct Pokemon* mon);
static void DrawContestMoveHearts(u16 move);
static void LimitEggSummaryPageDisplay(void);
static void ResetWindows(void);
-static void sub_81C25E8(void);
-static void sub_81C2628(void);
-static void sub_81C2794(void);
-static void sub_81C27DC(struct Pokemon *mon, u16 a);
+static void PrintMonInfo(void);
+static void PrintNotEggInfo(void);
+static void PrintEggInfo(void);
+static void PrintGenderSymbol(struct Pokemon *mon, u16 a);
static void PrintPageNamesAndStatsPageToWindows(void);
static void CreatePageWindowTilemaps(u8 a);
static void ClearPageWindowTilemaps(u8 a);
@@ -1173,7 +1173,7 @@ static bool8 SummaryScreen_LoadGraphics(void)
gMain.state++;
break;
case 11:
- sub_81C25E8();
+ PrintMonInfo();
gMain.state++;
break;
case 12:
@@ -1449,7 +1449,7 @@ static void sub_81C0348(void)
DrawPokerusCuredSymbol(&sMonSummaryScreen->currentMon);
}
-static void sub_81C0434(void)
+static void FreeSummaryScreen(void)
{
FreeAllWindowBuffers();
Free(sMonSummaryScreen);
@@ -1474,7 +1474,7 @@ static void CloseSummaryScreen(u8 taskId)
m4aMPlayVolumeControl(&gMPlayInfo_BGM, 0xFFFF, 0x100);
if (gMonSpritesGfxPtr == 0)
sub_806F47C(0);
- sub_81C0434();
+ FreeSummaryScreen();
DestroyTask(taskId);
}
}
@@ -1625,7 +1625,7 @@ static void sub_81C0704(u8 taskId)
SetTypeIcons();
break;
case 10:
- sub_81C25E8();
+ PrintMonInfo();
break;
case 11:
PrintPageSpecificText(sMonSummaryScreen->currPageIndex);
@@ -2571,7 +2571,7 @@ static void DrawPokerusCuredSymbol(struct Pokemon *mon) // This checks if the mo
schedule_bg_copy_tilemap_to_vram(3);
}
-static void sub_81C228C(bool8 isMonShiny)
+static void SetDexNumberColor(bool8 isMonShiny)
{
if (!isMonShiny)
sub_8199C30(3, 1, 4, 8, 8, 0);
@@ -2695,19 +2695,19 @@ static void SummaryScreen_PrintTextOnWindow(u8 windowId, const u8 *string, u8 x,
AddTextPrinterParameterized4(windowId, 1, x, y, 0, lineSpacing, sTextColors_861CD2C[colorId], 0, string);
}
-static void sub_81C25E8(void)
+static void PrintMonInfo(void)
{
FillWindowPixelBuffer(PSS_LABEL_WINDOW_PORTRAIT_DEX_NUMBER, PIXEL_FILL(0));
FillWindowPixelBuffer(PSS_LABEL_WINDOW_PORTRAIT_NICKNAME, PIXEL_FILL(0));
FillWindowPixelBuffer(PSS_LABEL_WINDOW_PORTRAIT_SPECIES, PIXEL_FILL(0));
if (!sMonSummaryScreen->summary.isEgg)
- sub_81C2628();
+ PrintNotEggInfo();
else
- sub_81C2794();
+ PrintEggInfo();
schedule_bg_copy_tilemap_to_vram(0);
}
-static void sub_81C2628(void)
+static void PrintNotEggInfo(void)
{
u8 strArray[16];
struct Pokemon *mon = &sMonSummaryScreen->currentMon;
@@ -2721,12 +2721,12 @@ static void sub_81C2628(void)
if (!IsMonShiny(mon))
{
SummaryScreen_PrintTextOnWindow(PSS_LABEL_WINDOW_PORTRAIT_DEX_NUMBER, gStringVar1, 0, 1, 0, 1);
- sub_81C228C(FALSE);
+ SetDexNumberColor(FALSE);
}
else
{
SummaryScreen_PrintTextOnWindow(PSS_LABEL_WINDOW_PORTRAIT_DEX_NUMBER, gStringVar1, 0, 1, 0, 7);
- sub_81C228C(TRUE);
+ SetDexNumberColor(TRUE);
}
PutWindowTilemap(PSS_LABEL_WINDOW_PORTRAIT_DEX_NUMBER);
}
@@ -2734,9 +2734,9 @@ static void sub_81C2628(void)
{
ClearWindowTilemap(PSS_LABEL_WINDOW_PORTRAIT_DEX_NUMBER);
if (!IsMonShiny(mon))
- sub_81C228C(FALSE);
+ SetDexNumberColor(FALSE);
else
- sub_81C228C(TRUE);
+ SetDexNumberColor(TRUE);
}
StringCopy(gStringVar1, &gText_LevelSymbol[0]);
ConvertIntToDecimalStringN(gStringVar2, summary->level, 0, 3);
@@ -2747,12 +2747,12 @@ static void sub_81C2628(void)
strArray[0] = CHAR_SLASH;
StringCopy(&strArray[1], &gSpeciesNames[summary->species2][0]);
SummaryScreen_PrintTextOnWindow(PSS_LABEL_WINDOW_PORTRAIT_SPECIES, &strArray[0], 0, 1, 0, 1);
- sub_81C27DC(mon, summary->species2);
+ PrintGenderSymbol(mon, summary->species2);
PutWindowTilemap(PSS_LABEL_WINDOW_PORTRAIT_NICKNAME);
PutWindowTilemap(PSS_LABEL_WINDOW_PORTRAIT_SPECIES);
}
-static void sub_81C2794(void)
+static void PrintEggInfo(void)
{
GetMonNickname(&sMonSummaryScreen->currentMon, gStringVar1);
SummaryScreen_PrintTextOnWindow(PSS_LABEL_WINDOW_PORTRAIT_NICKNAME, gStringVar1, 0, 1, 0, 1);
@@ -2761,7 +2761,7 @@ static void sub_81C2794(void)
ClearWindowTilemap(PSS_LABEL_WINDOW_PORTRAIT_SPECIES);
}
-static void sub_81C27DC(struct Pokemon *mon, u16 species)
+static void PrintGenderSymbol(struct Pokemon *mon, u16 species)
{
if (species != SPECIES_NIDORAN_M && species != SPECIES_NIDORAN_F)
{
diff --git a/src/pokenav_match_call_data.c b/src/pokenav_match_call_data.c
index d2d89babf..5379ee88e 100644
--- a/src/pokenav_match_call_data.c
+++ b/src/pokenav_match_call_data.c
@@ -6,7 +6,9 @@
#include "battle.h"
#include "gym_leader_rematch.h"
#include "match_call.h"
+#include "pokenav.h"
#include "constants/region_map_sections.h"
+#include "constants/trainers.h"
// Static type declarations
@@ -94,11 +96,11 @@ typedef union {
const struct MatchCallStruct5 *type5;
} match_call_t;
-struct UnkStruct_08625388 {
+struct MatchCallOverride {
u16 idx;
- u16 v2;
- u32 v4;
- const u8 *v8[4];
+ u16 facilityClass;
+ u32 flag;
+ const u8 *flavorTexts[4];
};
// Static RAM declarations
@@ -123,11 +125,11 @@ static bool32 MatchCall_IsRematchable_Type2(match_call_t);
static bool32 MatchCall_IsRematchable_Type3(match_call_t);
static bool32 MatchCall_IsRematchable_Type4(match_call_t);
-static bool32 sub_81D1840(match_call_t);
-static bool32 sub_81D1844(match_call_t);
-static bool32 sub_81D1848(match_call_t);
-static bool32 sub_81D184C(match_call_t);
-static bool32 sub_81D1850(match_call_t);
+static bool32 MatchCall_HasCheckPage_Type0(match_call_t);
+static bool32 MatchCall_HasCheckPage_Type1(match_call_t);
+static bool32 MatchCall_HasCheckPage_Type2(match_call_t);
+static bool32 MatchCall_HasCheckPage_Type3(match_call_t);
+static bool32 MatchCall_HasCheckPage_Type4(match_call_t);
static u32 MatchCall_GetRematchTableIdx_Type0(match_call_t);
static u32 MatchCall_GetRematchTableIdx_Type1(match_call_t);
@@ -423,10 +425,10 @@ static const match_call_text_data_t sMayTextScripts[] = {
{ NULL, 0xFFFF, 0xFFFF }
};
-static const struct MatchCallStruct4 sBrendanMatchCallHeader =
+static const struct MatchCallStruct4 sMayMatchCallHeader =
{
.type = 4,
- .gender = MALE,
+ .gender = MALE, //Gender of player
.flag = FLAG_ENABLE_RIVAL_MATCH_CALL,
.desc = gMayBrendanMatchCallDesc,
.name = gExpandedPlaceholder_May,
@@ -452,10 +454,10 @@ static const match_call_text_data_t sBrendanTextScripts[] = {
{ NULL, 0xFFFF, 0xFFFF }
};
-static const struct MatchCallStruct4 sMayMatchCallHeader =
+static const struct MatchCallStruct4 sBrendanMatchCallHeader =
{
.type = 4,
- .gender = FEMALE,
+ .gender = FEMALE, //Gender of player
.flag = FLAG_ENABLE_RIVAL_MATCH_CALL,
.desc = gMayBrendanMatchCallDesc,
.name = gExpandedPlaceholder_Brendan,
@@ -727,27 +729,27 @@ static const struct MatchCallStruct5 sWallaceMatchCallHeader =
};
static const match_call_t sMatchCallHeaders[] = {
- {.type0 = &sMrStoneMatchCallHeader},
- {.type3 = &sProfBirchMatchCallHeader},
- {.type4 = &sMayMatchCallHeader},
- {.type4 = &sBrendanMatchCallHeader},
- {.type2 = &sWallyMatchCallHeader},
- {.type5 = &sNormanMatchCallHeader},
- {.type0 = &sMomMatchCallHeader},
- {.type0 = &sStevenMatchCallHeader},
- {.type0 = &sScottMatchCallHeader},
- {.type5 = &sRoxanneMatchCallHeader},
- {.type5 = &sBrawlyMatchCallHeader},
- {.type5 = &sWattsonMatchCallHeader},
- {.type5 = &sFlanneryMatchCallHeader},
- {.type5 = &sWinonaMatchCallHeader},
- {.type5 = &sTateLizaMatchCallHeader},
- {.type5 = &sJuanMatchCallHeader},
- {.type5 = &sSidneyMatchCallHeader},
- {.type5 = &sPhoebeMatchCallHeader},
- {.type5 = &sGlaciaMatchCallHeader},
- {.type5 = &sDrakeMatchCallHeader},
- {.type5 = &sWallaceMatchCallHeader}
+ [MC_HEADER_MR_STONE] = {.type0 = &sMrStoneMatchCallHeader},
+ [MC_HEADER_PROF_BIRCH] = {.type3 = &sProfBirchMatchCallHeader},
+ [MC_HEADER_BRENDAN] = {.type4 = &sBrendanMatchCallHeader},
+ [MC_HEADER_MAY] = {.type4 = &sMayMatchCallHeader},
+ [MC_HEADER_WALLY] = {.type2 = &sWallyMatchCallHeader},
+ [MC_HEADER_NORMAN] = {.type5 = &sNormanMatchCallHeader},
+ [MC_HEADER_MOM] = {.type0 = &sMomMatchCallHeader},
+ [MC_HEADER_STEVEN] = {.type0 = &sStevenMatchCallHeader},
+ [MC_HEADER_SCOTT] = {.type0 = &sScottMatchCallHeader},
+ [MC_HEADER_ROXANNE] = {.type5 = &sRoxanneMatchCallHeader},
+ [MC_HEADER_BRAWLY] = {.type5 = &sBrawlyMatchCallHeader},
+ [MC_HEADER_WATTSON] = {.type5 = &sWattsonMatchCallHeader},
+ [MC_HEADER_FLANNERY] = {.type5 = &sFlanneryMatchCallHeader},
+ [MC_HEADER_WINONA] = {.type5 = &sWinonaMatchCallHeader},
+ [MC_HEADER_TATE_LIZA] = {.type5 = &sTateLizaMatchCallHeader},
+ [MC_HEADER_JUAN] = {.type5 = &sJuanMatchCallHeader},
+ [MC_HEADER_SIDNEY] = {.type5 = &sSidneyMatchCallHeader},
+ [MC_HEADER_PHOEBE] = {.type5 = &sPhoebeMatchCallHeader},
+ [MC_HEADER_GLACIA] = {.type5 = &sGlaciaMatchCallHeader},
+ [MC_HEADER_DRAKE] = {.type5 = &sDrakeMatchCallHeader},
+ [MC_HEADER_WALLACE] = {.type5 = &sWallaceMatchCallHeader}
};
static bool32 (*const sMatchCallGetFlagFuncs[])(match_call_t) = {
@@ -774,12 +776,12 @@ static bool32 (*const sMatchCall_IsRematchableFunctions[])(match_call_t) = {
MatchCall_IsRematchable_Type3
};
-static bool32 (*const gUnknown_08625338[])(match_call_t) = {
- sub_81D1840,
- sub_81D1844,
- sub_81D1848,
- sub_81D184C,
- sub_81D1850
+static bool32 (*const sMatchCall_HasCheckPageFunctions[])(match_call_t) = {
+ MatchCall_HasCheckPage_Type0,
+ MatchCall_HasCheckPage_Type1,
+ MatchCall_HasCheckPage_Type2,
+ MatchCall_HasCheckPage_Type4,
+ MatchCall_HasCheckPage_Type3
};
static u32 (*const sMatchCall_GetRematchTableIdxFunctions[])(match_call_t) = {
@@ -806,11 +808,11 @@ static void (*const sMatchCall_GetNameAndDescFunctions[])(match_call_t, const u8
MatchCall_GetNameAndDesc_Type3
};
-static const struct UnkStruct_08625388 sMatchCallCheckPageOverrides[] = {
- { 7, 0x4B, 0xffff, { gMatchCallStevenStrategyText, gMatchCall_StevenTrainersPokemonText, gMatchCall_StevenSelfIntroductionText_Line1_BeforeMeteorFallsBattle, gMatchCall_StevenSelfIntroductionText_Line2_BeforeMeteorFallsBattle } }, // STEVEN
- { 7, 0x4B, FLAG_DEFEATED_MOSSDEEP_GYM, { gMatchCallStevenStrategyText, gMatchCall_StevenTrainersPokemonText, gMatchCall_StevenSelfIntroductionText_Line1_AfterMeteorFallsBattle, gMatchCall_StevenSelfIntroductionText_Line2_AfterMeteorFallsBattle } }, // STEVEN
- { 2, 0x3c, 0xffff, { gMatchCall_BrendanStrategyText, gMatchCall_BrendanTrainersPokemonText, gMatchCall_BrendanSelfIntroductionText_Line1, gMatchCall_BrendanSelfIntroductionText_Line2 } }, // Brendan
- { 3, 0x3f, 0xffff, { gMatchCall_MayStrategyText, gMatchCall_MayTrainersPokemonText, gMatchCall_MaySelfIntroductionText_Line1, gMatchCall_MaySelfIntroductionText_Line2 } } // May
+static const struct MatchCallOverride sMatchCallCheckPageOverrides[] = {
+ { MC_HEADER_STEVEN, FACILITY_CLASS_STEVEN, 0xFFFF, { gMatchCallStevenStrategyText, gMatchCall_StevenTrainersPokemonText, gMatchCall_StevenSelfIntroductionText_Line1_BeforeMeteorFallsBattle, gMatchCall_StevenSelfIntroductionText_Line2_BeforeMeteorFallsBattle } }, // STEVEN
+ { MC_HEADER_STEVEN, FACILITY_CLASS_STEVEN, FLAG_DEFEATED_MOSSDEEP_GYM, { gMatchCallStevenStrategyText, gMatchCall_StevenTrainersPokemonText, gMatchCall_StevenSelfIntroductionText_Line1_AfterMeteorFallsBattle, gMatchCall_StevenSelfIntroductionText_Line2_AfterMeteorFallsBattle } }, // STEVEN
+ { MC_HEADER_BRENDAN, FACILITY_CLASS_BRENDAN, 0xFFFF, { gMatchCall_BrendanStrategyText, gMatchCall_BrendanTrainersPokemonText, gMatchCall_BrendanSelfIntroductionText_Line1, gMatchCall_BrendanSelfIntroductionText_Line2 } }, // Brendan
+ { MC_HEADER_MAY, FACILITY_CLASS_MAY, 0xFFFF, { gMatchCall_MayStrategyText, gMatchCall_MayTrainersPokemonText, gMatchCall_MaySelfIntroductionText_Line1, gMatchCall_MaySelfIntroductionText_Line2 } } // May
};
// .text
@@ -981,7 +983,7 @@ static bool32 MatchCall_IsRematchable_Type3(match_call_t matchCall)
return FALSE;
}
-bool32 sub_81D17E8(u32 idx)
+bool32 MatchCall_HasCheckPage(u32 idx)
{
match_call_t matchCall;
u32 i;
@@ -990,7 +992,7 @@ bool32 sub_81D17E8(u32 idx)
return FALSE;
matchCall = sMatchCallHeaders[idx];
i = MatchCallGetFunctionIndex(matchCall);
- if (gUnknown_08625338[i](matchCall))
+ if (sMatchCall_HasCheckPageFunctions[i](matchCall))
return TRUE;
for (i = 0; i < ARRAY_COUNT(sMatchCallCheckPageOverrides); i++)
{
@@ -1000,27 +1002,27 @@ bool32 sub_81D17E8(u32 idx)
return FALSE;
}
-static bool32 sub_81D1840(match_call_t matchCall)
+static bool32 MatchCall_HasCheckPage_Type0(match_call_t matchCall)
{
return FALSE;
}
-static bool32 sub_81D1844(match_call_t matchCall)
+static bool32 MatchCall_HasCheckPage_Type1(match_call_t matchCall)
{
return TRUE;
}
-static bool32 sub_81D1848(match_call_t matchCall)
+static bool32 MatchCall_HasCheckPage_Type2(match_call_t matchCall)
{
return TRUE;
}
-static bool32 sub_81D184C(match_call_t matchCall)
+static bool32 MatchCall_HasCheckPage_Type4(match_call_t matchCall)
{
return FALSE;
}
-static bool32 sub_81D1850(match_call_t matchCall)
+static bool32 MatchCall_HasCheckPage_Type3(match_call_t matchCall)
{
return FALSE;
}
@@ -1210,7 +1212,7 @@ static void MatchCall_GetNameAndDescByRematchIdx(u32 idx, const u8 **desc, const
*name = trainer->trainerName;
}
-const u8 *sub_81D1B40(u32 idx, u32 offset)
+const u8 *MatchCall_GetOverrideFlavorText(u32 idx, u32 offset)
{
u32 i;
@@ -1224,24 +1226,24 @@ const u8 *sub_81D1B40(u32 idx, u32 offset)
break;
if (sMatchCallCheckPageOverrides[i + 1].idx != idx)
break;
- if (!FlagGet(sMatchCallCheckPageOverrides[i + 1].v4))
+ if (!FlagGet(sMatchCallCheckPageOverrides[i + 1].flag))
break;
i++;
}
- return sMatchCallCheckPageOverrides[i].v8[offset];
+ return sMatchCallCheckPageOverrides[i].flavorTexts[offset];
}
}
return NULL;
}
-int sub_81D1BD0(u32 idx)
+int MatchCall_GetOverrideFacilityClass(u32 idx)
{
u32 i;
for (i = 0; i < ARRAY_COUNT(sMatchCallCheckPageOverrides); i++)
{
if (sMatchCallCheckPageOverrides[i].idx == idx)
- return sMatchCallCheckPageOverrides[i].v2;
+ return sMatchCallCheckPageOverrides[i].facilityClass;
}
return -1;
}
diff --git a/src/pokenav_unk_3.c b/src/pokenav_unk_3.c
index ffb1e0a4a..c66434192 100755
--- a/src/pokenav_unk_3.c
+++ b/src/pokenav_unk_3.c
@@ -84,7 +84,7 @@ static u32 sub_81CAB44(struct Pokenav3Struct *state)
state->callback = sub_81CAC04;
state->unk0 = 0;
selectedMatchCall = GetSelectedMatchCall();
- if (!state->unk1C[selectedMatchCall].boxId || sub_81D17E8(state->unk1C[selectedMatchCall].unk6))
+ if (!state->unk1C[selectedMatchCall].boxId || MatchCall_HasCheckPage(state->unk1C[selectedMatchCall].unk6))
{
state->unk4 = gUnknown_0862250A;
state->unk2 = 2;
@@ -212,7 +212,7 @@ static u32 sub_81CAD20(s32 taskState)
state->unkA++;
}
- if (++state->unk8 >= 21) // TODO: This is the size of sMatchCallHeaders
+ if (++state->unk8 >= MC_HEADER_COUNT)
{
state->unkC = state->unk8;
state->unk8 = 0;
@@ -331,7 +331,7 @@ int sub_81CAF04(int index)
return gTrainers[index].trainerPic;
}
- index = sub_81D1BD0(var0);
+ index = MatchCall_GetOverrideFacilityClass(var0);
return gFacilityClassToPicIndex[index];
}
@@ -358,7 +358,7 @@ const u8 *sub_81CAFD8(int index, int textType)
{
var0 = MatchCall_GetRematchTableIdx(state->unk1C[index].unk6);
if (var0 == REMATCH_TABLE_ENTRIES)
- return sub_81D1B40(state->unk1C[index].unk6, textType);
+ return MatchCall_GetOverrideFlavorText(state->unk1C[index].unk6, textType);
}
else
{
@@ -426,7 +426,7 @@ int sub_81CB0E4(int index)
{
if (!state->unk1C[index].boxId)
return count;
- if (sub_81D17E8(state->unk1C[index].unk6))
+ if (MatchCall_HasCheckPage(state->unk1C[index].unk6))
return count;
count++;
@@ -443,7 +443,7 @@ int sub_81CB128(int index)
{
if (!state->unk1C[index].boxId)
return count;
- if (sub_81D17E8(state->unk1C[index].unk6))
+ if (MatchCall_HasCheckPage(state->unk1C[index].unk6))
return count;
count--;
@@ -462,7 +462,7 @@ bool32 unref_sub_81CB16C(void)
return TRUE;
}
- for (i = 0; i < 21; i++) // TODO: This is the size of sMatchCallHeaders
+ for (i = 0; i < MC_HEADER_COUNT; i++)
{
if (MatchCallFlagGetByIndex(i))
{
diff --git a/src/record_mixing.c b/src/record_mixing.c
index 6cb145c80..32e0404b9 100644
--- a/src/record_mixing.c
+++ b/src/record_mixing.c
@@ -701,10 +701,10 @@ static void ReceiveLilycoveLadyData(LilycoveLady *lilycoveLady, size_t recordSiz
}
memcpy(sLilycoveLadySave, (void *)lilycoveLady + recordSize * mixIndices[which], sizeof(LilycoveLady));
- sub_818DA78();
+ ResetLilycoveLadyForRecordMix();
if (dest != NULL)
{
- sub_818E570(dest);
+ QuizLadyClearQuestionForRecordMix(dest);
free(dest);
}
}
diff --git a/src/recorded_battle.c b/src/recorded_battle.c
index 9e03d57f6..432c5dbe6 100644
--- a/src/recorded_battle.c
+++ b/src/recorded_battle.c
@@ -37,8 +37,8 @@ struct PlayerInfo
struct MovePp
{
- u16 moves[4];
- u8 pp[4];
+ u16 moves[MAX_MON_MOVES];
+ u8 pp[MAX_MON_MOVES];
};
struct RecordedBattleSave
@@ -91,7 +91,7 @@ EWRAM_DATA static u32 sBattleFlags = 0;
EWRAM_DATA static u32 sAI_Scripts = 0;
EWRAM_DATA static struct Pokemon sSavedPlayerParty[PARTY_SIZE] = {0};
EWRAM_DATA static struct Pokemon sSavedOpponentParty[PARTY_SIZE] = {0};
-EWRAM_DATA static u16 sPlayerMonMoves[2][4] = {0};
+EWRAM_DATA static u16 sPlayerMonMoves[2][MAX_MON_MOVES] = {0};
EWRAM_DATA static struct PlayerInfo sPlayers[MAX_BATTLERS_COUNT] = {0};
EWRAM_DATA static u8 sUnknown_0203CCD0 = 0;
EWRAM_DATA static u8 sRecordMixFriendName[PLAYER_NAME_LENGTH + 1] = {0};
@@ -766,11 +766,11 @@ void sub_818603C(u8 arg0)
{
if (sBattleRecords[battlerId][sRecordedBytesNo[battlerId]] == ACTION_MOVE_CHANGE)
{
- u8 ppBonuses[4];
- u8 array1[4];
- u8 array2[4];
+ u8 ppBonuses[MAX_MON_MOVES];
+ u8 array1[MAX_MON_MOVES];
+ u8 array2[MAX_MON_MOVES];
struct MovePp movePp;
- u8 array3[8];
+ u8 array3[(MAX_MON_MOVES * 2)];
u8 var;
RecordedBattle_GetBattlerAction(battlerId);
diff --git a/src/region_map.c b/src/region_map.c
index a98964e5c..ea2cbfa6a 100644
--- a/src/region_map.c
+++ b/src/region_map.c
@@ -24,6 +24,7 @@
#include "region_map.h"
#include "constants/region_map_sections.h"
#include "heal_location.h"
+#include "constants/field_specials.h"
#include "constants/heal_locations.h"
#include "constants/map_types.h"
#include "constants/rgb.h"
@@ -1144,20 +1145,20 @@ static void RegionMap_InitializeStateBasedOnSSTidalLocation(void)
x = 0;
switch (GetSSTidalLocation(&mapGroup, &mapNum, &xOnMap, &yOnMap))
{
- case 1:
+ case SS_TIDAL_LOCATION_SLATEPORT:
gRegionMap->mapSecId = MAPSEC_SLATEPORT_CITY;
break;
- case 2:
+ case SS_TIDAL_LOCATION_LILYCOVE:
gRegionMap->mapSecId = MAPSEC_LILYCOVE_CITY;
break;
- case 3:
+ case SS_TIDAL_LOCATION_ROUTE124:
gRegionMap->mapSecId = MAPSEC_ROUTE_124;
break;
- case 4:
+ case SS_TIDAL_LOCATION_ROUTE131:
gRegionMap->mapSecId = MAPSEC_ROUTE_131;
break;
default:
- case 0:
+ case SS_TIDAL_LOCATION_OTHER:
mapHeader = Overworld_GetMapHeaderByGroupAndId(mapGroup, mapNum);
gRegionMap->mapSecId = mapHeader->regionMapSectionId;
diff --git a/src/roamer.c b/src/roamer.c
index be45642e0..8a67234e3 100644
--- a/src/roamer.c
+++ b/src/roamer.c
@@ -67,7 +67,7 @@ static void CreateInitialRoamerMon(bool16 createLatios)
else
(&gSaveBlock1Ptr->roamer)->species = SPECIES_LATIOS;
- CreateMon(&gEnemyParty[0], (&gSaveBlock1Ptr->roamer)->species, 40, 0x20, 0, 0, 0, 0);
+ CreateMon(&gEnemyParty[0], (&gSaveBlock1Ptr->roamer)->species, 40, 0x20, 0, 0, OT_ID_PLAYER_ID, 0);
(&gSaveBlock1Ptr->roamer)->level = 40;
(&gSaveBlock1Ptr->roamer)->status = 0;
(&gSaveBlock1Ptr->roamer)->active = TRUE;
diff --git a/src/rock.c b/src/rock.c
index f05816362..6f6e20955 100644
--- a/src/rock.c
+++ b/src/rock.c
@@ -508,7 +508,7 @@ void AnimDirtParticleAcrossScreen(struct Sprite *sprite)
sprite->pos1.x = 304;
gBattleAnimArgs[1] = -gBattleAnimArgs[1];
sprite->data[5] = 1;
- sprite->oam.matrixNum = 8;
+ sprite->oam.matrixNum = ST_OAM_HFLIP;
}
else
{
diff --git a/src/scrcmd.c b/src/scrcmd.c
index 57cd3edbe..4c8895ab8 100644
--- a/src/scrcmd.c
+++ b/src/scrcmd.c
@@ -62,7 +62,7 @@ static EWRAM_DATA u16 sMovingNpcMapBank = 0;
static EWRAM_DATA u16 sMovingNpcMapId = 0;
static EWRAM_DATA u16 sFieldEffectScriptId = 0;
-static u8 gUnknown_03000F30;
+static u8 gBrailleWindowId;
extern const SpecialFunc gSpecials[];
extern const u8 *gStdScripts[];
@@ -466,6 +466,9 @@ bool8 ScrCmd_addvar(struct ScriptContext *ctx)
{
u16 *ptr = GetVarPointer(ScriptReadHalfword(ctx));
*ptr += ScriptReadHalfword(ctx);
+ // Note: addvar doesn't support adding from a variable in vanilla. If you were to
+ // add a VarGet() to the above, make sure you change the `addvar VAR_0x8006, 65535`
+ // in the contest scripts to `subvar VAR_0x8006, 1`, else contests will break.
return FALSE;
}
@@ -1102,7 +1105,7 @@ bool8 ScrCmd_setobjectxyperm(struct ScriptContext *ctx)
return FALSE;
}
-bool8 ScrCmd_moveobjectoffscreen(struct ScriptContext *ctx)
+bool8 ScrCmd_copyobjectxytoperm(struct ScriptContext *ctx)
{
u16 localId = VarGet(ScriptReadHalfword(ctx));
@@ -1244,7 +1247,7 @@ bool8 ScrCmd_releaseall(struct ScriptContext *ctx)
HideFieldMessageBox();
playerObjectId = GetEventObjectIdByLocalIdAndMap(EVENT_OBJ_ID_PLAYER, 0, 0);
EventObjectClearHeldMovementIfFinished(&gEventObjects[playerObjectId]);
- sub_80D338C();
+ ScriptMovement_UnfreezeEventObjects();
UnfreezeEventObjects();
return FALSE;
}
@@ -1258,7 +1261,7 @@ bool8 ScrCmd_release(struct ScriptContext *ctx)
EventObjectClearHeldMovementIfFinished(&gEventObjects[gSelectedEventObject]);
playerObjectId = GetEventObjectIdByLocalIdAndMap(EVENT_OBJ_ID_PLAYER, 0, 0);
EventObjectClearHeldMovementIfFinished(&gEventObjects[playerObjectId]);
- sub_80D338C();
+ ScriptMovement_UnfreezeEventObjects();
UnfreezeEventObjects();
return FALSE;
}
@@ -1515,13 +1518,13 @@ bool8 ScrCmd_braillemessage(struct ScriptContext *ctx)
yText = (yText - yWindow - 1) * 8;
winTemplate = CreateWindowTemplate(0, xWindow, yWindow + 1, width, height, 0xF, 0x1);
- gUnknown_03000F30 = AddWindow(&winTemplate);
- LoadUserWindowBorderGfx(gUnknown_03000F30, 0x214, 0xE0);
- DrawStdWindowFrame(gUnknown_03000F30, 0);
- PutWindowTilemap(gUnknown_03000F30);
- FillWindowPixelBuffer(gUnknown_03000F30, PIXEL_FILL(1));
- AddTextPrinterParameterized(gUnknown_03000F30, 6, gStringVar4, xText, yText, 0xFF, 0x0);
- CopyWindowToVram(gUnknown_03000F30, 3);
+ gBrailleWindowId = AddWindow(&winTemplate);
+ LoadUserWindowBorderGfx(gBrailleWindowId, 0x214, 0xE0);
+ DrawStdWindowFrame(gBrailleWindowId, 0);
+ PutWindowTilemap(gBrailleWindowId);
+ FillWindowPixelBuffer(gBrailleWindowId, PIXEL_FILL(1));
+ AddTextPrinterParameterized(gBrailleWindowId, 6, gStringVar4, xText, yText, 0xFF, 0x0);
+ CopyWindowToVram(gBrailleWindowId, 3);
return FALSE;
}
@@ -1621,7 +1624,7 @@ bool8 ScrCmd_bufferstdstring(struct ScriptContext *ctx)
u8 stringVarIndex = ScriptReadByte(ctx);
u16 index = VarGet(ScriptReadHalfword(ctx));
- StringCopy(sScriptStringVars[stringVarIndex], gUnknown_0858BAF0[index]);
+ StringCopy(sScriptStringVars[stringVarIndex], gStdStrings[index]);
return FALSE;
}
@@ -1630,7 +1633,7 @@ bool8 ScrCmd_buffercontesttype(struct ScriptContext *ctx)
u8 stringVarIndex = ScriptReadByte(ctx);
u16 index = VarGet(ScriptReadHalfword(ctx));
- sub_818E868(sScriptStringVars[stringVarIndex], index);
+ BufferContestName(sScriptStringVars[stringVarIndex], index);
return FALSE;
}
@@ -2254,8 +2257,8 @@ bool8 ScrCmd_setmonmetlocation(struct ScriptContext *ctx)
void sub_809BDB4(void)
{
- ClearStdWindowAndFrame(gUnknown_03000F30, 1);
- RemoveWindow(gUnknown_03000F30);
+ ClearStdWindowAndFrame(gBrailleWindowId, 1);
+ RemoveWindow(gBrailleWindowId);
}
bool8 ScrCmd_buffertrainerclassname(struct ScriptContext *ctx)
diff --git a/src/script_menu.c b/src/script_menu.c
index b17d3df38..7afe30080 100644
--- a/src/script_menu.c
+++ b/src/script_menu.c
@@ -13,1026 +13,30 @@
#include "strings.h"
#include "task.h"
#include "text.h"
+#include "constants/field_specials.h"
#include "constants/items.h"
+#include "constants/script_menu.h"
#include "constants/songs.h"
-// multichoice lists
-const struct MenuAction MultichoiceList_000[] =
-{
- {gUnknown_085EAD37, NULL},
- {gUnknown_085EAD41, NULL},
- {gText_Exit, NULL},
-};
-
-const struct MenuAction MultichoiceList_002[] =
-{
- {gUnknown_085EAD67, NULL},
- {gUnknown_085EAD6D, NULL},
- {gText_Exit, NULL},
-};
-
-const struct MenuAction MultichoiceList_003[] =
-{
- {gUnknown_085EAD72, NULL},
- {gUnknown_085EAD84, NULL},
- {gUnknown_085EAD96, NULL},
- {gText_Cancel2, NULL},
-};
-
-const struct MenuAction MultichoiceList_004[] =
-{
- {gUnknown_085EADA4, NULL},
- {gUnknown_085EADB5, NULL},
- {gUnknown_085EADC4, NULL},
- {gUnknown_085EADD5, NULL},
- {gUnknown_085EADE7, NULL},
- {gText_Exit, NULL},
-};
-
-const struct MenuAction MultichoiceList_006[] =
-{
- {gUnknown_085EADF9, NULL},
- {gUnknown_085EAE04, NULL},
- {gUnknown_085EAE12, NULL},
- {gText_Exit, NULL},
-};
-
-const struct MenuAction MultichoiceList_005[] =
-{
- {gUnknown_085EADF9, NULL},
- {gUnknown_085EAE04, NULL},
- {gText_Exit, NULL},
-};
-
-const struct MenuAction MultichoiceList_007[] =
-{
- {gMenuText_Register, NULL},
- {gUnknown_085EAE12, NULL},
- {gUnknown_085EAE1B, NULL},
- {gText_Cancel2, NULL},
-};
-
-const struct MenuAction MultichoiceList_012[] =
-{
- {gUnknown_085EAE27, NULL},
- {gUnknown_085EAE2C, NULL},
-};
-
-const struct MenuAction MultichoiceList_013[] =
-{
- {gUnknown_085EAE31, NULL},
- {gUnknown_085EAE35, NULL},
- {gUnknown_085EAE39, NULL},
- {gUnknown_085EAE3D, NULL},
- {gUnknown_085EAE41, NULL},
- {gText_Exit, NULL},
-};
-
-const struct MenuAction MultichoiceList_014[] =
-{
- {gUnknown_085EAD5F, NULL},
- {gText_Exit, NULL},
-};
-
-const struct MenuAction MultichoiceList_016[] =
-{
- {gUnknown_085EAE53, NULL},
- {gUnknown_085EAE5A, NULL},
-};
-
-const struct MenuAction MultichoiceList_020[] =
-{
- {gText_Yes, NULL},
- {gText_No, NULL},
- {gUnknown_085EAD6D, NULL},
-};
-
-const struct MenuAction MultichoiceList_023[] =
-{
- {gUnknown_085EAEA2, NULL},
- {gUnknown_085EAEAC, NULL},
- {gText_Exit, NULL},
-};
-
-const struct MenuAction MultichoiceList_024[] =
-{
- {gText_Lv50, NULL},
- {gText_OpenLevel, NULL},
- {gText_Exit, NULL},
-};
-
-const struct MenuAction MultichoiceList_025[] =
-{
- {gUnknown_0827ECBC, NULL},
- {gUnknown_0827ECC3, NULL},
- {gUnknown_0827ECCD, NULL},
-};
-
-const struct MenuAction MultichoiceList_026[] =
-{
- {gUnknown_0827ECD5, NULL},
- {gUnknown_0827ECDD, NULL},
- {gUnknown_0827ECE3, NULL},
-};
-
-const struct MenuAction MultichoiceList_027[] =
-{
- {gUnknown_0827ECEB, NULL},
- {gUnknown_0827ECF2, NULL},
- {gUnknown_0827ECF8, NULL},
-};
-
-const struct MenuAction MultichoiceList_028[] =
-{
- {gUnknown_0827ED00, NULL},
- {gUnknown_0827ED06, NULL},
- {gUnknown_0827ED10, NULL},
-};
-
-const struct MenuAction MultichoiceList_029[] =
-{
- {gUnknown_0827ED18, NULL},
- {gUnknown_0827ED22, NULL},
- {gUnknown_0827ED2C, NULL},
-};
-
-const struct MenuAction MultichoiceList_030[] =
-{
- {gUnknown_0827ED36, NULL},
- {gUnknown_0827ED40, NULL},
- {gUnknown_0827ED46, NULL},
-};
-
-const struct MenuAction MultichoiceList_031[] =
-{
- {gUnknown_0827ED4F, NULL},
- {gUnknown_0827ED59, NULL},
- {gUnknown_0827ED65, NULL},
-};
+#include "data/script_menu.h"
-const struct MenuAction MultichoiceList_032[] =
-{
- {gUnknown_0827ED70, NULL},
- {gUnknown_0827ED74, NULL},
- {gUnknown_0827ED78, NULL},
-};
-
-const struct MenuAction MultichoiceList_033[] =
-{
- {gUnknown_0827ED80, NULL},
- {gUnknown_0827ED95, NULL},
- {gUnknown_0827EDAA, NULL},
-};
+static EWRAM_DATA u8 sProcessInputDelay = 0;
-const struct MenuAction MultichoiceList_034[] =
-{
- {gUnknown_0827EDB5, NULL},
- {gUnknown_0827EDBA, NULL},
- {gUnknown_0827EDC1, NULL},
-};
+static u8 sLilycoveSSTidalSelections[SSTIDAL_SELECTION_COUNT];
-const struct MenuAction MultichoiceList_035[] =
-{
- {gUnknown_0827EDC9, NULL},
- {gUnknown_0827EDD5, NULL},
- {gUnknown_0827EDE4, NULL},
-};
-
-const struct MenuAction MultichoiceList_036[] =
-{
- {gUnknown_0827EDF0, NULL},
- {gUnknown_0827EDF5, NULL},
- {gUnknown_0827EDF7, NULL},
-};
-
-const struct MenuAction MultichoiceList_037[] =
-{
- {gUnknown_0827EDF9, NULL},
- {gUnknown_0827EDFB, NULL},
- {gUnknown_0827EDFD, NULL},
-};
-
-const struct MenuAction MultichoiceList_038[] =
-{
- {gUnknown_0827EDFF, NULL},
- {gUnknown_0827EE01, NULL},
- {gUnknown_0827EE03, NULL},
-};
-
-const struct MenuAction MultichoiceList_039[] =
-{
- {gUnknown_0827EE05, NULL},
- {gUnknown_0827EE07, NULL},
- {gUnknown_0827EE09, NULL},
-};
-
-const struct MenuAction MultichoiceList_042[] =
-{
- {gUnknown_085EAEC3, NULL},
- {gUnknown_085EAED6, NULL},
- {gUnknown_085EAEE6, NULL},
- {gText_Exit, NULL},
-};
-
-const struct MenuAction MultichoiceList_043[] =
-{
- {gUnknown_085EAEF6, NULL},
- {gUnknown_085EAF02, NULL},
- {gUnknown_085EAF0E, NULL},
- {gText_Exit, NULL},
-};
-
-const struct MenuAction MultichoiceList_044[] =
-{
- {gUnknown_085EAF1B, NULL},
- {gUnknown_085EAF24, NULL},
- {gUnknown_085EAF2F, NULL},
- {gText_Exit, NULL},
-};
-
-const struct MenuAction MultichoiceList_045[] =
-{
- {gUnknown_085EAF34, NULL},
- {gUnknown_085EAF3E, NULL},
-};
-
-const struct MenuAction MultichoiceList_046[] =
-{
- {gUnknown_085EAF4B, NULL},
- {gUnknown_085EAF58, NULL},
- {gText_Exit, NULL},
-};
-
-const struct MenuAction MultichoiceList_047[] =
-{
- {gUnknown_085EAF65, NULL},
- {gUnknown_085EAF70, NULL},
- {gUnknown_085EAF7D, NULL},
- {gUnknown_085EAF87, NULL},
- {gUnknown_085EAF93, NULL},
- {gUnknown_085EAF9F, NULL},
- {gUnknown_085EAFAB, NULL},
- {gText_Cancel2, NULL},
-};
-
-const struct MenuAction MultichoiceList_048[] =
-{
- {gUnknown_085EAFB6, NULL},
- {gUnknown_085EAFCF, NULL},
- {gUnknown_085EAFE8, NULL},
- {gText_Exit, NULL},
-};
-
-const struct MenuAction MultichoiceList_055[] =
-{
- {gUnknown_085EB089, NULL},
- {gUnknown_085EB09C, NULL},
- {gUnknown_085EB0AF, NULL},
- {gUnknown_085EB0C2, NULL},
- {gUnknown_085EB0D5, NULL},
- {gText_Exit, NULL},
-};
-
-const struct MenuAction MultichoiceList_049[] =
-{
- {gUnknown_085EB002, NULL},
- {gUnknown_085EB017, NULL},
- {gText_Exit, NULL},
-};
-
-const struct MenuAction MultichoiceList_050[] =
-{
- {gUnknown_085EB02A, NULL},
- {gUnknown_085EB034, NULL},
-};
-
-const struct MenuAction MultichoiceList_052[] =
-{
- {gText_LilycoveCity, NULL},
- {gText_BattleFrontier, NULL},
- {gText_Exit, NULL},
-};
-
-const struct MenuAction MultichoiceList_053[] =
-{
- {gText_SlateportCity, NULL},
- {gText_LilycoveCity, NULL},
- {gText_Exit, NULL},
-};
-
-const struct MenuAction MultichoiceList_054[] =
-{
- {gUnknown_085EB07E, NULL},
- {gUnknown_085EB084, NULL},
-};
-
-const struct MenuAction MultichoiceList_056[] =
-{
- {gText_LilycoveCity, NULL},
- {gText_Exit, NULL},
-};
-
-const struct MenuAction MultichoiceList_057[] =
-{
- {gText_5F, NULL},
- {gText_4F, NULL},
- {gText_3F, NULL},
- {gText_2F, NULL},
- {gText_1F, NULL},
- {gText_Exit, NULL},
-};
-
-const struct MenuAction MultichoiceList_058[] =
-{
- {gUnknown_085EB040, NULL},
- {gText_Exit, NULL},
-};
-
-const struct MenuAction MultichoiceList_059[] =
-{
- {gUnknown_085EB04A, NULL},
- {gText_Exit, NULL},
-};
-
-const struct MenuAction MultichoiceList_060[] =
-{
- {gUnknown_085EB040, NULL},
- {gUnknown_085EB04A, NULL},
- {gText_Exit, NULL},
-};
-
-const struct MenuAction MultichoiceList_061[] =
-{
- {gUnknown_085EB057, NULL},
- {gText_Exit, NULL},
-};
-
-const struct MenuAction MultichoiceList_062[] =
-{
- {gUnknown_085EB040, NULL},
- {gUnknown_085EB057, NULL},
- {gText_Exit, NULL},
-};
-
-const struct MenuAction MultichoiceList_063[] =
-{
- {gUnknown_085EB04A, NULL},
- {gUnknown_085EB057, NULL},
- {gText_Exit, NULL},
-};
-
-const struct MenuAction MultichoiceList_064[] =
-{
- {gUnknown_085EB040, NULL},
- {gUnknown_085EB04A, NULL},
- {gUnknown_085EB057, NULL},
- {gText_Exit, NULL},
-};
-
-const struct MenuAction MultichoiceList_065[] =
-{
- {gUnknown_085EB062, NULL},
- {gText_Exit, NULL},
-};
-
-const struct MenuAction MultichoiceList_066[] =
-{
- {gUnknown_085EB040, NULL},
- {gUnknown_085EB062, NULL},
- {gText_Exit, NULL},
-};
-
-const struct MenuAction MultichoiceList_067[] =
-{
- {gUnknown_085EB04A, NULL},
- {gUnknown_085EB062, NULL},
- {gText_Exit, NULL},
-};
-
-const struct MenuAction MultichoiceList_068[] =
-{
- {gUnknown_085EB040, NULL},
- {gUnknown_085EB04A, NULL},
- {gUnknown_085EB062, NULL},
- {gText_Exit, NULL},
-};
-
-const struct MenuAction MultichoiceList_069[] =
-{
- {gUnknown_085EB057, NULL},
- {gUnknown_085EB062, NULL},
- {gText_Exit, NULL},
-};
-
-const struct MenuAction MultichoiceList_070[] =
-{
- {gUnknown_085EB040, NULL},
- {gUnknown_085EB057, NULL},
- {gUnknown_085EB062, NULL},
- {gText_Exit, NULL},
-};
-
-const struct MenuAction MultichoiceList_071[] =
-{
- {gUnknown_085EB04A, NULL},
- {gUnknown_085EB057, NULL},
- {gUnknown_085EB062, NULL},
- {gText_Exit, NULL},
-};
-
-const struct MenuAction MultichoiceList_072[] =
-{
- {gUnknown_085EB040, NULL},
- {gUnknown_085EB04A, NULL},
- {gUnknown_085EB057, NULL},
- {gUnknown_085EB062, NULL},
- {gText_Exit, NULL},
-};
-
-const struct MenuAction MultichoiceList_073[] =
-{
- {gText_Opponent, NULL},
- {gText_Tourney_Tree, NULL},
- {gText_ReadyToStart, NULL},
- {gUnknown_085EB5BC, NULL},
- {gUnknown_085EB5C3, NULL},
- {gUnknown_085EB5C8, NULL},
-};
-
-const struct MenuAction MultichoiceList_107[] =
-{
- {gText_Opponent, NULL},
- {gText_Tourney_Tree, NULL},
- {gText_ReadyToStart, NULL},
- {gUnknown_085EB5C3, NULL},
- {gUnknown_085EB5C8, NULL},
-};
-
-const struct MenuAction MultichoiceList_088[] =
-{
- {gUnknown_085EB29A, NULL},
- {gUnknown_085EB2A3, NULL},
-};
-
-const struct MenuAction MultichoiceList_076[] =
-{
- {gUnknown_085EB372, NULL},
- {gUnknown_085EB37F, NULL},
- {gUnknown_085EB389, NULL},
- {gText_Exit, NULL},
-};
-
-const struct MenuAction MultichoiceList_017[] =
-{
- {gText_Yes, NULL},
- {gText_No, NULL},
- {gUnknown_085EAD6D, NULL},
-};
-
-const struct MenuAction MultichoiceList_018[] =
-{
- {gUnknown_085EAE6E, NULL},
- {gUnknown_085EAE7C, NULL},
- {gUnknown_085EAE8A, NULL},
- {gUnknown_085EAD6D, NULL},
- {gText_Exit, NULL},
-};
-
-const struct MenuAction MultichoiceList_078[] =
-{
- {gUnknown_085EB372, NULL},
- {gUnknown_085EB37F, NULL},
- {gUnknown_085EB397, NULL},
- {gText_Exit, NULL},
-};
-
-const struct MenuAction MultichoiceList_079[] =
-{
- {gUnknown_085EB372, NULL},
- {gUnknown_085EB37F, NULL},
- {gUnknown_085EB389, NULL},
- {gUnknown_085EB397, NULL},
- {gText_Exit, NULL},
-};
-
-const struct MenuAction MultichoiceList_074[] =
-{
- {gUnknown_085EB372, NULL},
- {gUnknown_085EB37F, NULL},
- {gText_Exit, NULL},
-};
-
-const struct MenuAction MultichoiceList_080[] =
-{
- {gUnknown_085EB3A4, NULL},
- {gUnknown_085EB3B1, NULL},
- {gText_Exit, NULL},
-};
-
-const struct MenuAction MultichoiceList_081[] =
-{
- {gUnknown_085EB3D4, NULL},
- {gUnknown_085EB3C6, NULL},
- {gText_Exit, NULL},
-};
-
-const struct MenuAction MultichoiceList_082[] =
-{
- {gText_NormalRank, NULL},
- {gText_SuperRank, NULL},
- {gText_HyperRank, NULL},
- {gText_MasterRank, NULL},
- {gText_Exit, NULL},
-};
-
-const struct MenuAction MultichoiceList_083[] =
-{
- {gText_BattleBag, NULL},
- {gText_HeldItem, NULL},
- {gText_Exit, NULL},
-};
-
-const struct MenuAction MultichoiceList_084[] =
-{
- {gText_LinkContest, NULL},
- {gText_AboutE_Mode, NULL},
- {gText_AboutG_Mode, NULL},
- {gText_Cancel2, NULL},
-};
-
-const struct MenuAction MultichoiceList_085[] =
-{
- {gText_E_Mode, NULL},
- {gText_G_Mode, NULL},
- {gText_Exit, NULL},
-};
-
-const struct MenuAction MultichoiceList_086[] =
-{
- {gText_MenuOptionPokedex, NULL},
- {gText_MenuOptionPokemon, NULL},
- {gText_MenuOptionBag, NULL},
- {gText_MenuOptionPokenav, NULL},
- {gUnknown_085EB278, NULL},
- {gText_MenuOptionSave, NULL},
- {gText_MenuOptionOption, NULL},
- {gText_MenuOptionExit, NULL},
-};
-
-const struct MenuAction MultichoiceList_087[] =
-{
- {gUnknown_085EB28A, NULL},
- {gUnknown_085EB290, NULL},
- {gUnknown_085EB295, NULL},
- {gText_Exit, NULL},
-};
-
-const struct MenuAction MultichoiceList_089[] =
-{
- {gText_SouthernIsland, NULL},
- {gText_BirthIsland, NULL},
- {gText_Exit, NULL},
-};
-
-const struct MenuAction MultichoiceList_090[] =
-{
- {gText_SouthernIsland, NULL},
- {gText_FarawayIsland, NULL},
- {gText_Exit, NULL},
-};
-
-const struct MenuAction MultichoiceList_091[] =
-{
- {gText_BirthIsland, NULL},
- {gText_FarawayIsland, NULL},
- {gText_Exit, NULL},
-};
-
-const struct MenuAction MultichoiceList_092[] =
-{
- {gText_SouthernIsland, NULL},
- {gText_BirthIsland, NULL},
- {gText_FarawayIsland, NULL},
- {gText_Exit, NULL},
-};
-
-const struct MenuAction MultichoiceList_093[] =
-{
- {gUnknown_085EB2E4, NULL},
- {gUnknown_085EB2F0, NULL},
- {gText_Exit, NULL},
-};
-
-const struct MenuAction MultichoiceList_094[] =
-{
- {gText_Yes, NULL},
- {gUnknown_085EB2FC, NULL},
-};
-
-const struct MenuAction MultichoiceList_095[] =
-{
- {gUnknown_085EB3DF, NULL},
- {gUnknown_085EB3EA, NULL},
- {gUnknown_085EB3F1, NULL},
- {gUnknown_085EB3FC, NULL},
- {gUnknown_085EB40A, NULL},
- {gText_Exit, NULL},
-};
-
-const struct MenuAction MultichoiceList_011[] =
-{
- {gUnknown_085EB415, NULL},
- {gUnknown_085EB41D, NULL},
- {gUnknown_085EB424, NULL},
- {gText_Exit, NULL},
-};
-
-const struct MenuAction MultichoiceList_096[] =
-{
- {gUnknown_085EB45C, NULL},
- {gUnknown_085EB469, NULL},
- {gUnknown_085EB475, NULL},
- {gUnknown_085EB482, NULL},
- {gText_Exit, NULL},
-};
-
-const struct MenuAction MultichoiceList_097[] =
-{
- {gUnknown_085EB42F, NULL},
- {gUnknown_085EB43A, NULL},
- {gUnknown_085EB444, NULL},
- {gUnknown_085EB451, NULL},
- {gText_Exit, NULL},
-};
-
-const struct MenuAction MultichoiceList_098[] =
-{
- {gUnknown_085EB48E, NULL},
- {gUnknown_085EB496, NULL},
- {gUnknown_085EB4A3, NULL},
- {gText_Exit, NULL},
-};
-
-const struct MenuAction MultichoiceList_099[] =
-{
- {gUnknown_085EB4AD, NULL},
- {gUnknown_085EB4B9, NULL},
- {gUnknown_085EB4C7, NULL},
- {gUnknown_085EB4D4, NULL},
- {gUnknown_085EB4E0, NULL},
- {gText_Exit, NULL},
-};
-
-const struct MenuAction MultichoiceList_100[] =
-{
- {gText_BattleBasics, NULL},
- {gText_PokemonNature, NULL},
- {gText_PokemonMoves, NULL},
- {gText_Underpowered, NULL},
- {gText_WhenInDanger, NULL},
- {gText_Exit, NULL},
-};
-
-const struct MenuAction MultichoiceList_101[] =
-{
- {gUnknown_085EB532, NULL},
- {gUnknown_085EB543, NULL},
- {gUnknown_085EB555, NULL},
- {gUnknown_085EB563, NULL},
- {gText_Exit, NULL},
-};
-
-const struct MenuAction MultichoiceList_102[] =
-{
- {gUnknown_085EB56E, NULL},
- {gUnknown_085EB57E, NULL},
- {gUnknown_085EB589, NULL},
- {gText_Exit, NULL},
-};
-
-const struct MenuAction MultichoiceList_103[] =
-{
- {gUnknown_085EB5B6, NULL},
- {gUnknown_085EB5BC, NULL},
- {gUnknown_085EB5C3, NULL},
- {gUnknown_085EB5C8, NULL},
-};
-
-const struct MenuAction MultichoiceList_104[] =
-{
- {gUnknown_085EB5B6, NULL},
- {gUnknown_085EB5C3, NULL},
- {gUnknown_085EB5C8, NULL},
-};
-
-const struct MenuAction MultichoiceList_105[] =
-{
- {gUnknown_085EB5B6, NULL},
- {gUnknown_085EB5BC, NULL},
- {gUnknown_085EB5C8, NULL},
-};
-
-const struct MenuAction MultichoiceList_106[] =
-{
- {gUnknown_085EB5B6, NULL},
- {gUnknown_085EB5C8, NULL},
-};
-
-const struct MenuAction MultichoiceList_108[] =
-{
- {gUnknown_085EE14B, NULL},
- {gUnknown_085EE14F, NULL},
-};
-
-const struct MenuAction MultichoiceList_109[] =
-{
- {gUnknown_085EB2FF, NULL},
- {gUnknown_085EB310, NULL},
- {gUnknown_085EB317, NULL},
- {gUnknown_085EB31F, NULL},
-};
-
-const struct MenuAction MultichoiceList_110[] =
-{
- {gText_CaveOfOrigin, NULL},
- {gText_MtPyre, NULL},
- {gText_SkyPillar, NULL},
- {gText_DontRemember, NULL},
-};
-
-const struct MenuAction MultichoiceList_111[] =
-{
- {gUnknown_085EB4AD, NULL},
- {gUnknown_085EB4B9, NULL},
- {gUnknown_085EB4C7, NULL},
- {gUnknown_085EB4D4, NULL},
- {gUnknown_085EB597, NULL},
- {gText_Exit, NULL},
-};
-
-const struct MenuAction MultichoiceList_112[] =
-{
- {gText_BattleTrainers, NULL},
- {gUnknown_085EB45C, NULL},
- {gUnknown_085EB469, NULL},
- {gUnknown_085EB475, NULL},
- {gUnknown_085EB482, NULL},
- {gText_Exit, NULL},
-};
-
-const struct MenuAction MultichoiceList_113[] =
-{
- {gText_NormalTagMatch, NULL},
- {gText_VarietyTagMatch, NULL},
- {gText_UniqueTagMatch, NULL},
- {gText_ExpertTagMatch, NULL},
- {gText_Exit, NULL},
-};
-
-const struct MenuAction MultichoiceList_001[] =
-{
- {gText_Exit, NULL},
-};
-
-struct MultichoiceListStruct
-{
- const struct MenuAction *list;
- u8 count;
-};
-
-const struct MultichoiceListStruct gMultichoiceLists[] =
-{
- {MultichoiceList_000, ARRAY_COUNT(MultichoiceList_000)},
- {MultichoiceList_001, ARRAY_COUNT(MultichoiceList_001)},
- {MultichoiceList_002, ARRAY_COUNT(MultichoiceList_002)},
- {MultichoiceList_003, ARRAY_COUNT(MultichoiceList_003)},
- {MultichoiceList_004, ARRAY_COUNT(MultichoiceList_004)},
- {MultichoiceList_005, ARRAY_COUNT(MultichoiceList_005)},
- {MultichoiceList_006, ARRAY_COUNT(MultichoiceList_006)},
- {MultichoiceList_007, ARRAY_COUNT(MultichoiceList_007)},
- {MultichoiceList_001, ARRAY_COUNT(MultichoiceList_001)},
- {MultichoiceList_001, ARRAY_COUNT(MultichoiceList_001)},
- {MultichoiceList_001, ARRAY_COUNT(MultichoiceList_001)},
- {MultichoiceList_011, ARRAY_COUNT(MultichoiceList_011)},
- {MultichoiceList_012, ARRAY_COUNT(MultichoiceList_012)},
- {MultichoiceList_013, ARRAY_COUNT(MultichoiceList_013)},
- {MultichoiceList_014, ARRAY_COUNT(MultichoiceList_014)},
- {MultichoiceList_001, ARRAY_COUNT(MultichoiceList_001)},
- {MultichoiceList_016, ARRAY_COUNT(MultichoiceList_016)},
- {MultichoiceList_017, ARRAY_COUNT(MultichoiceList_017)},
- {MultichoiceList_018, ARRAY_COUNT(MultichoiceList_018)},
- {MultichoiceList_001, ARRAY_COUNT(MultichoiceList_001)},
- {MultichoiceList_020, ARRAY_COUNT(MultichoiceList_020)},
- {MultichoiceList_001, ARRAY_COUNT(MultichoiceList_001)},
- {MultichoiceList_001, ARRAY_COUNT(MultichoiceList_001)},
- {MultichoiceList_023, ARRAY_COUNT(MultichoiceList_023)},
- {MultichoiceList_024, ARRAY_COUNT(MultichoiceList_024)},
- {MultichoiceList_025, ARRAY_COUNT(MultichoiceList_025)},
- {MultichoiceList_026, ARRAY_COUNT(MultichoiceList_026)},
- {MultichoiceList_027, ARRAY_COUNT(MultichoiceList_027)},
- {MultichoiceList_028, ARRAY_COUNT(MultichoiceList_028)},
- {MultichoiceList_029, ARRAY_COUNT(MultichoiceList_029)},
- {MultichoiceList_030, ARRAY_COUNT(MultichoiceList_030)},
- {MultichoiceList_031, ARRAY_COUNT(MultichoiceList_031)},
- {MultichoiceList_032, ARRAY_COUNT(MultichoiceList_032)},
- {MultichoiceList_033, ARRAY_COUNT(MultichoiceList_033)},
- {MultichoiceList_034, ARRAY_COUNT(MultichoiceList_034)},
- {MultichoiceList_035, ARRAY_COUNT(MultichoiceList_035)},
- {MultichoiceList_036, ARRAY_COUNT(MultichoiceList_036)},
- {MultichoiceList_037, ARRAY_COUNT(MultichoiceList_037)},
- {MultichoiceList_038, ARRAY_COUNT(MultichoiceList_038)},
- {MultichoiceList_039, ARRAY_COUNT(MultichoiceList_039)},
- {MultichoiceList_001, ARRAY_COUNT(MultichoiceList_001)},
- {MultichoiceList_001, ARRAY_COUNT(MultichoiceList_001)},
- {MultichoiceList_042, ARRAY_COUNT(MultichoiceList_042)},
- {MultichoiceList_043, ARRAY_COUNT(MultichoiceList_043)},
- {MultichoiceList_044, ARRAY_COUNT(MultichoiceList_044)},
- {MultichoiceList_045, ARRAY_COUNT(MultichoiceList_045)},
- {MultichoiceList_046, ARRAY_COUNT(MultichoiceList_046)},
- {MultichoiceList_047, ARRAY_COUNT(MultichoiceList_047)},
- {MultichoiceList_048, ARRAY_COUNT(MultichoiceList_048)},
- {MultichoiceList_049, ARRAY_COUNT(MultichoiceList_049)},
- {MultichoiceList_050, ARRAY_COUNT(MultichoiceList_050)},
- {MultichoiceList_001, ARRAY_COUNT(MultichoiceList_001)},
- {MultichoiceList_052, ARRAY_COUNT(MultichoiceList_052)},
- {MultichoiceList_053, ARRAY_COUNT(MultichoiceList_053)},
- {MultichoiceList_054, ARRAY_COUNT(MultichoiceList_054)},
- {MultichoiceList_055, ARRAY_COUNT(MultichoiceList_055)},
- {MultichoiceList_056, ARRAY_COUNT(MultichoiceList_056)},
- {MultichoiceList_057, ARRAY_COUNT(MultichoiceList_057)},
- {MultichoiceList_058, ARRAY_COUNT(MultichoiceList_058)},
- {MultichoiceList_059, ARRAY_COUNT(MultichoiceList_059)},
- {MultichoiceList_060, ARRAY_COUNT(MultichoiceList_060)},
- {MultichoiceList_061, ARRAY_COUNT(MultichoiceList_061)},
- {MultichoiceList_062, ARRAY_COUNT(MultichoiceList_062)},
- {MultichoiceList_063, ARRAY_COUNT(MultichoiceList_063)},
- {MultichoiceList_064, ARRAY_COUNT(MultichoiceList_064)},
- {MultichoiceList_065, ARRAY_COUNT(MultichoiceList_065)},
- {MultichoiceList_066, ARRAY_COUNT(MultichoiceList_066)},
- {MultichoiceList_067, ARRAY_COUNT(MultichoiceList_067)},
- {MultichoiceList_068, ARRAY_COUNT(MultichoiceList_068)},
- {MultichoiceList_069, ARRAY_COUNT(MultichoiceList_069)},
- {MultichoiceList_070, ARRAY_COUNT(MultichoiceList_070)},
- {MultichoiceList_071, ARRAY_COUNT(MultichoiceList_071)},
- {MultichoiceList_072, ARRAY_COUNT(MultichoiceList_072)},
- {MultichoiceList_073, ARRAY_COUNT(MultichoiceList_073)},
- {MultichoiceList_074, ARRAY_COUNT(MultichoiceList_074)},
- {MultichoiceList_074, ARRAY_COUNT(MultichoiceList_074)},
- {MultichoiceList_076, ARRAY_COUNT(MultichoiceList_076)},
- {MultichoiceList_076, ARRAY_COUNT(MultichoiceList_076)},
- {MultichoiceList_078, ARRAY_COUNT(MultichoiceList_078)},
- {MultichoiceList_079, ARRAY_COUNT(MultichoiceList_079)},
- {MultichoiceList_080, ARRAY_COUNT(MultichoiceList_080)},
- {MultichoiceList_081, ARRAY_COUNT(MultichoiceList_081)},
- {MultichoiceList_082, ARRAY_COUNT(MultichoiceList_082)},
- {MultichoiceList_083, ARRAY_COUNT(MultichoiceList_083)},
- {MultichoiceList_084, ARRAY_COUNT(MultichoiceList_084)},
- {MultichoiceList_085, ARRAY_COUNT(MultichoiceList_085)},
- {MultichoiceList_086, ARRAY_COUNT(MultichoiceList_086)},
- {MultichoiceList_087, ARRAY_COUNT(MultichoiceList_087)},
- {MultichoiceList_088, ARRAY_COUNT(MultichoiceList_088)},
- {MultichoiceList_089, ARRAY_COUNT(MultichoiceList_089)},
- {MultichoiceList_090, ARRAY_COUNT(MultichoiceList_090)},
- {MultichoiceList_091, ARRAY_COUNT(MultichoiceList_091)},
- {MultichoiceList_092, ARRAY_COUNT(MultichoiceList_092)},
- {MultichoiceList_093, ARRAY_COUNT(MultichoiceList_093)},
- {MultichoiceList_094, ARRAY_COUNT(MultichoiceList_094)},
- {MultichoiceList_095, ARRAY_COUNT(MultichoiceList_095)},
- {MultichoiceList_096, ARRAY_COUNT(MultichoiceList_096)},
- {MultichoiceList_097, ARRAY_COUNT(MultichoiceList_097)},
- {MultichoiceList_098, ARRAY_COUNT(MultichoiceList_098)},
- {MultichoiceList_099, ARRAY_COUNT(MultichoiceList_099)},
- {MultichoiceList_100, ARRAY_COUNT(MultichoiceList_100)},
- {MultichoiceList_101, ARRAY_COUNT(MultichoiceList_101)},
- {MultichoiceList_102, ARRAY_COUNT(MultichoiceList_102)},
- {MultichoiceList_103, ARRAY_COUNT(MultichoiceList_103)},
- {MultichoiceList_104, ARRAY_COUNT(MultichoiceList_104)},
- {MultichoiceList_105, ARRAY_COUNT(MultichoiceList_105)},
- {MultichoiceList_106, ARRAY_COUNT(MultichoiceList_106)},
- {MultichoiceList_107, ARRAY_COUNT(MultichoiceList_107)},
- {MultichoiceList_108, ARRAY_COUNT(MultichoiceList_108)},
- {MultichoiceList_109, ARRAY_COUNT(MultichoiceList_109)},
- {MultichoiceList_110, ARRAY_COUNT(MultichoiceList_110)},
- {MultichoiceList_111, ARRAY_COUNT(MultichoiceList_111)},
- {MultichoiceList_112, ARRAY_COUNT(MultichoiceList_112)},
- {MultichoiceList_113, ARRAY_COUNT(MultichoiceList_113)},
-};
-
-const u8 *const gUnknown_0858BAF0[] =
-{
- gText_Cool,
- gText_Beauty,
- gText_Cute,
- gText_Smart,
- gText_Tough,
- gText_Normal,
- gText_Super,
- gText_Hyper,
- gText_Master,
- gText_Cool2,
- gText_Beauty2,
- gText_Cute2,
- gText_Smart2,
- gText_Tough2,
- gText_Items,
- gText_Key_Items,
- gText_Poke_Balls,
- gText_TMs_Hms,
- gText_Berries2,
- gText_Single2,
- gText_Double2,
- gText_Multi,
- gText_MultiLink,
- gText_BattleTower2,
- gText_BattleDome,
- gText_BattleFactory,
- gText_BattlePalace,
- gText_BattleArena,
- gText_BattlePike,
- gText_BattlePyramid,
-};
-
-const u8 gUnknown_0858BB68[] = { 74, 75, 76, 77, 78, 79 };
-
-const u8 *const sPCNameStrings[] =
-{
- gText_SomeonesPC,
- gText_LanettesPC,
- gText_PlayersPC,
- gText_LogOff,
-};
-
-const u8 *const gUnknown_0858BB80[] =
-{
- gText_SlateportCity,
- gText_BattleFrontier,
- gText_SouthernIsland,
- gText_NavelRock,
- gText_BirthIsland,
- gText_FarawayIsland,
- gText_Exit,
-};
-
-const u8 *const gUnknown_0858BB9C[] =
-{
- OldaleTown_PokemonCenter_2F_Text_277F1B,
- OldaleTown_PokemonCenter_2F_Text_277F5A,
- OldaleTown_PokemonCenter_2F_Text_277F96,
- OldaleTown_PokemonCenter_2F_Text_27889C,
-};
-const u8 *const gUnknown_0858BBAC[] =
-{
- OldaleTown_PokemonCenter_2F_Text_27879F,
- OldaleTown_PokemonCenter_2F_Text_2787D5,
- OldaleTown_PokemonCenter_2F_Text_278831,
- OldaleTown_PokemonCenter_2F_Text_27889C,
-};
-const u8 *const gUnknown_0858BBBC[] =
-{
- OldaleTown_PokemonCenter_2F_Text_27879F,
- OldaleTown_PokemonCenter_2F_Text_2787D5,
- OldaleTown_PokemonCenter_2F_Text_2787FC,
- OldaleTown_PokemonCenter_2F_Text_27889C,
-};
-const u8 *const gUnknown_0858BBCC[] =
-{
- OldaleTown_PokemonCenter_2F_Text_27879F,
- OldaleTown_PokemonCenter_2F_Text_2787D5,
- OldaleTown_PokemonCenter_2F_Text_278831,
- OldaleTown_PokemonCenter_2F_Text_2787FC,
- OldaleTown_PokemonCenter_2F_Text_27889C,
-};
-const u8 *const gUnknown_0858BBE0[] =
-{
- OldaleTown_PokemonCenter_2F_Text_277F1B,
- OldaleTown_PokemonCenter_2F_Text_277F5A,
- OldaleTown_PokemonCenter_2F_Text_27889C,
-};
-const u8 *const gUnknown_0858BBEC[] =
-{
- OldaleTown_PokemonCenter_2F_Text_27879F,
- OldaleTown_PokemonCenter_2F_Text_2787D5,
- OldaleTown_PokemonCenter_2F_Text_27889C,
-};
-
-EWRAM_DATA u8 gUnknown_02039F90 = 0;
-
-static u8 gUnknown_03001124[7];
-static u32 filler_0300112c;
-
-static void Task_HandleMultichoiceInput(u8);
-static void Task_HandleYesNoInput(u8);
-static void Task_HandleMultichoiceGridInput(u8);
-static void DrawMultichoiceMenu(u8, u8, u8, bool8, u8);
-static void sub_80E1FBC(u8, u8, u8, u8);
-static void sub_80E2A94(u8);
-static void CreatePCMenu(void);
-static void sub_80E2578(void);
+static void Task_HandleMultichoiceInput(u8 taskId);
+static void Task_HandleYesNoInput(u8 taskId);
+static void Task_HandleMultichoiceGridInput(u8 taskId);
+static void DrawMultichoiceMenu(u8 left, u8 top, u8 multichoiceId, bool8 ignoreBPress, u8 cursorPos);
+static void InitMultichoiceCheckWrap(bool8 ignoreBPress, u8 count, u8 windowId, u8 multichoiceId);
+static void DrawLinkServicesMultichoiceMenu(u8 multichoiceId);
+static void CreatePCMultichoice(void);
+static void CreateLilycoveSSTidalMultichoice(void);
static bool8 IsPicboxClosed(void);
-static void CreateStartMenu(void);
-static void sub_80E2CC4(u8, u8, u8, u8);
+static void CreateStartMenuForPokenavTutorial(void);
+static void InitMultichoiceNoWrap(bool8 ignoreBPress, u8 unusedCount, u8 windowId, u8 multichoiceId);
-bool8 ScriptMenu_Multichoice(u8 left, u8 top, u8 multichoiceId, u8 ignoreBPress)
+bool8 ScriptMenu_Multichoice(u8 left, u8 top, u8 multichoiceId, bool8 ignoreBPress)
{
if (FuncIsActiveTask(Task_HandleMultichoiceInput) == TRUE)
{
@@ -1060,7 +64,8 @@ bool8 ScriptMenu_MultichoiceWithDefault(u8 left, u8 top, u8 multichoiceId, bool8
}
}
-static u16 sub_80E1EB8(const u8 *str)
+// Unused
+static u16 GetLengthWithExpandedPlayerName(const u8 *str)
{
u16 length = 0;
@@ -1069,7 +74,7 @@ static u16 sub_80E1EB8(const u8 *str)
if (*str == PLACEHOLDER_BEGIN)
{
str++;
- if (*str == 1)
+ if (*str == PLACEHOLDER_ID_PLAYER)
{
length += StringLength(gSaveBlock2Ptr->playerName);
str++;
@@ -1085,28 +90,28 @@ static u16 sub_80E1EB8(const u8 *str)
return length;
}
-static void DrawMultichoiceMenu(u8 left, u8 top, u8 multichoiceId, u8 ignoreBPress, u8 cursorPos)
+static void DrawMultichoiceMenu(u8 left, u8 top, u8 multichoiceId, bool8 ignoreBPress, u8 cursorPos)
{
int i;
u8 windowId;
- u8 count = gMultichoiceLists[multichoiceId].count;
- const struct MenuAction *actions = gMultichoiceLists[multichoiceId].list;
+ u8 count = sMultichoiceLists[multichoiceId].count;
+ const struct MenuAction *actions = sMultichoiceLists[multichoiceId].list;
int width = 0;
u8 newWidth;
for (i = 0; i < count; i++)
{
- width = display_text_and_get_width(actions[i].text, width);
+ width = DisplayTextAndGetWidth(actions[i].text, width);
}
- newWidth = convert_pixel_width_to_tile_width(width);
- left = sub_80E2D5C(left, newWidth);
+ newWidth = ConvertPixelWidthToTileWidth(width);
+ left = ScriptMenu_AdjustLeftCoordFromWidth(left, newWidth);
windowId = CreateWindowFromRect(left, top, newWidth, count * 2);
SetStandardWindowBorderStyle(windowId, 0);
PrintMenuTable(windowId, count, actions);
InitMenuInUpperLeftCornerPlaySoundWhenAPressed(windowId, count, cursorPos);
schedule_bg_copy_tilemap_to_vram(0);
- sub_80E1FBC(ignoreBPress, count, windowId, multichoiceId);
+ InitMultichoiceCheckWrap(ignoreBPress, count, windowId, multichoiceId);
}
#define tLeft data[0]
@@ -1118,17 +123,17 @@ static void DrawMultichoiceMenu(u8 left, u8 top, u8 multichoiceId, u8 ignoreBPre
#define tWindowId data[6]
#define tMultichoiceId data[7]
-static void sub_80E1FBC(u8 ignoreBPress, u8 count, u8 windowId, u8 multichoiceId)
+static void InitMultichoiceCheckWrap(bool8 ignoreBPress, u8 count, u8 windowId, u8 multichoiceId)
{
u8 i;
u8 taskId;
- gUnknown_02039F90 = 2;
+ sProcessInputDelay = 2;
- for (i = 0; i < 6; i++)
+ for (i = 0; i < ARRAY_COUNT(sLinkServicesMultichoiceIds); i++)
{
- if (gUnknown_0858BB68[i] == multichoiceId)
+ if (sLinkServicesMultichoiceIds[i] == multichoiceId)
{
- gUnknown_02039F90 = 12;
+ sProcessInputDelay = 12;
}
}
@@ -1144,7 +149,7 @@ static void sub_80E1FBC(u8 ignoreBPress, u8 count, u8 windowId, u8 multichoiceId
gTasks[taskId].tWindowId = windowId;
gTasks[taskId].tMultichoiceId = multichoiceId;
- sub_80E2A94(multichoiceId);
+ DrawLinkServicesMultichoiceMenu(multichoiceId);
}
static void Task_HandleMultichoiceInput(u8 taskId)
@@ -1154,9 +159,9 @@ static void Task_HandleMultichoiceInput(u8 taskId)
if (!gPaletteFade.active)
{
- if (gUnknown_02039F90)
+ if (sProcessInputDelay)
{
- gUnknown_02039F90--;
+ sProcessInputDelay--;
}
else
{
@@ -1167,7 +172,7 @@ static void Task_HandleMultichoiceInput(u8 taskId)
if (gMain.newKeys & (DPAD_UP | DPAD_DOWN))
{
- sub_80E2A94(tMultichoiceId);
+ DrawLinkServicesMultichoiceMenu(tMultichoiceId);
}
if (selection != MENU_NOTHING_CHOSEN)
@@ -1177,7 +182,7 @@ static void Task_HandleMultichoiceInput(u8 taskId)
if (tIgnoreBPress)
return;
PlaySE(SE_SELECT);
- gSpecialVar_Result = 127;
+ gSpecialVar_Result = MULTI_B_PRESSED;
}
else
{
@@ -1208,7 +213,7 @@ bool8 ScriptMenu_YesNo(u8 left, u8 top)
}
}
-// unused
+// Unused
bool8 IsScriptActive(void)
{
if (gSpecialVar_Result == 0xFF)
@@ -1243,7 +248,7 @@ static void Task_HandleYesNoInput(u8 taskId)
EnableBothScriptContexts();
}
-bool8 ScriptMenu_MultichoiceGrid(u8 left, u8 top, u8 multichoiceId, u8 ignoreBPress, u8 columnCount)
+bool8 ScriptMenu_MultichoiceGrid(u8 left, u8 top, u8 multichoiceId, bool8 ignoreBPress, u8 columnCount)
{
if (FuncIsActiveTask(Task_HandleMultichoiceGridInput) == TRUE)
{
@@ -1258,22 +263,22 @@ bool8 ScriptMenu_MultichoiceGrid(u8 left, u8 top, u8 multichoiceId, u8 ignoreBPr
gSpecialVar_Result = 0xFF;
width = 0;
- for (i = 0; i < gMultichoiceLists[multichoiceId].count; i++)
+ for (i = 0; i < sMultichoiceLists[multichoiceId].count; i++)
{
- width = display_text_and_get_width(gMultichoiceLists[multichoiceId].list[i].text, width);
+ width = DisplayTextAndGetWidth(sMultichoiceLists[multichoiceId].list[i].text, width);
}
- newWidth = convert_pixel_width_to_tile_width(width);
+ newWidth = ConvertPixelWidthToTileWidth(width);
- left = sub_80E2D5C(left, columnCount * newWidth);
- rowCount = gMultichoiceLists[multichoiceId].count / columnCount;
+ left = ScriptMenu_AdjustLeftCoordFromWidth(left, columnCount * newWidth);
+ rowCount = sMultichoiceLists[multichoiceId].count / columnCount;
taskId = CreateTask(Task_HandleMultichoiceGridInput, 80);
gTasks[taskId].tIgnoreBPress = ignoreBPress;
gTasks[taskId].tWindowId = CreateWindowFromRect(left, top, columnCount * newWidth, rowCount * 2);
SetStandardWindowBorderStyle(gTasks[taskId].tWindowId, 0);
- PrintMenuGridTable(gTasks[taskId].tWindowId, newWidth * 8, columnCount, rowCount, gMultichoiceLists[multichoiceId].list);
+ PrintMenuGridTable(gTasks[taskId].tWindowId, newWidth * 8, columnCount, rowCount, sMultichoiceLists[multichoiceId].list);
sub_8199944(gTasks[taskId].tWindowId, newWidth * 8, columnCount, rowCount, 0);
CopyWindowToVram(gTasks[taskId].tWindowId, 3);
return TRUE;
@@ -1293,7 +298,7 @@ static void Task_HandleMultichoiceGridInput(u8 taskId)
if (tIgnoreBPress)
return;
PlaySE(SE_SELECT);
- gSpecialVar_Result = 0x7F;
+ gSpecialVar_Result = MULTI_B_PRESSED;
break;
default:
gSpecialVar_Result = selection;
@@ -1307,7 +312,7 @@ static void Task_HandleMultichoiceGridInput(u8 taskId)
#undef tWindowId
-bool16 ScrSpecial_CreatePCMenu(void)
+bool16 ScriptMenu_CreatePCMultichoice(void)
{
if (FuncIsActiveTask(Task_HandleMultichoiceInput) == TRUE)
{
@@ -1316,12 +321,12 @@ bool16 ScrSpecial_CreatePCMenu(void)
else
{
gSpecialVar_Result = 0xFF;
- CreatePCMenu();
+ CreatePCMultichoice();
return TRUE;
}
}
-static void CreatePCMenu(void)
+static void CreatePCMultichoice(void)
{
u8 y = 8;
u32 pixelWidth = 0;
@@ -1332,17 +337,18 @@ static void CreatePCMenu(void)
for (i = 0; i < ARRAY_COUNT(sPCNameStrings); i++)
{
- pixelWidth = display_text_and_get_width(sPCNameStrings[i], pixelWidth);
+ pixelWidth = DisplayTextAndGetWidth(sPCNameStrings[i], pixelWidth);
}
if (FlagGet(FLAG_SYS_GAME_CLEAR))
{
- pixelWidth = display_text_and_get_width(gText_HallOfFame, pixelWidth);
+ pixelWidth = DisplayTextAndGetWidth(gText_HallOfFame, pixelWidth);
}
- width = convert_pixel_width_to_tile_width(pixelWidth);
+ width = ConvertPixelWidthToTileWidth(pixelWidth);
- if (FlagGet(FLAG_SYS_GAME_CLEAR)) // player has cleared game?
+ // Include Hall of Fame option if player is champion
+ if (FlagGet(FLAG_SYS_GAME_CLEAR))
{
numChoices = 4;
windowId = CreateWindowFromRect(0, 0, width, 8);
@@ -1358,7 +364,8 @@ static void CreatePCMenu(void)
AddTextPrinterParameterized(windowId, 1, gText_LogOff, y, 33, TEXT_SPEED_FF, NULL);
}
- if (FlagGet(FLAG_SYS_PC_LANETTE)) // player met lanette?
+ // Change PC name if player has met Lanette
+ if (FlagGet(FLAG_SYS_PC_LANETTE))
AddTextPrinterParameterized(windowId, 1, gText_LanettesPC, y, 1, TEXT_SPEED_FF, NULL);
else
AddTextPrinterParameterized(windowId, 1, gText_SomeonesPC, y, 1, TEXT_SPEED_FF, NULL);
@@ -1367,7 +374,7 @@ static void CreatePCMenu(void)
PrintPlayerNameOnWindow(windowId, gStringVar4, y, 17);
InitMenuInUpperLeftCornerPlaySoundWhenAPressed(windowId, numChoices, 0);
CopyWindowToVram(windowId, 3);
- sub_80E1FBC(FALSE, numChoices, windowId, 1);
+ InitMultichoiceCheckWrap(FALSE, numChoices, windowId, MULTI_PC);
}
void ScriptMenu_DisplayPCStartupPrompt(void)
@@ -1376,7 +383,7 @@ void ScriptMenu_DisplayPCStartupPrompt(void)
AddTextPrinterParameterized2(0, 1, gText_WhichPCShouldBeAccessed, 0, NULL, 2, 1, 3);
}
-bool8 sub_80E2548(void)
+bool8 ScriptMenu_CreateLilycoveSSTidalMultichoice(void)
{
if (FuncIsActiveTask(Task_HandleMultichoiceInput) == TRUE)
{
@@ -1385,14 +392,16 @@ bool8 sub_80E2548(void)
else
{
gSpecialVar_Result = 0xFF;
- sub_80E2578();
+ CreateLilycoveSSTidalMultichoice();
return TRUE;
}
}
-static void sub_80E2578(void)
+// gSpecialVar_0x8004 is 1 if the Sailor was shown multiple event tickets at the same time
+// otherwise gSpecialVar_0x8004 is 0
+static void CreateLilycoveSSTidalMultichoice(void)
{
- u8 temp = 0;
+ u8 selectionCount = 0;
u8 count;
u32 pixelWidth;
u8 width;
@@ -1400,21 +409,22 @@ static void sub_80E2578(void)
u8 i;
u32 j;
- for (i = 0; i < ARRAY_COUNT(gUnknown_03001124); i++)
+ for (i = 0; i < SSTIDAL_SELECTION_COUNT; i++)
{
- gUnknown_03001124[i] = 0xFF;
+ sLilycoveSSTidalSelections[i] = 0xFF;
}
GetFontAttribute(1, FONTATTR_MAX_LETTER_WIDTH);
if (gSpecialVar_0x8004 == 0)
{
- gUnknown_03001124[temp] = 0;
- temp++;
+ sLilycoveSSTidalSelections[selectionCount] = SSTIDAL_SELECTION_SLATEPORT;
+ selectionCount++;
+
if (FlagGet(FLAG_MET_SCOTT_ON_SS_TIDAL) == TRUE)
{
- gUnknown_03001124[temp] = 1;
- temp++;
+ sLilycoveSSTidalSelections[selectionCount] = SSTIDAL_SELECTION_BATTLE_FRONTIER;
+ selectionCount++;
}
}
@@ -1422,14 +432,14 @@ static void sub_80E2578(void)
{
if (gSpecialVar_0x8004 == 0)
{
- gUnknown_03001124[temp] = 2;
- temp++;
+ sLilycoveSSTidalSelections[selectionCount] = SSTIDAL_SELECTION_SOUTHERN_ISLAND;
+ selectionCount++;
}
if (gSpecialVar_0x8004 == 1 && FlagGet(FLAG_HAS_EON_TICKET) == FALSE)
{
- gUnknown_03001124[temp] = 2;
- temp++;
+ sLilycoveSSTidalSelections[selectionCount] = SSTIDAL_SELECTION_SOUTHERN_ISLAND;
+ selectionCount++;
FlagSet(FLAG_HAS_EON_TICKET);
}
}
@@ -1438,14 +448,14 @@ static void sub_80E2578(void)
{
if (gSpecialVar_0x8004 == 0)
{
- gUnknown_03001124[temp] = 3;
- temp++;
+ sLilycoveSSTidalSelections[selectionCount] = SSTIDAL_SELECTION_NAVEL_ROCK;
+ selectionCount++;
}
if (gSpecialVar_0x8004 == 1 && FlagGet(FLAG_HAS_MYSTIC_TICKET) == FALSE)
{
- gUnknown_03001124[temp] = 3;
- temp++;
+ sLilycoveSSTidalSelections[selectionCount] = SSTIDAL_SELECTION_NAVEL_ROCK;
+ selectionCount++;
FlagSet(FLAG_HAS_MYSTIC_TICKET);
}
}
@@ -1454,14 +464,14 @@ static void sub_80E2578(void)
{
if (gSpecialVar_0x8004 == 0)
{
- gUnknown_03001124[temp] = 4;
- temp++;
+ sLilycoveSSTidalSelections[selectionCount] = SSTIDAL_SELECTION_BIRTH_ISLAND;
+ selectionCount++;
}
if (gSpecialVar_0x8004 == 1 && FlagGet(FLAG_HAS_AURORA_TICKET) == FALSE)
{
- gUnknown_03001124[temp] = 4;
- temp++;
+ sLilycoveSSTidalSelections[selectionCount] = SSTIDAL_SELECTION_BIRTH_ISLAND;
+ selectionCount++;
FlagSet(FLAG_HAS_AURORA_TICKET);
}
}
@@ -1470,69 +480,69 @@ static void sub_80E2578(void)
{
if (gSpecialVar_0x8004 == 0)
{
- gUnknown_03001124[temp] = 5;
- temp++;
+ sLilycoveSSTidalSelections[selectionCount] = SSTIDAL_SELECTION_FARAWAY_ISLAND;
+ selectionCount++;
}
if (gSpecialVar_0x8004 == 1 && FlagGet(FLAG_HAS_OLD_SEA_MAP) == FALSE)
{
- gUnknown_03001124[temp] = 5;
- temp++;
+ sLilycoveSSTidalSelections[selectionCount] = SSTIDAL_SELECTION_FARAWAY_ISLAND;
+ selectionCount++;
FlagSet(FLAG_HAS_OLD_SEA_MAP);
}
}
- gUnknown_03001124[temp] = 6;
- temp++;
+ sLilycoveSSTidalSelections[selectionCount] = SSTIDAL_SELECTION_EXIT;
+ selectionCount++;
if (gSpecialVar_0x8004 == 0 && FlagGet(FLAG_MET_SCOTT_ON_SS_TIDAL) == TRUE)
{
- count = temp;
+ count = selectionCount;
}
- count = temp;
- if (count == 7)
+ count = selectionCount;
+ if (count == SSTIDAL_SELECTION_COUNT)
{
- gSpecialVar_0x8004 = 11;
- sub_813A128();
+ gSpecialVar_0x8004 = SCROLL_MULTI_SS_TIDAL_DESTINATION;
+ ShowScrollableMultichoice();
}
else
{
pixelWidth = 0;
- for (j = 0; j < ARRAY_COUNT(gUnknown_0858BB80); j++)
+ for (j = 0; j < SSTIDAL_SELECTION_COUNT; j++)
{
- u8 test = gUnknown_03001124[j];
- if (test != 0xFF)
+ u8 selection = sLilycoveSSTidalSelections[j];
+ if (selection != 0xFF)
{
- pixelWidth = display_text_and_get_width(gUnknown_0858BB80[test], pixelWidth);
+ pixelWidth = DisplayTextAndGetWidth(sLilycoveSSTidalDestinations[selection], pixelWidth);
}
}
- width = convert_pixel_width_to_tile_width(pixelWidth);
- windowId = CreateWindowFromRect(28 - width, (6 - count) * 2, width, count * 2);
+ width = ConvertPixelWidthToTileWidth(pixelWidth);
+ windowId = CreateWindowFromRect(MAX_MULTICHOICE_WIDTH - width, (6 - count) * 2, width, count * 2);
SetStandardWindowBorderStyle(windowId, 0);
- for (temp = 0, i = 0; i < ARRAY_COUNT(gUnknown_0858BB80); i++)
+ for (selectionCount = 0, i = 0; i < SSTIDAL_SELECTION_COUNT; i++)
{
- if (gUnknown_03001124[i] != 0xFF)
+ if (sLilycoveSSTidalSelections[i] != 0xFF)
{
- AddTextPrinterParameterized(windowId, 1, gUnknown_0858BB80[gUnknown_03001124[i]], 8, temp * 16 + 1, TEXT_SPEED_FF, NULL);
- temp++;
+ AddTextPrinterParameterized(windowId, 1, sLilycoveSSTidalDestinations[sLilycoveSSTidalSelections[i]], 8, selectionCount * 16 + 1, TEXT_SPEED_FF, NULL);
+ selectionCount++;
}
}
InitMenuInUpperLeftCornerPlaySoundWhenAPressed(windowId, count, count - 1);
CopyWindowToVram(windowId, 3);
- sub_80E1FBC(FALSE, count, windowId, 8);
+ InitMultichoiceCheckWrap(FALSE, count, windowId, MULTI_SSTIDAL_LILYCOVE);
}
}
-void sub_80E2878(void)
+void GetLilycoveSSTidalSelection(void)
{
- if (gSpecialVar_Result != 0x7F)
+ if (gSpecialVar_Result != MULTI_B_PRESSED)
{
- gSpecialVar_Result = gUnknown_03001124[gSpecialVar_Result];
+ gSpecialVar_Result = sLilycoveSSTidalSelections[gSpecialVar_Result];
}
}
@@ -1629,50 +639,52 @@ void ClearToTransparentAndRemoveWindow(u8 windowId)
RemoveWindow(windowId);
}
-static void sub_80E2A94(u8 multichoiceId)
+static void DrawLinkServicesMultichoiceMenu(u8 multichoiceId)
{
switch (multichoiceId)
{
- case 77:
+ case MULTI_WIRELESS_NO_BERRY:
FillWindowPixelBuffer(0, PIXEL_FILL(1));
- AddTextPrinterParameterized2(0, 1, gUnknown_0858BBAC[Menu_GetCursorPos()], 0, NULL, 2, 1, 3);
+ AddTextPrinterParameterized2(0, 1, sWirelessOptionsNoBerryCrush[Menu_GetCursorPos()], 0, NULL, 2, 1, 3);
break;
- case 76:
+ case MULTI_CABLE_CLUB_WITH_RECORD_MIX:
FillWindowPixelBuffer(0, PIXEL_FILL(1));
- AddTextPrinterParameterized2(0, 1, gUnknown_0858BB9C[Menu_GetCursorPos()], 0, NULL, 2, 1, 3);
+ AddTextPrinterParameterized2(0, 1, sCableClubOptions_WithRecordMix[Menu_GetCursorPos()], 0, NULL, 2, 1, 3);
break;
- case 78:
+ case MULTI_WIRELESS_NO_RECORD:
FillWindowPixelBuffer(0, PIXEL_FILL(1));
- AddTextPrinterParameterized2(0, 1, gUnknown_0858BBBC[Menu_GetCursorPos()], 0, NULL, 2, 1, 3);
+ AddTextPrinterParameterized2(0, 1, sWirelessOptions_NoRecordMix[Menu_GetCursorPos()], 0, NULL, 2, 1, 3);
break;
- case 79:
+ case MULTI_WIRELESS_ALL_SERVICES:
FillWindowPixelBuffer(0, PIXEL_FILL(1));
- AddTextPrinterParameterized2(0, 1, gUnknown_0858BBCC[Menu_GetCursorPos()], 0, NULL, 2, 1, 3);
+ AddTextPrinterParameterized2(0, 1, sWirelessOptions_AllServices[Menu_GetCursorPos()], 0, NULL, 2, 1, 3);
break;
- case 75:
+ case MULTI_WIRELESS_NO_RECORD_BERRY:
FillWindowPixelBuffer(0, PIXEL_FILL(1));
- AddTextPrinterParameterized2(0, 1, gUnknown_0858BBEC[Menu_GetCursorPos()], 0, NULL, 2, 1, 3);
+ AddTextPrinterParameterized2(0, 1, sWirelessOptions_NoRecordMixBerryCrush[Menu_GetCursorPos()], 0, NULL, 2, 1, 3);
break;
- case 74:
+ case MULTI_CABLE_CLUB_NO_RECORD_MIX:
FillWindowPixelBuffer(0, PIXEL_FILL(1));
- AddTextPrinterParameterized2(0, 1, gUnknown_0858BBE0[Menu_GetCursorPos()], 0, NULL, 2, 1, 3);
+ AddTextPrinterParameterized2(0, 1, sCableClubOptions_NoRecordMix[Menu_GetCursorPos()], 0, NULL, 2, 1, 3);
break;
}
}
-bool16 sp106_CreateStartMenu(void)
+bool16 ScriptMenu_CreateStartMenuForPokenavTutorial(void)
{
if (FuncIsActiveTask(Task_HandleMultichoiceInput) == TRUE)
{
return FALSE;
}
-
- gSpecialVar_Result = 0xFF;
- CreateStartMenu();
- return TRUE;
+ else
+ {
+ gSpecialVar_Result = 0xFF;
+ CreateStartMenuForPokenavTutorial();
+ return TRUE;
+ }
}
-static void CreateStartMenu(void)
+static void CreateStartMenuForPokenavTutorial(void)
{
u8 windowId = CreateWindowFromRect(21, 0, 7, 18);
SetStandardWindowBorderStyle(windowId, 0);
@@ -1684,17 +696,17 @@ static void CreateStartMenu(void)
AddTextPrinterParameterized(windowId, 1, gText_MenuOptionSave, 8, 89, TEXT_SPEED_FF, NULL);
AddTextPrinterParameterized(windowId, 1, gText_MenuOptionOption, 8, 105, TEXT_SPEED_FF, NULL);
AddTextPrinterParameterized(windowId, 1, gText_MenuOptionExit, 8, 121, TEXT_SPEED_FF, NULL);
- sub_81983AC(windowId, 1, 0, 9, 16, 8, 0);
- sub_80E2CC4(0, 8, windowId, 86);
+ sub_81983AC(windowId, 1, 0, 9, 16, ARRAY_COUNT(MultichoiceList_ForcedStartMenu), 0);
+ InitMultichoiceNoWrap(FALSE, ARRAY_COUNT(MultichoiceList_ForcedStartMenu), windowId, MULTI_FORCED_START_MENU);
CopyWindowToVram(windowId, 3);
}
#define tWindowId data[6]
-static void sub_80E2CC4(bool8 ignoreBPress, u8 unused, u8 windowId, u8 multichoiceId)
+static void InitMultichoiceNoWrap(bool8 ignoreBPress, u8 unusedCount, u8 windowId, u8 multichoiceId)
{
u8 taskId;
- gUnknown_02039F90 = 2;
+ sProcessInputDelay = 2;
taskId = CreateTask(Task_HandleMultichoiceInput, 80);
gTasks[taskId].tIgnoreBPress = ignoreBPress;
gTasks[taskId].tDoWrap = 0;
@@ -1711,47 +723,43 @@ static void sub_80E2CC4(bool8 ignoreBPress, u8 unused, u8 windowId, u8 multichoi
#undef tWindowId
#undef tMultichoiceId
-static int display_text_and_get_width_internal(const u8 *str)
+static int DisplayTextAndGetWidthInternal(const u8 *str)
{
u8 temp[64];
StringExpandPlaceholders(temp, str);
return GetStringWidth(1, temp, 0);
}
-int display_text_and_get_width(const u8 *str, int prevMaxWidth)
+int DisplayTextAndGetWidth(const u8 *str, int prevWidth)
{
- int len = display_text_and_get_width_internal(str);
- if (len < prevMaxWidth)
+ int width = DisplayTextAndGetWidthInternal(str);
+ if (width < prevWidth)
{
- len = prevMaxWidth;
+ width = prevWidth;
}
- return len;
+ return width;
}
-int convert_pixel_width_to_tile_width(int width)
+int ConvertPixelWidthToTileWidth(int width)
{
- return (((width + 9) / 8) + 1) > 28 ? 28 : (((width + 9) / 8) + 1);
+ return (((width + 9) / 8) + 1) > MAX_MULTICHOICE_WIDTH ? MAX_MULTICHOICE_WIDTH : (((width + 9) / 8) + 1);
}
-int sub_80E2D5C(int a0, int a1)
+int ScriptMenu_AdjustLeftCoordFromWidth(int left, int width)
{
- int ret = a0;
+ int adjustedLeft = left;
- if (a0 + a1 > 28)
+ if (left + width > MAX_MULTICHOICE_WIDTH)
{
- if (28 - a1 < 0)
+ if (MAX_MULTICHOICE_WIDTH - width < 0)
{
- ret = 0;
+ adjustedLeft = 0;
}
else
{
- ret = 28 - a1;
+ adjustedLeft = MAX_MULTICHOICE_WIDTH - width;
}
}
- else
- {
- ret = a0;
- }
- return ret;
+ return adjustedLeft;
}
diff --git a/src/script_movement.c b/src/script_movement.c
index 9fee9e060..03d6b10e8 100644
--- a/src/script_movement.c
+++ b/src/script_movement.c
@@ -3,20 +3,22 @@
#include "event_object_movement.h"
#include "task.h"
#include "util.h"
+#include "constants/event_objects.h"
+#include "constants/event_object_movement_constants.h"
// static functions
-static void sub_80D33AC(u8);
-static u8 sub_80D33F4(void);
-static bool8 sub_80D3408(u8, u8, const u8 *);
-static u8 sub_80D3474(u8, u8);
-static bool8 sub_80D3584(u8, u8);
-static void sub_80D35DC(u8, u8, u8, const u8 *);
-static void UnfreezeObjects(u8);
-static void sub_80D3660(u8);
-static void sub_80A2490(u8, u8, u8, const u8 *);
+static void ScriptMovement_StartMoveObjects(u8 priority);
+static u8 GetMoveObjectsTaskId(void);
+static bool8 ScriptMovement_TryAddNewMovement(u8 taskId, u8 eventObjId, const u8 *movementScript);
+static u8 GetMovementScriptIdFromEventObjectId(u8 taskId, u8 eventObjId);
+static bool8 IsMovementScriptFinished(u8 taskId, u8 moveScrId);
+static void ScriptMovement_AddNewMovement(u8 taskId, u8 moveScrId, u8 eventObjId, const u8 *movementScript);
+static void ScriptMovement_UnfreezeActiveObjects(u8 taskId);
+static void ScriptMovement_MoveObjects(u8 taskId);
+static void ScriptMovement_TakeStep(u8 taskId, u8 moveScrId, u8 eventObjId, const u8 *movementScript);
// EWRAM_DATA
-static EWRAM_DATA const u8 *gUnknown_02039D90[16] = {0};
+static EWRAM_DATA const u8 *gMovementScripts[EVENT_OBJECTS_COUNT] = {0};
// text
bool8 ScriptMovement_StartObjectMovementScript(u8 localId, u8 mapNum, u8 mapGroup, const u8 *movementScript)
@@ -25,207 +27,207 @@ bool8 ScriptMovement_StartObjectMovementScript(u8 localId, u8 mapNum, u8 mapGrou
if (TryGetEventObjectIdByLocalIdAndMap(localId, mapNum, mapGroup, &eventObjId))
return TRUE;
- if (!FuncIsActiveTask(sub_80D3660))
- sub_80D33AC(50);
- return sub_80D3408(sub_80D33F4(), eventObjId, movementScript);
+ if (!FuncIsActiveTask(ScriptMovement_MoveObjects))
+ ScriptMovement_StartMoveObjects(50);
+ return ScriptMovement_TryAddNewMovement(GetMoveObjectsTaskId(), eventObjId, movementScript);
}
-bool8 ScriptMovement_IsObjectMovementFinished(u8 localId, u8 mapNum, u8 mapBank)
+bool8 ScriptMovement_IsObjectMovementFinished(u8 localId, u8 mapNum, u8 mapGroup)
{
u8 eventObjId;
- u8 r4;
- u8 r1;
+ u8 taskId;
+ u8 moveScrId;
- if (TryGetEventObjectIdByLocalIdAndMap(localId, mapNum, mapBank, &eventObjId))
+ if (TryGetEventObjectIdByLocalIdAndMap(localId, mapNum, mapGroup, &eventObjId))
return TRUE;
- r4 = sub_80D33F4();
- r1 = sub_80D3474(r4, eventObjId);
- if (r1 == 16)
+ taskId = GetMoveObjectsTaskId();
+ moveScrId = GetMovementScriptIdFromEventObjectId(taskId, eventObjId);
+ if (moveScrId == EVENT_OBJECTS_COUNT)
return TRUE;
- return sub_80D3584(r4, r1);
+ return IsMovementScriptFinished(taskId, moveScrId);
}
-void sub_80D338C(void)
+void ScriptMovement_UnfreezeEventObjects(void)
{
u8 taskId;
- taskId = sub_80D33F4();
+ taskId = GetMoveObjectsTaskId();
if (taskId != 0xFF)
{
- UnfreezeObjects(taskId);
+ ScriptMovement_UnfreezeActiveObjects(taskId);
DestroyTask(taskId);
}
}
-
-static void sub_80D33AC(u8 priority)
+static void ScriptMovement_StartMoveObjects(u8 priority)
{
u8 taskId;
u8 i;
- taskId = CreateTask(sub_80D3660, priority);
- for (i = 1; i < 16; i++)
+ taskId = CreateTask(ScriptMovement_MoveObjects, priority);
+
+ for (i = 1; i < NUM_TASK_DATA; i++)
gTasks[taskId].data[i] = 0xFFFF;
}
-static u8 sub_80D33F4(void)
+static u8 GetMoveObjectsTaskId(void)
{
- return FindTaskIdByFunc(sub_80D3660);
+ return FindTaskIdByFunc(ScriptMovement_MoveObjects);
}
-static bool8 sub_80D3408(u8 taskId, u8 eventObjId, const u8 *movementScript)
+static bool8 ScriptMovement_TryAddNewMovement(u8 taskId, u8 eventObjId, const u8 *movementScript)
{
- u8 r4;
+ u8 moveScrId;
- r4 = sub_80D3474(taskId, eventObjId);
- if (r4 != 16)
+ moveScrId = GetMovementScriptIdFromEventObjectId(taskId, eventObjId);
+ if (moveScrId != EVENT_OBJECTS_COUNT)
{
- if (sub_80D3584(taskId, r4) == 0)
+ if (IsMovementScriptFinished(taskId, moveScrId) == 0)
{
return TRUE;
}
else
{
- sub_80D35DC(taskId, r4, eventObjId, movementScript);
+ ScriptMovement_AddNewMovement(taskId, moveScrId, eventObjId, movementScript);
return FALSE;
}
}
- r4 = sub_80D3474(taskId, 0xFF);
- if (r4 == 16)
+ moveScrId = GetMovementScriptIdFromEventObjectId(taskId, EVENT_OBJ_ID_PLAYER);
+ if (moveScrId == EVENT_OBJECTS_COUNT)
{
return TRUE;
}
else
{
- sub_80D35DC(taskId, r4, eventObjId, movementScript);
+ ScriptMovement_AddNewMovement(taskId, moveScrId, eventObjId, movementScript);
return FALSE;
}
}
-static u8 sub_80D3474(u8 taskId, u8 b)
+static u8 GetMovementScriptIdFromEventObjectId(u8 taskId, u8 eventObjId)
{
- u8 *ptr;
+ u8 *moveScriptId;
u8 i;
- ptr = (u8 *)&gTasks[taskId].data[1];
- for (i = 0; i < 16; i++, ptr++)
+ moveScriptId = (u8 *)&gTasks[taskId].data[1];
+ for (i = 0; i < EVENT_OBJECTS_COUNT; i++, moveScriptId++)
{
- if (*ptr == b)
+ if (*moveScriptId == eventObjId)
return i;
}
- return 16;
+ return EVENT_OBJECTS_COUNT;
}
-static void sub_80D34B0(u8 taskId, u8 b, u8 **c)
+static void LoadEventObjectIdPtrFromMovementScript(u8 taskId, u8 moveScrId, u8 **pEventObjId)
{
u8 i;
- *c = (u8 *)&gTasks[taskId].data[1];
- for (i = 0; i < b; i++, (*c)++)
+ *pEventObjId = (u8 *)&gTasks[taskId].data[1];
+ for (i = 0; i < moveScrId; i++, (*pEventObjId)++)
;
}
-static void sub_80D34E4(u8 taskId, u8 b, u8 c)
+static void SetEventObjectIdAtMovementScript(u8 taskId, u8 moveScrId, u8 eventObjId)
{
u8 *ptr;
- sub_80D34B0(taskId, b, &ptr);
- *ptr = c; //what is this supposed to do?
+ LoadEventObjectIdPtrFromMovementScript(taskId, moveScrId, &ptr);
+ *ptr = eventObjId;
}
-static void sub_80D3508(u8 taskId, u8 b, u8 *c)
+static void LoadEventObjectIdFromMovementScript(u8 taskId, u8 moveScrId, u8 *eventObjId)
{
u8 *ptr;
- sub_80D34B0(taskId, b, &ptr);
- *c = *ptr;
+ LoadEventObjectIdPtrFromMovementScript(taskId, moveScrId, &ptr);
+ *eventObjId = *ptr;
}
-static void sub_80D352C(u8 a, u8 b)
+static void ClearMovementScriptFinished(u8 taskId, u8 moveScrId)
{
- u16 var = ~gBitTable[b];
+ u16 mask = ~gBitTable[moveScrId];
- gTasks[a].data[0] &= var;
+ gTasks[taskId].data[0] &= mask;
}
-static void sub_80D355C(u8 taskId, u8 b)
+static void SetMovementScriptFinished(u8 taskId, u8 moveScrId)
{
- gTasks[taskId].data[0] |= gBitTable[b];
+ gTasks[taskId].data[0] |= gBitTable[moveScrId];
}
-static bool8 sub_80D3584(u8 taskId, u8 b)
+static bool8 IsMovementScriptFinished(u8 taskId, u8 moveScrId)
{
- u16 var = (u16)gTasks[taskId].data[0] & gBitTable[b];
+ u16 moveScriptFinished = (u16)gTasks[taskId].data[0] & gBitTable[moveScrId];
- if (var != 0)
+ if (moveScriptFinished != 0)
return TRUE;
else
return FALSE;
}
-static void npc_obj_offscreen_culling_and_flag_update(u8 a, const u8 *movementScript)
+static void SetMovementScript(u8 moveScrId, const u8 *movementScript)
{
- gUnknown_02039D90[a] = movementScript;
+ gMovementScripts[moveScrId] = movementScript;
}
-static const u8 *sub_80D35CC(u8 a)
+static const u8 *GetMovementScript(u8 moveScrId)
{
- return gUnknown_02039D90[a];
+ return gMovementScripts[moveScrId];
}
-static void sub_80D35DC(u8 taskId, u8 b, u8 eventObjId, const u8 *movementScript)
+static void ScriptMovement_AddNewMovement(u8 taskId, u8 moveScrId, u8 eventObjId, const u8 *movementScript)
{
- sub_80D352C(taskId, b);
- npc_obj_offscreen_culling_and_flag_update(b, movementScript);
- sub_80D34E4(taskId, b, eventObjId);
+ ClearMovementScriptFinished(taskId, moveScrId);
+ SetMovementScript(moveScrId, movementScript);
+ SetEventObjectIdAtMovementScript(taskId, moveScrId, eventObjId);
}
-static void UnfreezeObjects(u8 taskId)
+static void ScriptMovement_UnfreezeActiveObjects(u8 taskId)
{
u8 *pEventObjId;
u8 i;
pEventObjId = (u8 *)&gTasks[taskId].data[1];
- for (i = 0; i < 16; i++, pEventObjId++)
+ for (i = 0; i < EVENT_OBJECTS_COUNT; i++, pEventObjId++)
{
if (*pEventObjId != 0xFF)
UnfreezeEventObject(&gEventObjects[*pEventObjId]);
}
}
-static void sub_80D3660(u8 taskId)
+static void ScriptMovement_MoveObjects(u8 taskId)
{
u8 i;
- u8 var;
+ u8 eventObjId;
- for (i = 0; i < 16; i++)
+ for (i = 0; i < EVENT_OBJECTS_COUNT; i++)
{
- sub_80D3508(taskId, i, &var);
- if (var != 0xFF)
- sub_80A2490(taskId, i, var, sub_80D35CC(i));
+ LoadEventObjectIdFromMovementScript(taskId, i, &eventObjId);
+ if (eventObjId != 0xFF)
+ ScriptMovement_TakeStep(taskId, i, eventObjId, GetMovementScript(i));
}
}
-static void sub_80A2490(u8 taskId, u8 b, u8 eventObjId, const u8 *d)
+static void ScriptMovement_TakeStep(u8 taskId, u8 moveScrId, u8 eventObjId, const u8 *movementScript)
{
- u8 var;
+ u8 nextMoveActionId;
if (EventObjectIsHeldMovementActive(&gEventObjects[eventObjId])
&& !EventObjectClearHeldMovementIfFinished(&gEventObjects[eventObjId]))
return;
- var = *d;
- if (var == 0xFE)
+ nextMoveActionId = *movementScript;
+ if (nextMoveActionId == MOVEMENT_ACTION_STEP_END)
{
- sub_80D355C(taskId, b);
+ SetMovementScriptFinished(taskId, moveScrId);
FreezeEventObject(&gEventObjects[eventObjId]);
}
else
{
- if (!EventObjectSetHeldMovement(&gEventObjects[eventObjId], var))
+ if (!EventObjectSetHeldMovement(&gEventObjects[eventObjId], nextMoveActionId))
{
- d++;
- npc_obj_offscreen_culling_and_flag_update(b, d);
+ movementScript++;
+ SetMovementScript(moveScrId, movementScript);
}
}
}
diff --git a/src/script_pokemon_util_80F87D8.c b/src/script_pokemon_util_80F87D8.c
index 2c7a9c775..a80fe49ff 100755
--- a/src/script_pokemon_util_80F87D8.c
+++ b/src/script_pokemon_util_80F87D8.c
@@ -551,7 +551,7 @@ u8 ScriptGiveMon(u16 species, u8 level, u16 item, u32 unused1, u32 unused2, u8 u
u8 heldItem[2];
struct Pokemon mon;
- CreateMon(&mon, species, level, 32, 0, 0, 0, 0);
+ CreateMon(&mon, species, level, 32, 0, 0, OT_ID_PLAYER_ID, 0);
heldItem[0] = item;
heldItem[1] = item >> 8;
SetMonData(&mon, MON_DATA_HELD_ITEM, heldItem);
@@ -585,14 +585,14 @@ void HasEnoughMonsForDoubleBattle(void)
{
switch (GetMonsStateToDoubles())
{
- case 0:
- gSpecialVar_Result = 0;
+ case PLAYER_HAS_TWO_USABLE_MONS:
+ gSpecialVar_Result = PLAYER_HAS_TWO_USABLE_MONS;
break;
- case 1:
- gSpecialVar_Result = 1;
+ case PLAYER_HAS_ONE_MON:
+ gSpecialVar_Result = PLAYER_HAS_ONE_MON;
break;
- case 2:
- gSpecialVar_Result = 2;
+ case PLAYER_HAS_ONE_USABLE_MON:
+ gSpecialVar_Result = PLAYER_HAS_ONE_USABLE_MON;
break;
}
}
@@ -624,7 +624,7 @@ void CreateScriptedWildMon(u16 species, u8 level, u16 item)
u8 heldItem[2];
ZeroEnemyPartyMons();
- CreateMon(&gEnemyParty[0], species, level, 0x20, 0, 0, 0, 0);
+ CreateMon(&gEnemyParty[0], species, level, 0x20, 0, 0, OT_ID_PLAYER_ID, 0);
if (item)
{
heldItem[0] = item;
diff --git a/src/secret_base.c b/src/secret_base.c
index 12cb8cd61..861a987e2 100644
--- a/src/secret_base.c
+++ b/src/secret_base.c
@@ -349,7 +349,7 @@ void SetPlayerSecretBase(void)
u16 i;
gSaveBlock1Ptr->secretBases[0].secretBaseId = sCurSecretBaseId;
- for (i = 0; i < 4; i++)
+ for (i = 0; i < TRAINER_ID_LENGTH; i++)
gSaveBlock1Ptr->secretBases[0].trainerId[i] = gSaveBlock2Ptr->playerTrainerId[i];
VarSet(VAR_CURRENT_SECRET_BASE, 0);
@@ -1291,7 +1291,7 @@ static void SetSecretBaseDataAndLanguage(u8 secretBaseId, struct SecretBase *sec
static bool8 SecretBasesHaveSameTrainerId(struct SecretBase *secretBase1, struct SecretBase *secretBase2)
{
u8 i;
- for (i = 0; i < 4; i++)
+ for (i = 0; i < TRAINER_ID_LENGTH; i++)
{
if (secretBase1->trainerId[i] != secretBase2->trainerId[i])
return FALSE;
@@ -1445,7 +1445,7 @@ bool8 SecretBaseBelongsToPlayer(struct SecretBase *secretBase)
return FALSE;
// Check if the player's trainer Id matches the secret base's id.
- for (i = 0; i < 4; i++)
+ for (i = 0; i < TRAINER_ID_LENGTH; i++)
{
if (secretBase->trainerId[i] != gSaveBlock2Ptr->playerTrainerId[i])
return FALSE;
diff --git a/src/string_util.c b/src/string_util.c
index 39d235ab8..bce299057 100644
--- a/src/string_util.c
+++ b/src/string_util.c
@@ -505,20 +505,20 @@ const u8 *GetExpandedPlaceholder(u32 id)
static const ExpandPlaceholderFunc funcs[] =
{
- ExpandPlaceholder_UnknownStringVar,
- ExpandPlaceholder_PlayerName,
- ExpandPlaceholder_StringVar1,
- ExpandPlaceholder_StringVar2,
- ExpandPlaceholder_StringVar3,
- ExpandPlaceholder_KunChan,
- ExpandPlaceholder_RivalName,
- ExpandPlaceholder_Version,
- ExpandPlaceholder_Aqua,
- ExpandPlaceholder_Magma,
- ExpandPlaceholder_Archie,
- ExpandPlaceholder_Maxie,
- ExpandPlaceholder_Kyogre,
- ExpandPlaceholder_Groudon,
+ [PLACEHOLDER_ID_UNKNOWN] = ExpandPlaceholder_UnknownStringVar,
+ [PLACEHOLDER_ID_PLAYER] = ExpandPlaceholder_PlayerName,
+ [PLACEHOLDER_ID_STRING_VAR_1] = ExpandPlaceholder_StringVar1,
+ [PLACEHOLDER_ID_STRING_VAR_2] = ExpandPlaceholder_StringVar2,
+ [PLACEHOLDER_ID_STRING_VAR_3] = ExpandPlaceholder_StringVar3,
+ [PLACEHOLDER_ID_KUN] = ExpandPlaceholder_KunChan,
+ [PLACEHOLDER_ID_RIVAL] = ExpandPlaceholder_RivalName,
+ [PLACEHOLDER_ID_VERSION] = ExpandPlaceholder_Version,
+ [PLACEHOLDER_ID_AQUA] = ExpandPlaceholder_Aqua,
+ [PLACEHOLDER_ID_MAGMA] = ExpandPlaceholder_Magma,
+ [PLACEHOLDER_ID_ARCHIE] = ExpandPlaceholder_Archie,
+ [PLACEHOLDER_ID_MAXIE] = ExpandPlaceholder_Maxie,
+ [PLACEHOLDER_ID_KYOGRE] = ExpandPlaceholder_Kyogre,
+ [PLACEHOLDER_ID_GROUDON] = ExpandPlaceholder_Groudon,
};
if (id >= ARRAY_COUNT(funcs))
diff --git a/src/strings.c b/src/strings.c
index 8463cfacb..ed702958e 100644
--- a/src/strings.c
+++ b/src/strings.c
@@ -599,89 +599,89 @@ const u8 gText_Brawly[] = _("BRAWLY");
const u8 gText_Winona[] = _("WINONA");
const u8 gText_Phoebe[] = _("PHOEBE");
const u8 gText_Glacia[] = _("GLACIA");
-const u8 gUnknown_085EAD37[] = _("PETALBURG");
-const u8 gUnknown_085EAD41[] = _("SLATEPORT");
-const u8 gUnknown_085EAD4B[] = _("LITTLEROOT");
-const u8 gUnknown_085EAD56[] = _("LILYCOVE");
-const u8 gUnknown_085EAD5F[] = _("DEWFORD");
-const u8 gUnknown_085EAD67[] = _("ENTER");
-const u8 gUnknown_085EAD6D[] = _("INFO");
-const u8 gUnknown_085EAD72[] = _("What's a CONTEST?");
-const u8 gUnknown_085EAD84[] = _("Types of CONTESTS");
-const u8 gUnknown_085EAD96[] = _("Ranks");
-const u8 gUnknown_085EAD9C[] = _("Judging");
-const u8 gUnknown_085EADA4[] = _("COOLNESS CONTEST");
-const u8 gUnknown_085EADB5[] = _("BEAUTY CONTEST");
-const u8 gUnknown_085EADC4[] = _("CUTENESS CONTEST");
-const u8 gUnknown_085EADD5[] = _("SMARTNESS CONTEST");
-const u8 gUnknown_085EADE7[] = _("TOUGHNESS CONTEST");
-const u8 gUnknown_085EADF9[] = _("DECORATION");
-const u8 gUnknown_085EAE04[] = _("PACK UP");
-const u8 gUnknown_085EAE0C[] = _("COUNT");
-const u8 gUnknown_085EAE12[] = _("REGISTRY");
-const u8 gUnknown_085EAE1B[] = _("INFORMATION");
-const u8 gUnknown_085EAE27[] = _("MACH");
-const u8 gUnknown_085EAE2C[] = _("ACRO");
-const u8 gUnknown_085EAE31[] = _("PSN");
-const u8 gUnknown_085EAE35[] = _("PAR");
-const u8 gUnknown_085EAE39[] = _("SLP");
-const u8 gUnknown_085EAE3D[] = _("BRN");
-const u8 gUnknown_085EAE41[] = _("FRZ");
+const u8 gText_Petalburg[] = _("PETALBURG");
+const u8 gText_Slateport[] = _("SLATEPORT");
+const u8 gText_Littleroot[] = _("LITTLEROOT"); // Unused. Given the context, Briney may at one point have been able to sail the player here
+const u8 gText_Lilycove[] = _("LILYCOVE"); // Unused. Given the context, Briney may at one point have been able to sail the player here
+const u8 gText_Dewford[] = _("DEWFORD");
+const u8 gText_Enter2[] = _("ENTER");
+const u8 gText_Info2[] = _("INFO");
+const u8 gText_WhatsAContest[] = _("What's a CONTEST?");
+const u8 gText_TypesOfContests[] = _("Types of CONTESTS");
+const u8 gText_Ranks[] = _("Ranks");
+const u8 gText_Judging[] = _("Judging"); //unused
+const u8 gText_CoolnessContest[] = _("COOLNESS CONTEST");
+const u8 gText_BeautyContest[] = _("BEAUTY CONTEST");
+const u8 gText_CutenessContest[] = _("CUTENESS CONTEST");
+const u8 gText_SmartnessContest[] = _("SMARTNESS CONTEST");
+const u8 gText_ToughnessContest[] = _("TOUGHNESS CONTEST");
+const u8 gText_Decoration2[] = _("DECORATION");
+const u8 gText_PackUp[] = _("PACK UP");
+const u8 gText_Count[] = _("COUNT"); //unused
+const u8 gText_Registry[] = _("REGISTRY");
+const u8 gText_Information[] = _("INFORMATION");
+const u8 gText_Mach[] = _("MACH");
+const u8 gText_Acro[] = _("ACRO");
+const u8 gText_Psn[] = _("PSN");
+const u8 gText_Par[] = _("PAR");
+const u8 gText_Slp[] = _("SLP");
+const u8 gText_Brn[] = _("BRN");
+const u8 gText_Frz[] = _("FRZ");
const u8 gUnknown_085EAE45[] = _("TOXIC");
const u8 gUnknown_085EAE4B[] = _("OK");
const u8 gUnknown_085EAE4E[] = _("QUIT");
-const u8 gUnknown_085EAE53[] = _("Saw it");
-const u8 gUnknown_085EAE5A[] = _("Not yet");
+const u8 gText_SawIt[] = _("Saw it");
+const u8 gText_NotYet[] = _("Not yet");
const u8 gText_Yes[] = _("YES");
const u8 gText_No[] = _("NO");
const u8 gUnknown_085EAE69[] = _("INFO");
-const u8 gUnknown_085EAE6E[] = _("SINGLE BATTLE");
-const u8 gUnknown_085EAE7C[] = _("DOUBLE BATTLE");
-const u8 gUnknown_085EAE8A[] = _("MULTI BATTLE");
+const u8 gText_SingleBattle[] = _("SINGLE BATTLE");
+const u8 gText_DoubleBattle[] = _("DOUBLE BATTLE");
+const u8 gText_MultiBattle[] = _("MULTI BATTLE");
const u8 gUnknown_085EAE97[] = _("MR. BRINEY");
-const u8 gUnknown_085EAEA2[] = _("CHALLENGE");
-const u8 gUnknown_085EAEAC[] = _("INFO");
+const u8 gText_Challenge[] = _("CHALLENGE");
+const u8 gText_Info3[] = _("INFO");
const u8 gText_Lv50[] = _("LV. 50");
const u8 gText_OpenLevel[] = _("OPEN LEVEL");
-const u8 gUnknown_085EAEC3[] = _("FRESH WATER{CLEAR_TO 0x48}¥200");
-const u8 gUnknown_085EAED6[] = _("SODA POP{CLEAR_TO 0x48}¥300");
-const u8 gUnknown_085EAEE6[] = _("LEMONADE{CLEAR_TO 0x48}¥350");
-const u8 gUnknown_085EAEF6[] = _("HOW TO RIDE");
-const u8 gUnknown_085EAF02[] = _("HOW TO TURN");
-const u8 gUnknown_085EAF0E[] = _("SANDY SLOPES");
-const u8 gUnknown_085EAF1B[] = _("WHEELIES");
-const u8 gUnknown_085EAF24[] = _("BUNNY-HOPS");
-const u8 gUnknown_085EAF2F[] = _("JUMP");
-const u8 gUnknown_085EAF34[] = _("Satisfied");
-const u8 gUnknown_085EAF3E[] = _("Dissatisfied");
-const u8 gUnknown_085EAF4B[] = _("DEEPSEATOOTH");
-const u8 gUnknown_085EAF58[] = _("DEEPSEASCALE");
-const u8 gUnknown_085EAF65[] = _("BLUE FLUTE");
-const u8 gUnknown_085EAF70[] = _("YELLOW FLUTE");
-const u8 gUnknown_085EAF7D[] = _("RED FLUTE");
-const u8 gUnknown_085EAF87[] = _("WHITE FLUTE");
-const u8 gUnknown_085EAF93[] = _("BLACK FLUTE");
-const u8 gUnknown_085EAF9F[] = _("GLASS CHAIR");
-const u8 gUnknown_085EAFAB[] = _("GLASS DESK");
-const u8 gUnknown_085EAFB6[] = _("TREECKO DOLL 1,000 COINS");
-const u8 gUnknown_085EAFCF[] = _("TORCHIC DOLL 1,000 COINS");
-const u8 gUnknown_085EAFE8[] = _("MUDKIP DOLL 1,000 COINS");
-const u8 gUnknown_085EB002[] = _(" 50 COINS ¥1,000");
-const u8 gUnknown_085EB017[] = _("500 COINS ¥10,000");
-const u8 gUnknown_085EB02A[] = _("Excellent");
-const u8 gUnknown_085EB034[] = _("Not so good");
-const u8 gUnknown_085EB040[] = _("RED SHARD");
-const u8 gUnknown_085EB04A[] = _("YELLOW SHARD");
-const u8 gUnknown_085EB057[] = _("BLUE SHARD");
-const u8 gUnknown_085EB062[] = _("GREEN SHARD");
+const u8 gText_FreshWaterAndPrice[] = _("FRESH WATER{CLEAR_TO 0x48}¥200");
+const u8 gText_SodaPopAndPrice[] = _("SODA POP{CLEAR_TO 0x48}¥300");
+const u8 gText_LemonadeAndPrice[] = _("LEMONADE{CLEAR_TO 0x48}¥350");
+const u8 gText_HowToRide[] = _("HOW TO RIDE");
+const u8 gText_HowToTurn[] = _("HOW TO TURN");
+const u8 gText_SandySlopes[] = _("SANDY SLOPES");
+const u8 gText_Wheelies[] = _("WHEELIES");
+const u8 gText_BunnyHops[] = _("BUNNY-HOPS");
+const u8 gText_Jump[] = _("JUMP");
+const u8 gText_Satisfied[] = _("Satisfied");
+const u8 gText_Dissatisfied[] = _("Dissatisfied");
+const u8 gText_DeepSeaTooth[] = _("DEEPSEATOOTH");
+const u8 gText_DeepSeaScale[] = _("DEEPSEASCALE");
+const u8 gText_BlueFlute2[] = _("BLUE FLUTE");
+const u8 gText_YellowFlute2[] = _("YELLOW FLUTE");
+const u8 gText_RedFlute2[] = _("RED FLUTE");
+const u8 gText_WhiteFlute2[] = _("WHITE FLUTE");
+const u8 gText_BlackFlute2[] = _("BLACK FLUTE");
+const u8 gText_GlassChair[] = _("GLASS CHAIR");
+const u8 gText_GlassDesk[] = _("GLASS DESK");
+const u8 gText_TreeckoDollAndPrice[] = _("TREECKO DOLL 1,000 COINS");
+const u8 gText_TorchicDollAndPrice[] = _("TORCHIC DOLL 1,000 COINS");
+const u8 gText_MudkipDollAndPrice[] = _("MUDKIP DOLL 1,000 COINS");
+const u8 gText_50CoinsAndPrice[] = _(" 50 COINS ¥1,000");
+const u8 gText_500CoinsAndPrice[] = _("500 COINS ¥10,000");
+const u8 gText_Excellent2[] = _("Excellent");
+const u8 gText_NotSoGood[] = _("Not so good");
+const u8 gText_RedShard[] = _("RED SHARD");
+const u8 gText_YellowShard[] = _("YELLOW SHARD");
+const u8 gText_BlueShard[] = _("BLUE SHARD");
+const u8 gText_GreenShard[] = _("GREEN SHARD");
const u8 gText_BattleFrontier[] = _("BATTLE FRONTIER");
-const u8 gUnknown_085EB07E[] = _("Right");
-const u8 gUnknown_085EB084[] = _("Left");
-const u8 gUnknown_085EB089[] = _("TM32{CLEAR_TO 0x48}1,500 COINS");
-const u8 gUnknown_085EB09C[] = _("TM29{CLEAR_TO 0x48}3,500 COINS");
-const u8 gUnknown_085EB0AF[] = _("TM35{CLEAR_TO 0x48}4,000 COINS");
-const u8 gUnknown_085EB0C2[] = _("TM24{CLEAR_TO 0x48}4,000 COINS");
-const u8 gUnknown_085EB0D5[] = _("TM13{CLEAR_TO 0x48}4,000 COINS");
+const u8 gText_Right[] = _("Right");
+const u8 gText_Left[] = _("Left");
+const u8 gText_TM32AndPrice[] = _("TM32{CLEAR_TO 0x48}1,500 COINS");
+const u8 gText_TM29AndPrice[] = _("TM29{CLEAR_TO 0x48}3,500 COINS");
+const u8 gText_TM35AndPrice[] = _("TM35{CLEAR_TO 0x48}4,000 COINS");
+const u8 gText_TM24AndPrice[] = _("TM24{CLEAR_TO 0x48}4,000 COINS");
+const u8 gText_TM13AndPrice[] = _("TM13{CLEAR_TO 0x48}4,000 COINS");
const u8 gText_Cool[] = _("COOL");
const u8 gText_Beauty[] = _("BEAUTY");
const u8 gText_Cute[] = _("CUTE");
@@ -728,82 +728,81 @@ const u8 gText_MenuOptionPokedex[] = _("POKéDEX");
const u8 gText_MenuOptionPokemon[] = _("POKéMON");
const u8 gText_MenuOptionBag[] = _("BAG");
const u8 gText_MenuOptionPokenav[] = _("POKéNAV");
-const u8 gUnknown_085EB278[] = _("");
+const u8 gText_Blank[] = _("");
const u8 gText_MenuOptionSave[] = _("SAVE");
const u8 gText_MenuOptionOption[] = _("OPTION");
const u8 gText_MenuOptionExit[] = _("EXIT");
-const u8 gUnknown_085EB28A[] = __(" ");
-const u8 gUnknown_085EB28C[] = _("5BP");
-const u8 gUnknown_085EB290[] = _("10BP");
-const u8 gUnknown_085EB295[] = _("15BP");
-const u8 gUnknown_085EB29A[] = _("RED TENT");
-const u8 gUnknown_085EB2A3[] = _("BLUE TENT");
+const u8 gText_5BP[] = _(" 5BP");
+const u8 gText_10BP[] = _("10BP");
+const u8 gText_15BP[] = _("15BP");
+const u8 gText_RedTent[] = _("RED TENT");
+const u8 gText_BlueTent[] = _("BLUE TENT");
const u8 gText_SouthernIsland[] = _("SOUTHERN ISLAND");
const u8 gText_BirthIsland[] = _("BIRTH ISLAND");
const u8 gText_FarawayIsland[] = _("FARAWAY ISLAND");
const u8 gText_NavelRock[] = _("NAVEL ROCK");
-const u8 gUnknown_085EB2E4[] = _("CLAW FOSSIL");
-const u8 gUnknown_085EB2F0[] = _("ROOT FOSSIL");
-const u8 gUnknown_085EB2FC[] = _("NO");
-const u8 gUnknown_085EB2FF[] = _("I'll battle now!");
-const u8 gUnknown_085EB310[] = _("I won!");
-const u8 gUnknown_085EB317[] = _("I lost!");
-const u8 gUnknown_085EB31F[] = _("I won't tell.");
+const u8 gText_ClawFossil[] = _("CLAW FOSSIL");
+const u8 gText_RootFossil[] = _("ROOT FOSSIL");
+const u8 gText_No4[] = _("NO");
+const u8 gText_IllBattleNow[] = _("I'll battle now!");
+const u8 gText_IWon[] = _("I won!");
+const u8 gText_ILost[] = _("I lost!");
+const u8 gText_IWontTell[] = _("I won't tell.");
const u8 gText_NormalTagMatch[] = _("NORMAL TAG MATCH");
const u8 gText_VarietyTagMatch[] = _("VARIETY TAG MATCH");
const u8 gText_UniqueTagMatch[] = _("UNIQUE TAG MATCH");
const u8 gText_ExpertTagMatch[] = _("EXPERT TAG MATCH");
-const u8 gUnknown_085EB372[] = _("TRADE CENTER");
-const u8 gUnknown_085EB37F[] = _("COLOSSEUM");
-const u8 gUnknown_085EB389[] = _("RECORD CORNER");
-const u8 gUnknown_085EB397[] = _("BERRY CRUSH");
+const u8 gText_TradeCenter[] = _("TRADE CENTER");
+const u8 gText_Colosseum[] = _("COLOSSEUM");
+const u8 gText_RecordCorner[] = _("RECORD CORNER");
+const u8 gText_BerryCrush3[] = _("BERRY CRUSH");
const u8 gUnknown_085EB3A3[] = _("");
-const u8 gUnknown_085EB3A4[] = _("POKéMON JUMP");
-const u8 gUnknown_085EB3B1[] = _("DODRIO BERRY-PICKING");
-const u8 gUnknown_085EB3C6[] = _("BECOME LEADER");
-const u8 gUnknown_085EB3D4[] = _("JOIN GROUP");
-const u8 gUnknown_085EB3DF[] = _("TWO STYLES");
-const u8 gUnknown_085EB3EA[] = _("LV. 50");
-const u8 gUnknown_085EB3F1[] = _("OPEN LEVEL");
-const u8 gUnknown_085EB3FC[] = _("{PKMN} TYPE & NO.");
-const u8 gUnknown_085EB40A[] = _("HOLD ITEMS");
-const u8 gUnknown_085EB415[] = _("SYMBOLS");
-const u8 gUnknown_085EB41D[] = _("RECORD");
-const u8 gUnknown_085EB424[] = _("BATTLE PTS");
-const u8 gUnknown_085EB42F[] = _("TOWER INFO");
-const u8 gUnknown_085EB43A[] = _("BATTLE {PKMN}");
-const u8 gUnknown_085EB444[] = _("BATTLE SALON");
-const u8 gUnknown_085EB451[] = _("MULTI-LINK");
-const u8 gUnknown_085EB45C[] = _("BATTLE RULES");
-const u8 gUnknown_085EB469[] = _("JUDGE: MIND");
-const u8 gUnknown_085EB475[] = _("JUDGE: SKILL");
-const u8 gUnknown_085EB482[] = _("JUDGE: BODY");
-const u8 gUnknown_085EB48E[] = _("MATCHUP");
-const u8 gUnknown_085EB496[] = _("TOURNEY TREE");
-const u8 gUnknown_085EB4A3[] = _("DOUBLE KO");
-const u8 gUnknown_085EB4AD[] = _("BASIC RULES");
-const u8 gUnknown_085EB4B9[] = _("SWAP: PARTNER");
-const u8 gUnknown_085EB4C7[] = _("SWAP: NUMBER");
-const u8 gUnknown_085EB4D4[] = _("SWAP: NOTES");
-const u8 gUnknown_085EB4E0[] = _("OPEN LEVEL");
+const u8 gText_PokemonJump[] = _("POKéMON JUMP");
+const u8 gText_DodrioBerryPicking[] = _("DODRIO BERRY-PICKING");
+const u8 gText_BecomeLeader[] = _("BECOME LEADER");
+const u8 gText_JoinGroup[] = _("JOIN GROUP");
+const u8 gText_TwoStyles[] = _("TWO STYLES");
+const u8 gText_Lv50_3[] = _("LV. 50");
+const u8 gText_OpenLevel2[] = _("OPEN LEVEL");
+const u8 gText_MonTypeAndNo[] = _("{PKMN} TYPE & NO.");
+const u8 gText_HoldItems[] = _("HOLD ITEMS");
+const u8 gText_Symbols2[] = _("SYMBOLS");
+const u8 gText_Record3[] = _("RECORD");
+const u8 gText_BattlePts[] = _("BATTLE PTS");
+const u8 gText_TowerInfo[] = _("TOWER INFO");
+const u8 gText_BattleMon[] = _("BATTLE {PKMN}");
+const u8 gText_BattleSalon[] = _("BATTLE SALON");
+const u8 gText_MultiLink2[] = _("MULTI-LINK");
+const u8 gText_BattleRules[] = _("BATTLE RULES");
+const u8 gText_JudgeMind[] = _("JUDGE: MIND");
+const u8 gText_JudgeSkill[] = _("JUDGE: SKILL");
+const u8 gText_JudgeBody[] = _("JUDGE: BODY");
+const u8 gText_Matchup[] = _("MATCHUP");
+const u8 gText_TourneyTree[] = _("TOURNEY TREE");
+const u8 gText_DoubleKO[] = _("DOUBLE KO");
+const u8 gText_BasicRules[] = _("BASIC RULES");
+const u8 gText_SwapPartners[] = _("SWAP: PARTNER");
+const u8 gText_SwapNumber[] = _("SWAP: NUMBER");
+const u8 gText_SwapNotes[] = _("SWAP: NOTES");
+const u8 gText_OpenLevel3[] = _("OPEN LEVEL");
const u8 gText_BattleBasics[] = _("BATTLE BASICS");
const u8 gText_PokemonNature[] = _("POKéMON NATURE");
const u8 gText_PokemonMoves[] = _("POKéMON MOVES");
const u8 gText_Underpowered[] = _("UNDERPOWERED");
const u8 gText_WhenInDanger[] = _("WHEN IN DANGER");
-const u8 gUnknown_085EB532[] = _("PYRAMID: POKéMON");
-const u8 gUnknown_085EB543[] = _("PYRAMID: TRAINERS");
-const u8 gUnknown_085EB555[] = _("PYRAMID: MAZE");
-const u8 gUnknown_085EB563[] = _("BATTLE BAG");
-const u8 gUnknown_085EB56E[] = _("POKéNAV AND BAG");
-const u8 gUnknown_085EB57E[] = _("HELD ITEMS");
-const u8 gUnknown_085EB589[] = _("POKéMON ORDER");
-const u8 gUnknown_085EB597[] = _("BATTLE POKéMON");
+const u8 gText_PyramidPokemon[] = _("PYRAMID: POKéMON");
+const u8 gText_PyramidTrainers[] = _("PYRAMID: TRAINERS");
+const u8 gText_PyramidMaze[] = _("PYRAMID: MAZE");
+const u8 gText_BattleBag2[] = _("BATTLE BAG");
+const u8 gText_PokenavAndBag[] = _("POKéNAV AND BAG");
+const u8 gText_HeldItems[] = _("HELD ITEMS");
+const u8 gText_PokemonOrder[] = _("POKéMON ORDER");
+const u8 gText_BattlePokemon[] = _("BATTLE POKéMON");
const u8 gText_BattleTrainers[] = _("BATTLE TRAINERS");
-const u8 gUnknown_085EB5B6[] = _("GO ON");
-const u8 gUnknown_085EB5BC[] = _("RECORD");
-const u8 gUnknown_085EB5C3[] = _("REST");
-const u8 gUnknown_085EB5C8[] = _("RETIRE");
+const u8 gText_GoOn[] = _("GO ON");
+const u8 gText_Record2[] = _("RECORD");
+const u8 gText_Rest[] = _("REST");
+const u8 gText_Retire[] = _("RETIRE");
const u8 gText_99TimesPlus[] = _("99 times +");
const u8 gText_1MinutePlus[] = _("1 minute +");
const u8 gText_SpaceSeconds[] = _(" seconds");
@@ -1292,7 +1291,7 @@ const u8 gMatchCall_MayTrainersPokemonText[] = _("I'll use any POKéMON!");
const u8 gMatchCall_MaySelfIntroductionText_Line1[] = _("My POKéMON and I help");
const u8 gMatchCall_MaySelfIntroductionText_Line2[] = _("my father's research.");
const u8 gText_HatchedFromEgg[] = _("{STR_VAR_1} hatched from the EGG!");
-const u8 gText_NickHatchPrompt[] = _("Would you like to nickname the newly\nhatched {STR_VAR_1}?");
+const u8 gText_NicknameHatchPrompt[] = _("Would you like to nickname the newly\nhatched {STR_VAR_1}?");
ALIGNED(4) const u8 gText_ReadyToBerryCrush[] = _("Are you ready to BERRY-CRUSH?\nPlease pick a BERRY for use.\p");
ALIGNED(4) const u8 gText_WaitForAllChooseBerry[] = _("Please wait while each member\nchooses a BERRY.");
ALIGNED(4) const u8 gText_EndedWithXUnitsPowder[] = _("{PAUSE_MUSIC}{PLAY_BGM MUS_FANFA1}You ended up with {STR_VAR_1} units of\nsilky-smooth BERRY POWDER.{RESUME_MUSIC}\pYour total amount of BERRY POWDER\nis {STR_VAR_2}.\p");
@@ -1419,8 +1418,8 @@ const u8 gUnknown_085EE0FA[] = _("つうしん しゅうりょう!");
const u8 gUnknown_085EE107[] = _("あらたな トレーナーが\nホウエンに やってきた!");
const u8 gUnknown_085EE120[] = _("しばらく おまちください");
const u8 gUnknown_085EE12D[] = _("かきこみ エラー です\nデータが ほぞん できませんでした");
-const u8 gUnknown_085EE14B[] = _("RED");
-const u8 gUnknown_085EE14F[] = _("BLUE");
+const u8 gText_Red[] = _("RED");
+const u8 gText_Blue[] = _("BLUE");
const u8 gUnknown_085EE154[] = _("---");
const u8 gText_SingleBattleRoomResults[] = _("{PLAYER}'s Single Battle Room Results");
const u8 gText_DoubleBattleRoomResults[] = _("{PLAYER}'s Double Battle Room Results");
@@ -1591,23 +1590,23 @@ const u8 gText_PkmnsNickname[] = _("{STR_VAR_1}'s nickname?");
const u8 gText_TellHimTheWords[] = _("Tell him the words.");
const u8 gText_MoveOkBack[] = _("{DPAD_NONE}MOVE {A_BUTTON}OK {B_BUTTON}BACK");
const u8 gText_CallCantBeMadeHere[] = _("A call can't be made from here.");
-const u8 gUnknown_085EEB2B[] = _("HANDSOME");
-const u8 gUnknown_085EEB34[] = _("VINNY");
-const u8 gUnknown_085EEB3A[] = _("MOREME");
-const u8 gUnknown_085EEB41[] = _("IRONHARD");
-const u8 gUnknown_085EEB4A[] = _("MUSCLE");
-const u8 gUnknown_085EEB51[] = _("coolness");
-const u8 gUnknown_085EEB5A[] = _("beauty");
-const u8 gUnknown_085EEB61[] = _("cuteness");
-const u8 gUnknown_085EEB6A[] = _("smartness");
-const u8 gUnknown_085EEB74[] = _("toughness");
-const u8 gText_Lady2[] = _("Lady");
-const u8 gUnknown_085EEB83[] = _("slippery");
-const u8 gUnknown_085EEB8C[] = _("roundish");
-const u8 gUnknown_085EEB95[] = _("wham-ish");
-const u8 gUnknown_085EEB9E[] = _("shiny");
-const u8 gUnknown_085EEBA4[] = _("sticky");
-const u8 gUnknown_085EEBAB[] = _("pointy");
+const u8 gText_ContestLady_Handsome[] = _("HANDSOME");
+const u8 gText_ContestLady_Vinny[] = _("VINNY");
+const u8 gText_ContestLady_Moreme[] = _("MOREME");
+const u8 gText_ContestLady_Ironhard[] = _("IRONHARD");
+const u8 gText_ContestLady_Muscle[] = _("MUSCLE");
+const u8 gText_ContestLady_Coolness[] = _("coolness");
+const u8 gText_ContestLady_Beauty[] = _("beauty");
+const u8 gText_ContestLady_Cuteness[] = _("cuteness");
+const u8 gText_ContestLady_Smartness[] = _("smartness");
+const u8 gText_ContestLady_Toughness[] = _("toughness");
+const u8 gText_QuizLady_Lady[] = _("Lady");
+const u8 gText_FavorLady_Slippery[] = _("slippery");
+const u8 gText_FavorLady_Roundish[] = _("roundish");
+const u8 gText_FavorLady_Whamish[] = _("wham-ish");
+const u8 gText_FavorLady_Shiny[] = _("shiny");
+const u8 gText_FavorLady_Sticky[] = _("sticky");
+const u8 gText_FavorLady_Pointy[] = _("pointy");
const u8 gText_RentalPkmn2[] = _("RENTAL POKéMON");
const u8 gText_SelectFirstPkmn[] = _("Select the first POKéMON.");
const u8 gText_SelectSecondPkmn[] = _("Select the second POKéMON.");
diff --git a/src/trade.c b/src/trade.c
index 94accc43c..c29fe54c3 100644
--- a/src/trade.c
+++ b/src/trade.c
@@ -1551,7 +1551,7 @@ static void sub_80773D0(void)
for (i = 0; i < PARTY_SIZE; i++)
{
- CreateMon(&gEnemyParty[i], SPECIES_NONE, 0, 0x20, FALSE, 0, 0, 0);
+ CreateMon(&gEnemyParty[i], SPECIES_NONE, 0, 0x20, FALSE, 0, OT_ID_PLAYER_ID, 0);
}
sub_807A19C(0);
@@ -3032,7 +3032,7 @@ static u8 sub_8079A3C(u8 *str, u8 whichParty, u8 monIdx)
static void sub_8079AA4(u8 *a0, u8 a1, u8 a2)
{
- u16 arr[4];
+ u16 moves[MAX_MON_MOVES];
u16 i;
if (!gUnknown_0203229C->unk_51[a1][a2])
@@ -3041,11 +3041,11 @@ static void sub_8079AA4(u8 *a0, u8 a1, u8 a2)
{
if (!a1)
{
- arr[i] = GetMonData(&gPlayerParty[a2], i + MON_DATA_MOVE1, NULL);
+ moves[i] = GetMonData(&gPlayerParty[a2], i + MON_DATA_MOVE1, NULL);
}
else
{
- arr[i] = GetMonData(&gEnemyParty[a2], i + MON_DATA_MOVE1, NULL);
+ moves[i] = GetMonData(&gEnemyParty[a2], i + MON_DATA_MOVE1, NULL);
}
}
@@ -3053,9 +3053,9 @@ static void sub_8079AA4(u8 *a0, u8 a1, u8 a2)
for (i = 0; i < MAX_MON_MOVES; i++)
{
- if (arr[i] != MOVE_NONE)
+ if (moves[i] != MOVE_NONE)
{
- StringAppend(a0, gMoveNames[arr[i]]);
+ StringAppend(a0, gMoveNames[moves[i]]);
}
StringAppend(a0, gText_NewLine3);
@@ -5832,7 +5832,7 @@ static void _CreateInGameTradePokemon(u8 whichPlayerMon, u8 whichInGameTrade)
u8 isMail;
struct Pokemon *pokemon = &gEnemyParty[0];
- CreateMon(pokemon, inGameTrade->species, level, 32, TRUE, inGameTrade->personality, TRUE, inGameTrade->otId);
+ CreateMon(pokemon, inGameTrade->species, level, 32, TRUE, inGameTrade->personality, OT_ID_PRESET, inGameTrade->otId);
SetMonData(pokemon, MON_DATA_HP_IV, &inGameTrade->ivs[0]);
SetMonData(pokemon, MON_DATA_ATK_IV, &inGameTrade->ivs[1]);
diff --git a/src/trader.c b/src/trader.c
index dcf1fa076..a3794a539 100644
--- a/src/trader.c
+++ b/src/trader.c
@@ -71,7 +71,7 @@ void CreateAvailableDecorationsMenu(u8 taskId)
if (curWidth > windowWidth)
windowWidth = curWidth;
}
- windowTemplate.width = convert_pixel_width_to_tile_width(windowWidth);
+ windowTemplate.width = ConvertPixelWidthToTileWidth(windowWidth);
data[3] = AddWindow(&windowTemplate);
DrawStdFrameWithCustomTileAndPalette(data[3], FALSE, 0x214, 14);
for (i = 0; i < 4; i++)
diff --git a/src/trainer_hill.c b/src/trainer_hill.c
index 77c8fcb53..2a7e003d9 100644
--- a/src/trainer_hill.c
+++ b/src/trainer_hill.c
@@ -38,58 +38,16 @@
#define HILL_TAG_UNIQUE 2
#define HILL_TAG_EXPERT 3
-#define HILL_TRAINER_NAME_LENGTH 11
#define HILL_MAX_TIME 215999 // 60 * 60 * 60 - 1
-struct TrHillRoomTrainers
-{
- u8 name[2][HILL_TRAINER_NAME_LENGTH];
- u8 facilityClass[2];
-};
-
-struct TrainerHillTrainer
-{
- u8 name[HILL_TRAINER_NAME_LENGTH];
- u8 facilityClass;
- u32 unused;
- u16 speechBefore[6];
- u16 speechWin[6];
- u16 speechLose[6];
- u16 speechAfter[6];
- struct BattleTowerPokemon mons[PARTY_SIZE];
-};
-
-struct TrHillFloor
-{
- u8 unk0;
- u8 unk1;
- struct TrainerHillTrainer trainers[2];
- u8 data[0x100];
- u16 unk3A0[16];
- u8 coords[2]; // x first 4 bits, y last 4 bits
- u8 direction; // array of 4 bits for each trainer
- u8 range; // array of 4 bits for each trainer
-};
-
-struct TrHillTag
-{
- u8 unkField_0;
- u8 unused1;
- u8 unkField_2;
- u8 unused3;
- u8 unused4;
- u8 unused5;
- u8 unused6;
- struct TrHillFloor floors[4];
-};
-
+// EWRAM
struct TrHillStruct2
{
u8 floorId;
struct TrHillTag tag;
+ struct TrHillFloor floors[4];
};
-// EWRAM
static EWRAM_DATA struct TrHillStruct2 *sHillData = NULL;
static EWRAM_DATA struct TrHillRoomTrainers *sRoomTrainers = NULL;
EWRAM_DATA u32 *gTrainerHillVBlankCounter = NULL;
@@ -350,7 +308,7 @@ u8 GetTrainerHillTrainerFrontSpriteId(u16 trainerId)
SetUpDataStruct();
id = trainerId - 1;
- facilityClass = sHillData->tag.floors[sHillData->floorId].trainers[id].facilityClass;
+ facilityClass = sHillData->floors[sHillData->floorId].trainers[id].facilityClass;
FreeDataStruct();
return gFacilityClassToPicIndex[facilityClass];
@@ -367,9 +325,9 @@ void InitTrainerHillBattleStruct(void)
{
for (j = 0; j < HILL_TRAINER_NAME_LENGTH; j++)
{
- sRoomTrainers->name[i][j] = sHillData->tag.floors[sHillData->floorId].trainers[i].name[j];
+ sRoomTrainers->name[i][j] = sHillData->floors[sHillData->floorId].trainers[i].name[j];
}
- sRoomTrainers->facilityClass[i] = sHillData->tag.floors[sHillData->floorId].trainers[i].facilityClass;
+ sRoomTrainers->facilityClass[i] = sHillData->floors[sHillData->floorId].trainers[i].facilityClass;
}
SetTrainerHillVBlankCounter(&gSaveBlock1Ptr->trainerHill.timer);
FreeDataStruct();
@@ -387,7 +345,7 @@ static void SetUpDataStruct(void)
{
sHillData = AllocZeroed(sizeof(*sHillData));
sHillData->floorId = gMapHeader.mapLayoutId - LAYOUT_TRAINER_HILL_1F;
- CpuCopy32(sDataPerTag[gSaveBlock1Ptr->trainerHill.tag], &sHillData->tag, sizeof(sHillData->tag));
+ CpuCopy32(sDataPerTag[gSaveBlock1Ptr->trainerHill.tag], &sHillData->tag, sizeof(sHillData->tag) + 4 * sizeof(struct TrHillFloor));
nullsub_2();
}
}
@@ -409,16 +367,16 @@ void CopyTrainerHillTrainerText(u8 which, u16 trainerId)
switch (which)
{
case 2:
- FrontierSpeechToString(sHillData->tag.floors[floorId].trainers[id].speechBefore);
+ FrontierSpeechToString(sHillData->floors[floorId].trainers[id].speechBefore);
break;
case 3:
- FrontierSpeechToString(sHillData->tag.floors[floorId].trainers[id].speechWin);
+ FrontierSpeechToString(sHillData->floors[floorId].trainers[id].speechWin);
break;
case 4:
- FrontierSpeechToString(sHillData->tag.floors[floorId].trainers[id].speechLose);
+ FrontierSpeechToString(sHillData->floors[floorId].trainers[id].speechLose);
break;
case 5:
- FrontierSpeechToString(sHillData->tag.floors[floorId].trainers[id].speechAfter);
+ FrontierSpeechToString(sHillData->floors[floorId].trainers[id].speechAfter);
break;
}
@@ -460,7 +418,7 @@ static void sub_81D5924(void)
{
u16 itemId = sub_81D6640();
- if (sHillData->tag.unkField_2 != 4 || gSaveBlock1Ptr->trainerHill.field_3D6E_0a)
+ if (sHillData->tag.numFloors != 4 || gSaveBlock1Ptr->trainerHill.field_3D6E_0a)
{
gSpecialVar_Result = 2;
}
@@ -556,9 +514,9 @@ static void sub_81D5B2C(void)
static void sub_81D5BBC(void)
{
SetUpDataStruct();
- if (sHillData->tag.unkField_2 != 4)
+ if (sHillData->tag.numFloors != 4)
{
- ConvertIntToDecimalStringN(gStringVar1, sHillData->tag.unkField_2, STR_CONV_MODE_LEFT_ALIGN, 1);
+ ConvertIntToDecimalStringN(gStringVar1, sHillData->tag.numFloors, STR_CONV_MODE_LEFT_ALIGN, 1);
gSpecialVar_Result = 0;
}
else
@@ -673,12 +631,12 @@ void sub_81D5DF8(void)
eventTemplates[i] = gUnknown_0862A670;
eventTemplates[i].localId = i + 1;
- eventTemplates[i].graphicsId = FacilityClassToGraphicsId(sHillData->tag.floors[floorId].trainers[i].facilityClass);
- eventTemplates[i].x = sHillData->tag.floors[floorId].coords[i] & 0xF;
- eventTemplates[i].y = ((sHillData->tag.floors[floorId].coords[i] >> 4) & 0xF) + 5;
+ eventTemplates[i].graphicsId = FacilityClassToGraphicsId(sHillData->floors[floorId].trainers[i].facilityClass);
+ eventTemplates[i].x = sHillData->floors[floorId].display.coords[i] & 0xF;
+ eventTemplates[i].y = ((sHillData->floors[floorId].display.coords[i] >> 4) & 0xF) + 5;
bits = i << 2;
- eventTemplates[i].movementType = ((sHillData->tag.floors[floorId].direction >> bits) & 0xF) + MOVEMENT_TYPE_FACE_UP;
- eventTemplates[i].trainerRange_berryTreeId = (sHillData->tag.floors[floorId].range >> bits) & 0xF;
+ eventTemplates[i].movementType = ((sHillData->floors[floorId].display.direction >> bits) & 0xF) + MOVEMENT_TYPE_FACE_UP;
+ eventTemplates[i].trainerRange_berryTreeId = (sHillData->floors[floorId].display.range >> bits) & 0xF;
eventTemplates[i].script = EventScript_2C83F0;
gSaveBlock2Ptr->frontier.trainerIds[i] = i + 1;
}
@@ -699,8 +657,8 @@ static u32 sub_81D5F58(u8 floorId, u32 bit, u32 arg2, u32 arg3)
{
u32 var0, var1, var2, var3;
- var0 = (sHillData->tag.floors[floorId].unk3A0[arg2] >> (15 - bit)) & 1;
- var1 = sHillData->tag.floors[floorId].data[arg2 * arg3 + bit];
+ var0 = (sHillData->floors[floorId].unk3A0[arg2] >> (15 - bit)) & 1;
+ var1 = sHillData->floors[floorId].data[arg2 * arg3 + bit];
var3 = 0x200;
var2 = 0x3000;
@@ -943,7 +901,7 @@ static void sub_81D62CC(u16 trainerId, u8 firstMonId)
u8 id = gUnknown_0862A698[trId][arrId];
struct Pokemon *mon = &gEnemyParty[i];
- CreateBattleTowerMon(mon, &sHillData->tag.floors[floorId].trainers[trId].mons[id]);
+ CreateBattleTowerMon(mon, &sHillData->floors[floorId].trainers[trId].mons[id]);
sub_81D642C(mon, level);
}
@@ -978,7 +936,7 @@ u8 GetTrainerEncounterMusicIdInTrainerHill(u16 trainerId)
SetUpDataStruct();
trId = trainerId - 1;
- facilityClass = sHillData->tag.floors[sHillData->floorId].trainers[trId].facilityClass;
+ facilityClass = sHillData->floors[sHillData->floorId].trainers[trId].facilityClass;
FreeDataStruct();
for (i = 0; i < ARRAY_COUNT(gUnknown_0862A3B4); i++)
@@ -1005,7 +963,7 @@ u8 sub_81D6490(void)
u8 ret;
SetUpDataStruct();
- ret = sHillData->tag.unkField_2;
+ ret = sHillData->tag.numFloors;
FreeDataStruct();
return ret;
@@ -1070,8 +1028,8 @@ static u8 sub_81D65E8(u8 arg0)
var = 0;
for (i = 0; i < 4; i++)
{
- var ^= sHillData->tag.floors[i].unk0 & 0x1F;
- var ^= sHillData->tag.floors[i].unk1 & 0x1F;
+ var ^= sHillData->floors[i].unk0 & 0x1F;
+ var ^= sHillData->floors[i].unk1 & 0x1F;
}
if (arg0)
@@ -1091,8 +1049,8 @@ static u16 sub_81D6640(void)
for (i = 0; i < 4; i++)
{
- var += sHillData->tag.floors[i].unk0;
- var += sHillData->tag.floors[i].unk1;
+ var += sHillData->floors[i].unk0;
+ var += sHillData->floors[i].unk1;
}
var2 = var / 256;
diff --git a/src/tv.c b/src/tv.c
index b4c8463fd..62d261a63 100644
--- a/src/tv.c
+++ b/src/tv.c
@@ -38,8 +38,10 @@
#include "secret_base.h"
#include "tv.h"
#include "data.h"
+#include "constants/contest.h"
#include "constants/layouts.h"
#include "constants/metatile_behaviors.h"
+#include "constants/script_menu.h"
// Static type declarations
@@ -182,7 +184,7 @@ static void DoTVShowPokemonContestLiveUpdates2(void);
static const struct {
u16 species;
- u16 moves[4];
+ u16 moves[MAX_MON_MOVES];
u8 level;
u8 location;
} sPokeOutbreakSpeciesList[] = {
@@ -1657,12 +1659,12 @@ void PutLilycoveContestLadyShowOnTheAir(void)
if (gSpecialVar_Result != TRUE)
{
show = &gSaveBlock1Ptr->tvShows[sCurTVShowSlot];
- sub_818E848(&show->contestLiveUpdates2.language);
+ BufferContestLadyLanguage(&show->contestLiveUpdates2.language);
show->contestLiveUpdates2.pokemonNameLanguage = LANGUAGE_ENGLISH;
show->contestLiveUpdates2.kind = TVSHOW_CONTEST_LIVE_UPDATES_2;
show->contestLiveUpdates2.active = TRUE;
- sub_818E81C(show->contestLiveUpdates2.playerName);
- sub_818E7E0(&show->contestLiveUpdates2.contestCategory, show->contestLiveUpdates2.nickname);
+ BufferContestLadyPlayerName(show->contestLiveUpdates2.playerName);
+ BufferContestLadyMonName(&show->contestLiveUpdates2.contestCategory, show->contestLiveUpdates2.nickname);
show->contestLiveUpdates2.pokeblockState = sub_818E880();
tv_store_id_2x(show);
}
@@ -2329,7 +2331,7 @@ void sub_80EE35C(u16 foeSpecies, u16 species, u8 moveIdx, const u16 *movePtr, u1
show->battleSeminar.foeSpecies = foeSpecies;
show->battleSeminar.species = species;
show->battleSeminar.move = movePtr[moveIdx];
- for (i = 0, j = 0; i < 4; i ++)
+ for (i = 0, j = 0; i < MAX_MON_MOVES; i ++)
{
if (i != moveIdx && movePtr[i])
{
@@ -2786,11 +2788,11 @@ bool8 GetPriceReduction(u8 newsKind)
{
u8 i;
- if (newsKind == 0)
+ if (newsKind == POKENEWS_NONE)
{
return FALSE;
}
- for (i = 0; i < 16; i ++)
+ for (i = 0; i < POKE_NEWS_COUNT; i ++)
{
if (gSaveBlock1Ptr->pokeNews[i].kind == newsKind)
{
@@ -2870,17 +2872,17 @@ void CopyContestRankToStringVar(u8 varIdx, u8 rank)
{
switch (rank)
{
- case 0: // NORMAL
- StringCopy(gTVStringVarPtrs[varIdx], gUnknown_0858BAF0[5]);
+ case CONTEST_RANK_NORMAL:
+ StringCopy(gTVStringVarPtrs[varIdx], gStdStrings[STDSTRING_NORMAL]);
break;
- case 1: // SUPER
- StringCopy(gTVStringVarPtrs[varIdx], gUnknown_0858BAF0[6]);
+ case CONTEST_RANK_SUPER:
+ StringCopy(gTVStringVarPtrs[varIdx], gStdStrings[STDSTRING_SUPER]);
break;
- case 2: // HYPER
- StringCopy(gTVStringVarPtrs[varIdx], gUnknown_0858BAF0[7]);
+ case CONTEST_RANK_HYPER:
+ StringCopy(gTVStringVarPtrs[varIdx], gStdStrings[STDSTRING_HYPER]);
break;
- case 3: // MASTER
- StringCopy(gTVStringVarPtrs[varIdx], gUnknown_0858BAF0[8]);
+ case CONTEST_RANK_MASTER:
+ StringCopy(gTVStringVarPtrs[varIdx], gStdStrings[STDSTRING_MASTER]);
break;
}
}
@@ -2889,20 +2891,20 @@ void CopyContestCategoryToStringVar(u8 varIdx, u8 category)
{
switch (category)
{
- case 0: // COOL
- StringCopy(gTVStringVarPtrs[varIdx], gUnknown_0858BAF0[0]);
+ case CONTEST_CATEGORY_COOL:
+ StringCopy(gTVStringVarPtrs[varIdx], gStdStrings[STDSTRING_COOL]);
break;
- case 1: // BEAUTY
- StringCopy(gTVStringVarPtrs[varIdx], gUnknown_0858BAF0[1]);
+ case CONTEST_CATEGORY_BEAUTY:
+ StringCopy(gTVStringVarPtrs[varIdx], gStdStrings[STDSTRING_BEAUTY]);
break;
- case 2: // CUTE
- StringCopy(gTVStringVarPtrs[varIdx], gUnknown_0858BAF0[2]);
+ case CONTEST_CATEGORY_CUTE:
+ StringCopy(gTVStringVarPtrs[varIdx], gStdStrings[STDSTRING_CUTE]);
break;
- case 3: // SMART
- StringCopy(gTVStringVarPtrs[varIdx], gUnknown_0858BAF0[3]);
+ case CONTEST_CATEGORY_SMART:
+ StringCopy(gTVStringVarPtrs[varIdx], gStdStrings[STDSTRING_SMART]);
break;
- case 4: // TOUGH
- StringCopy(gTVStringVarPtrs[varIdx], gUnknown_0858BAF0[4]);
+ case CONTEST_CATEGORY_TOUGH:
+ StringCopy(gTVStringVarPtrs[varIdx], gStdStrings[STDSTRING_TOUGH]);
break;
}
}
@@ -5600,7 +5602,7 @@ static void DoTVShowPokemonContestLiveUpdates(void)
switch (state)
{
case 0:
- sub_818E868(gStringVar1, show->contestLiveUpdates.category);
+ BufferContestName(gStringVar1, show->contestLiveUpdates.category);
StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.species]);
TVShowConvertInternationalString(gStringVar3, show->contestLiveUpdates.playerName, show->contestLiveUpdates.language);
if (show->contestLiveUpdates.round1Rank == show->contestLiveUpdates.round2Rank)
@@ -7720,7 +7722,7 @@ static void DoTVShowPokemonContestLiveUpdates2(void)
switch (state)
{
case 0:
- sub_818E868(gStringVar1, show->contestLiveUpdates2.contestCategory);
+ BufferContestName(gStringVar1, show->contestLiveUpdates2.contestCategory);
if (show->contestLiveUpdates2.pokeblockState == 1)
{
sTVShowState = 1;
diff --git a/src/wild_encounter.c b/src/wild_encounter.c
index 84275526e..332bbfb99 100644
--- a/src/wild_encounter.c
+++ b/src/wild_encounter.c
@@ -143,47 +143,47 @@ static void FeebasSeedRng(u16 seed)
static u8 ChooseWildMonIndex_Land(void)
{
- u8 rand = Random() % 100;
+ u8 rand = Random() % ENCOUNTER_CHANCE_LAND_MONS_TOTAL;
- if (rand < 20) // 20% chance
+ if (rand < ENCOUNTER_CHANCE_LAND_MONS_SLOT_0)
return 0;
- else if (rand >= 20 && rand < 40) // 20% chance
+ else if (rand >= ENCOUNTER_CHANCE_LAND_MONS_SLOT_0 && rand < ENCOUNTER_CHANCE_LAND_MONS_SLOT_1)
return 1;
- else if (rand >= 40 && rand < 50) // 10% chance
+ else if (rand >= ENCOUNTER_CHANCE_LAND_MONS_SLOT_1 && rand < ENCOUNTER_CHANCE_LAND_MONS_SLOT_2)
return 2;
- else if (rand >= 50 && rand < 60) // 10% chance
+ else if (rand >= ENCOUNTER_CHANCE_LAND_MONS_SLOT_2 && rand < ENCOUNTER_CHANCE_LAND_MONS_SLOT_3)
return 3;
- else if (rand >= 60 && rand < 70) // 10% chance
+ else if (rand >= ENCOUNTER_CHANCE_LAND_MONS_SLOT_3 && rand < ENCOUNTER_CHANCE_LAND_MONS_SLOT_4)
return 4;
- else if (rand >= 70 && rand < 80) // 10% chance
+ else if (rand >= ENCOUNTER_CHANCE_LAND_MONS_SLOT_4 && rand < ENCOUNTER_CHANCE_LAND_MONS_SLOT_5)
return 5;
- else if (rand >= 80 && rand < 85) // 5% chance
+ else if (rand >= ENCOUNTER_CHANCE_LAND_MONS_SLOT_5 && rand < ENCOUNTER_CHANCE_LAND_MONS_SLOT_6)
return 6;
- else if (rand >= 85 && rand < 90) // 5% chance
+ else if (rand >= ENCOUNTER_CHANCE_LAND_MONS_SLOT_6 && rand < ENCOUNTER_CHANCE_LAND_MONS_SLOT_7)
return 7;
- else if (rand >= 90 && rand < 94) // 4% chance
+ else if (rand >= ENCOUNTER_CHANCE_LAND_MONS_SLOT_7 && rand < ENCOUNTER_CHANCE_LAND_MONS_SLOT_8)
return 8;
- else if (rand >= 94 && rand < 98) // 4% chance
+ else if (rand >= ENCOUNTER_CHANCE_LAND_MONS_SLOT_8 && rand < ENCOUNTER_CHANCE_LAND_MONS_SLOT_9)
return 9;
- else if (rand == 98) // 1% chance
+ else if (rand == ENCOUNTER_CHANCE_LAND_MONS_SLOT_9)
return 10;
- else // 1% chance
+ else
return 11;
}
static u8 ChooseWildMonIndex_WaterRock(void)
{
- u8 rand = Random() % 100;
+ u8 rand = Random() % ENCOUNTER_CHANCE_WATER_MONS_TOTAL;
- if (rand < 60) // 60% chance
+ if (rand < ENCOUNTER_CHANCE_WATER_MONS_SLOT_0)
return 0;
- else if (rand >= 60 && rand < 90) // 30% chance
+ else if (rand >= ENCOUNTER_CHANCE_WATER_MONS_SLOT_0 && rand < ENCOUNTER_CHANCE_WATER_MONS_SLOT_1)
return 1;
- else if (rand >= 90 && rand < 95) // 5% chance
+ else if (rand >= ENCOUNTER_CHANCE_WATER_MONS_SLOT_1 && rand < ENCOUNTER_CHANCE_WATER_MONS_SLOT_2)
return 2;
- else if (rand >= 95 && rand < 99) // 4% chance
+ else if (rand >= ENCOUNTER_CHANCE_WATER_MONS_SLOT_2 && rand < ENCOUNTER_CHANCE_WATER_MONS_SLOT_3)
return 3;
- else // 1% chance
+ else
return 4;
}
@@ -197,34 +197,34 @@ enum
static u8 ChooseWildMonIndex_Fishing(u8 rod)
{
u8 wildMonIndex = 0;
- u8 rand = Random() % 100;
+ u8 rand = Random() % ENCOUNTER_CHANCE_FISHING_MONS_TOTAL;
switch (rod)
{
case OLD_ROD:
- if (rand < 70) // 70% chance
+ if (rand < ENCOUNTER_CHANCE_FISHING_MONS_SLOT_0)
wildMonIndex = 0;
- else // 30% chance
+ else
wildMonIndex = 1;
break;
case GOOD_ROD:
- if (rand < 60) // 60% chance
+ if (rand < ENCOUNTER_CHANCE_FISHING_MONS_SLOT_2)
wildMonIndex = 2;
- if (rand >= 60 && rand < 80) // 20% chance
+ if (rand >= ENCOUNTER_CHANCE_FISHING_MONS_SLOT_2 && rand < ENCOUNTER_CHANCE_FISHING_MONS_SLOT_3)
wildMonIndex = 3;
- if (rand >= 80 && rand < 100) // 20% chance
+ if (rand >= ENCOUNTER_CHANCE_FISHING_MONS_SLOT_3 && rand < ENCOUNTER_CHANCE_FISHING_MONS_SLOT_4)
wildMonIndex = 4;
break;
case SUPER_ROD:
- if (rand < 40) // 40% chance
+ if (rand < ENCOUNTER_CHANCE_FISHING_MONS_SLOT_5)
wildMonIndex = 5;
- if (rand >= 40 && rand < 80) // 40% chance
+ if (rand >= ENCOUNTER_CHANCE_FISHING_MONS_SLOT_5 && rand < ENCOUNTER_CHANCE_FISHING_MONS_SLOT_6)
wildMonIndex = 6;
- if (rand >= 80 && rand < 95) // 15% chance
+ if (rand >= ENCOUNTER_CHANCE_FISHING_MONS_SLOT_6 && rand < ENCOUNTER_CHANCE_FISHING_MONS_SLOT_7)
wildMonIndex = 7;
- if (rand >= 95 && rand < 99) // 4% chance
+ if (rand >= ENCOUNTER_CHANCE_FISHING_MONS_SLOT_7 && rand < ENCOUNTER_CHANCE_FISHING_MONS_SLOT_8)
wildMonIndex = 8;
- if (rand == 99) // 1% chance
+ if (rand == ENCOUNTER_CHANCE_FISHING_MONS_SLOT_8)
wildMonIndex = 9;
break;
}
diff --git a/sym_bss.txt b/sym_bss.txt
index 4c974c3f6..29b30f2db 100644
--- a/sym_bss.txt
+++ b/sym_bss.txt
@@ -51,7 +51,7 @@
.include "src/pokenav_unk_10.o"
.include "src/ereader_helpers.o"
.include "src/faraway_island.o"
- .include "asm/m4a_1.o"
+ .include "src/m4a_1.o"
.include "src/agb_flash.o"
.include "src/siirtc.o"
.include "*libgcc.a:dp-bit.o"
diff --git a/tools/gbafix/gbafix.c b/tools/gbafix/gbafix.c
index 9088cdc5f..598e43aa0 100644
--- a/tools/gbafix/gbafix.c
+++ b/tools/gbafix/gbafix.c
@@ -206,7 +206,7 @@ int main(int argc, char *argv[])
// parse command line
for (arg=1; arg<argc; arg++)
{
- if ((ARGV[0] == '-'))
+ if (ARGV[0] == '-')
{
switch (ARGV[1])
{
diff --git a/tools/gbagfx/Makefile b/tools/gbagfx/Makefile
index d9c219587..f0638414d 100644
--- a/tools/gbagfx/Makefile
+++ b/tools/gbagfx/Makefile
@@ -1,16 +1,19 @@
-CC ?= gcc
+CC = gcc
-CFLAGS = -Wall -Wextra -Werror -std=c11 -O2 -DPNG_SKIP_SETJMP_CHECK
+CFLAGS = -Wall -Wextra -Werror -Wno-sign-compare -std=c11 -O2 -DPNG_SKIP_SETJMP_CHECK
LIBS = -lpng -lz
-SRCS = main.c convert_png.c gfx.c jasc_pal.c lz.c rl.c util.c font.c
+SRCS = main.c convert_png.c gfx.c jasc_pal.c lz.c rl.c util.c font.c huff.c
.PHONY: all clean
all: gbagfx
@:
+gbagfx-debug: $(SRCS) convert_png.h gfx.h global.h jasc_pal.h lz.h rl.h util.h font.h
+ $(CC) $(CFLAGS) -DDEBUG $(SRCS) -o $@ $(LDFLAGS) $(LIBS)
+
gbagfx: $(SRCS) convert_png.h gfx.h global.h jasc_pal.h lz.h rl.h util.h font.h
$(CC) $(CFLAGS) $(SRCS) -o $@ $(LDFLAGS) $(LIBS)
diff --git a/tools/gbagfx/huff.c b/tools/gbagfx/huff.c
new file mode 100644
index 000000000..143ed79be
--- /dev/null
+++ b/tools/gbagfx/huff.c
@@ -0,0 +1,398 @@
+#include <stdbool.h>
+#include <string.h>
+#include <assert.h>
+#include <stdio.h>
+#include <stdint.h>
+#include "global.h"
+#include "huff.h"
+
+static int cmp_tree(const void * a0, const void * b0) {
+ return ((struct HuffData *)a0)->value - ((struct HuffData *)b0)->value;
+}
+
+typedef int (*cmpfun)(const void *, const void *);
+
+int msort_r(void * data, size_t count, size_t size, cmpfun cmp, void * buffer) {
+ /*
+ * Out-of-place mergesort (stable sort)
+ * Returns 1 on success, 0 on failure
+ */
+ void * leftPtr;
+ void * rightPtr;
+ void * leftEnd;
+ void * rightEnd;
+ int i;
+
+ switch (count) {
+ case 0:
+ // Should never be here
+ return 0;
+
+ case 1:
+ // Nothing to do here
+ break;
+
+ case 2:
+ // Swap the two entries if the right one compares higher.
+ if (cmp(data, data + size) > 0) {
+ memcpy(buffer, data, size);
+ memcpy(data, data + size, size);
+ memcpy(data + size, buffer, size);
+ }
+ break;
+ default:
+ // Merge sort out-of-place.
+ leftPtr = data;
+ leftEnd = rightPtr = data + count / 2 * size;
+ rightEnd = data + count * size;
+
+ // Sort the left half
+ if (!msort_r(leftPtr, count / 2, size, cmp, buffer))
+ return 0;
+
+ // Sort the right half
+ if (!msort_r(rightPtr, count / 2 + (count & 1), size, cmp, buffer))
+ return 0;
+
+ // Merge the sorted halves out of place
+ i = 0;
+ do {
+ if (cmp(leftPtr, rightPtr) <= 0) {
+ memcpy(buffer + i * size, leftPtr, size);
+ leftPtr += size;
+ } else {
+ memcpy(buffer + i * size, rightPtr, size);
+ rightPtr += size;
+ }
+
+ } while (++i < count && leftPtr < leftEnd && rightPtr < rightEnd);
+
+ // Copy the remainder
+ if (i < count) {
+ if (leftPtr < leftEnd) {
+ memcpy(buffer + i * size, leftPtr, leftEnd - leftPtr);
+ }
+ else {
+ memcpy(buffer + i * size, rightPtr, rightEnd - rightPtr);
+ }
+ }
+
+ // Copy the merged data back
+ memcpy(data, buffer, count * size);
+ break;
+ }
+
+ return 1;
+}
+
+int msort(void * data, size_t count, size_t size, cmpfun cmp) {
+ void * buffer = malloc(count * size);
+ if (buffer == NULL) return 0;
+ int result = msort_r(data, count, size, cmp, buffer);
+ free(buffer);
+ return result;
+}
+
+static void write_tree(unsigned char * dest, HuffNode_t * tree, int nitems, struct BitEncoding * encoding) {
+ /*
+ * The example used to guide this function encodes the tree in a
+ * breadth-first manner. We attempt to emulate that here.
+ */
+
+ int i, j, k;
+
+ // There are (2 * nitems - 1) nodes in the binary tree. Allocate that.
+ HuffNode_t * traversal = calloc(2 * nitems - 1, sizeof(HuffNode_t));
+ if (traversal == NULL)
+ FATAL_ERROR("Fatal error while compressing Huff file.\n");
+
+ // The first node is the root of the tree.
+ traversal[0] = *tree;
+ i = 1;
+
+ // Copy the tree into a breadth-first ordering using brute force.
+ for (int depth = 1; i < 2 * nitems - 1; depth++) {
+ // Consider every possible path up to the current depth.
+ for (j = 0; i < 2 * nitems - 1 && j < 1 << depth; j++) {
+ // The index of the path is used to encode the path itself.
+ // Start from the most significant relevant bit and work our way down.
+ // Keep track of the current and previous nodes.
+ HuffNode_t * currNode = traversal;
+ HuffNode_t * parent = NULL;
+ for (k = 0; k < depth; k++) {
+ if (currNode->header.isLeaf)
+ break;
+ parent = currNode;
+ if ((j >> (depth - k - 1)) & 1)
+ currNode = currNode->branch.right;
+ else
+ currNode = currNode->branch.left;
+ }
+ // Check that the length of the current path equals the current depth.
+ if (k == depth) {
+ // Make sure we can encode the current branch.
+ // Bail here if we cannot.
+ // This is only applicable for 8-bit encodings.
+ if (traversal + i - parent > 128)
+ FATAL_ERROR("Fatal error while compressing Huff file: unable to encode binary tree.\n");
+ // Copy the current node, and update its parent.
+ traversal[i] = *currNode;
+ if (parent != NULL) {
+ if ((j & 1) == 1)
+ parent->branch.right = traversal + i;
+ else
+ parent->branch.left = traversal + i;
+ }
+ // Encode the path through the tree in the lookup table
+ if (traversal[i].header.isLeaf) {
+ encoding[traversal[i].leaf.key].nbits = depth;
+ encoding[traversal[i].leaf.key].bitstring = j;
+ }
+ i++;
+ }
+ }
+ }
+
+ // Encode the size of the tree.
+ // This is used by the decompressor to skip the tree.
+ dest[4] = nitems - 1;
+
+ // Encode each node in the tree.
+ for (i = 0; i < 2 * nitems - 1; i++) {
+ HuffNode_t * currNode = traversal + i;
+ if (currNode->header.isLeaf) {
+ dest[5 + i] = traversal[i].leaf.key;
+ } else {
+ dest[5 + i] = (((currNode->branch.right - traversal - i) / 2) - 1);
+ if (currNode->branch.left->header.isLeaf)
+ dest[5 + i] |= 0x80;
+ if (currNode->branch.right->header.isLeaf)
+ dest[5 + i] |= 0x40;
+ }
+ }
+
+ free(traversal);
+}
+
+static inline void write_32_le(unsigned char * dest, int * destPos, uint32_t * buff, int * buffPos) {
+ dest[*destPos] = *buff;
+ dest[*destPos + 1] = *buff >> 8;
+ dest[*destPos + 2] = *buff >> 16;
+ dest[*destPos + 3] = *buff >> 24;
+ *destPos += 4;
+ *buff = 0;
+ *buffPos = 0;
+}
+
+static inline void read_32_le(unsigned char * src, int * srcPos, uint32_t * buff) {
+ uint32_t tmp = src[*srcPos];
+ tmp |= src[*srcPos + 1] << 8;
+ tmp |= src[*srcPos + 2] << 16;
+ tmp |= src[*srcPos + 3] << 24;
+ *srcPos += 4;
+ *buff = tmp;
+}
+
+static void write_bits(unsigned char * dest, int * destPos, struct BitEncoding * encoding, int value, uint32_t * buff, int * buffBits) {
+ int nbits = encoding[value].nbits;
+ uint32_t bitstring = encoding[value].bitstring;
+
+ if (*buffBits + nbits >= 32) {
+ int diff = *buffBits + nbits - 32;
+ *buff <<= nbits - diff;
+ *buff |= bitstring >> diff;
+ bitstring &= ~(1 << diff);
+ nbits = diff;
+ write_32_le(dest, destPos, buff, buffBits);
+ }
+ if (nbits != 0) {
+ *buff <<= nbits;
+ *buff |= bitstring;
+ *buffBits += nbits;
+ }
+}
+
+/*
+=======================================
+MAIN COMPRESSION/DECOMPRESSION ROUTINES
+=======================================
+ */
+
+unsigned char * HuffCompress(unsigned char * src, int srcSize, int * compressedSize_p, int bitDepth) {
+ if (srcSize <= 0)
+ goto fail;
+
+ int worstCaseDestSize = 4 + (2 << bitDepth) + srcSize * 3;
+
+ unsigned char *dest = malloc(worstCaseDestSize);
+ if (dest == NULL)
+ goto fail;
+
+ int nitems = 1 << bitDepth;
+
+ HuffNode_t * freqs = calloc(nitems, sizeof(HuffNode_t));
+ if (freqs == NULL)
+ goto fail;
+
+ struct BitEncoding * encoding = calloc(nitems, sizeof(struct BitEncoding));
+ if (encoding == NULL)
+ goto fail;
+
+ // Set up the frequencies table. This will inform the tree.
+ for (int i = 0; i < nitems; i++) {
+ freqs[i].header.isLeaf = 1;
+ freqs[i].header.value = 0;
+ freqs[i].leaf.key = i;
+ }
+
+ // Count each nybble or byte.
+ for (int i = 0; i < srcSize; i++) {
+ if (bitDepth == 8) {
+ freqs[src[i]].header.value++;
+ } else {
+ freqs[src[i] >> 4].header.value++;
+ freqs[src[i] & 0xF].header.value++;
+ }
+ }
+
+#ifdef DEBUG
+ for (int i = 0; i < nitems; i++) {
+ fprintf(stderr, "%d: %d\n", i, freqs[i].header.value);
+ }
+#endif // DEBUG
+
+ // Sort the frequency table.
+ if (!msort(freqs, nitems, sizeof(HuffNode_t), cmp_tree))
+ goto fail;
+
+ // Prune zero-frequency values.
+ for (int i = 0; i < nitems; i++) {
+ if (freqs[i].header.value != 0) {
+ if (i > 0) {
+ for (int j = i; j < nitems; j++) {
+ freqs[j - i] = freqs[j];
+ }
+ nitems -= i;
+ }
+ break;
+ }
+ // This should never happen:
+ if (i == nitems - 1)
+ goto fail;
+ }
+
+ HuffNode_t * tree = calloc(nitems * 2 - 1, sizeof(HuffNode_t));
+ if (tree == NULL)
+ goto fail;
+
+ // Iteratively collapse the two least frequent nodes.
+ HuffNode_t * endptr = freqs + nitems - 2;
+
+ for (int i = 0; i < nitems - 1; i++) {
+ HuffNode_t * left = freqs;
+ HuffNode_t * right = freqs + 1;
+ tree[i * 2] = *right;
+ tree[i * 2 + 1] = *left;
+ for (int j = 0; j < nitems - i - 2; j++)
+ freqs[j] = freqs[j + 2];
+ endptr->header.isLeaf = 0;
+ endptr->header.value = tree[i * 2].header.value + tree[i * 2 + 1].header.value;
+ endptr->branch.left = tree + i * 2;
+ endptr->branch.right = tree + i * 2 + 1;
+ endptr--;
+ if (i < nitems - 2 && !msort(freqs, nitems - i - 1, sizeof(HuffNode_t), cmp_tree))
+ goto fail;
+ }
+
+ // Write the tree breadth-first, and create the path lookup table.
+ write_tree(dest, freqs, nitems, encoding);
+
+ free(tree);
+ free(freqs);
+
+ // Encode the data itself.
+ int destPos = 4 + nitems * 2;
+ uint32_t destBuf = 0;
+ uint32_t srcBuf = 0;
+ int destBitPos = 0;
+
+ for (int srcPos = 0; srcPos < srcSize;) {
+ read_32_le(src, &srcPos, &srcBuf);
+ for (int i = 0; i < 32 / bitDepth; i++) {
+ write_bits(dest, &destPos, encoding, srcBuf & (0xFF >> (8 - bitDepth)), &destBuf, &destBitPos);
+ srcBuf >>= bitDepth;
+ }
+ }
+
+ if (destBitPos != 0) {
+ write_32_le(dest, &destPos, &destBuf, &destBitPos);
+ }
+
+ free(encoding);
+
+ // Write the header.
+ dest[0] = bitDepth | 0x20;
+ dest[1] = srcSize;
+ dest[2] = srcSize >> 8;
+ dest[3] = srcSize >> 16;
+ *compressedSize_p = (destPos + 3) & ~3;
+ return dest;
+
+fail:
+ FATAL_ERROR("Fatal error while compressing Huff file.\n");
+}
+
+unsigned char * HuffDecompress(unsigned char * src, int srcSize, int * uncompressedSize_p) {
+ if (srcSize < 4)
+ goto fail;
+
+ int bitDepth = *src & 15;
+ if (bitDepth != 4 && bitDepth != 8)
+ goto fail;
+
+ int destSize = (src[3] << 16) | (src[2] << 8) | src[1];
+
+ unsigned char *dest = malloc(destSize);
+
+ if (dest == NULL)
+ goto fail;
+
+ int treePos = 5;
+ int treeSize = (src[4] + 1) * 2;
+ int srcPos = 4 + treeSize;
+ int destPos = 0;
+ int curValPos = 0;
+ uint32_t destTmp = 0;
+ uint32_t window;
+
+ for (;;)
+ {
+ if (srcPos >= srcSize)
+ goto fail;
+ read_32_le(src, &srcPos, &window);
+ for (int i = 0; i < 32; i++) {
+ int curBit = (window >> 31) & 1;
+ unsigned char treeView = src[treePos];
+ bool isLeaf = ((treeView << curBit) & 0x80) != 0;
+ treePos &= ~1; // align
+ treePos += ((treeView & 0x3F) + 1) * 2 + curBit;
+ if (isLeaf) {
+ destTmp >>= bitDepth;
+ destTmp |= (src[treePos] << (32 - bitDepth));
+ curValPos++;
+ if (curValPos == 32 / bitDepth) {
+ write_32_le(dest, &destPos, &destTmp, &curValPos);
+ if (destPos == destSize) {
+ *uncompressedSize_p = destSize;
+ return dest;
+ }
+ }
+ treePos = 5;
+ }
+ window <<= 1;
+ }
+ }
+
+fail:
+ FATAL_ERROR("Fatal error while decompressing Huff file.\n");
+}
diff --git a/tools/gbagfx/huff.h b/tools/gbagfx/huff.h
new file mode 100644
index 000000000..6002fe954
--- /dev/null
+++ b/tools/gbagfx/huff.h
@@ -0,0 +1,38 @@
+#ifndef HUFF_H
+#define HUFF_H
+
+union HuffNode;
+
+struct HuffData {
+ unsigned value:31;
+ unsigned isLeaf:1;
+};
+
+struct HuffLeaf {
+ struct HuffData header;
+ unsigned char key;
+};
+
+struct HuffBranch {
+ struct HuffData header;
+ union HuffNode * left;
+ union HuffNode * right;
+};
+
+union HuffNode {
+ struct HuffData header;
+ struct HuffLeaf leaf;
+ struct HuffBranch branch;
+};
+
+typedef union HuffNode HuffNode_t;
+
+struct BitEncoding {
+ unsigned long long nbits:6;
+ unsigned long long bitstring:58;
+};
+
+unsigned char * HuffCompress(unsigned char * buffer, int srcSize, int * compressedSize_p, int bitDepth);
+unsigned char * HuffDecompress(unsigned char * buffer, int srcSize, int * uncompressedSize_p);
+
+#endif //HUFF_H
diff --git a/tools/gbagfx/lz.c b/tools/gbagfx/lz.c
index c2ba3e327..97434ce50 100644
--- a/tools/gbagfx/lz.c
+++ b/tools/gbagfx/lz.c
@@ -69,10 +69,8 @@ fail:
FATAL_ERROR("Fatal error while decompressing LZ file.\n");
}
-unsigned char *LZCompress(unsigned char *src, int srcSize, int *compressedSize)
+unsigned char *LZCompress(unsigned char *src, int srcSize, int *compressedSize, const int minDistance)
{
- const int minDistance = 2; // for compatibility with LZ77UnCompVram()
-
if (srcSize <= 0)
goto fail;
diff --git a/tools/gbagfx/lz.h b/tools/gbagfx/lz.h
index 164d62279..90f56b643 100644
--- a/tools/gbagfx/lz.h
+++ b/tools/gbagfx/lz.h
@@ -4,6 +4,6 @@
#define LZ_H
unsigned char *LZDecompress(unsigned char *src, int srcSize, int *uncompressedSize);
-unsigned char *LZCompress(unsigned char *src, int srcSize, int *compressedSize);
+unsigned char *LZCompress(unsigned char *src, int srcSize, int *compressedSize, const int minDistance);
#endif // LZ_H
diff --git a/tools/gbagfx/main.c b/tools/gbagfx/main.c
index 86b0afa53..aa0681fb6 100644
--- a/tools/gbagfx/main.c
+++ b/tools/gbagfx/main.c
@@ -12,6 +12,7 @@
#include "lz.h"
#include "rl.h"
#include "font.h"
+#include "huff.h"
struct CommandHandler
{
@@ -319,6 +320,7 @@ void HandlePngToFullwidthJapaneseFontCommand(char *inputPath, char *outputPath,
void HandleLZCompressCommand(char *inputPath, char *outputPath, int argc, char **argv)
{
int overflowSize = 0;
+ int minDistance = 2; // default, for compatibility with LZ77UnCompVram()
for (int i = 3; i < argc; i++)
{
@@ -337,6 +339,19 @@ void HandleLZCompressCommand(char *inputPath, char *outputPath, int argc, char *
if (overflowSize < 1)
FATAL_ERROR("Overflow size must be positive.\n");
}
+ else if (strcmp(option, "-search") == 0)
+ {
+ if (i + 1 >= argc)
+ FATAL_ERROR("No size following \"-overflow\".\n");
+
+ i++;
+
+ if (!ParseNumber(argv[i], NULL, 10, &minDistance))
+ FATAL_ERROR("Failed to parse LZ min search distance.\n");
+
+ if (minDistance < 1)
+ FATAL_ERROR("LZ min search distance must be positive.\n");
+ }
else
{
FATAL_ERROR("Unrecognized option \"%s\".\n", option);
@@ -353,7 +368,7 @@ void HandleLZCompressCommand(char *inputPath, char *outputPath, int argc, char *
unsigned char *buffer = ReadWholeFileZeroPadded(inputPath, &fileSize, overflowSize);
int compressedSize;
- unsigned char *compressedData = LZCompress(buffer, fileSize + overflowSize, &compressedSize);
+ unsigned char *compressedData = LZCompress(buffer, fileSize + overflowSize, &compressedSize, minDistance);
compressedData[1] = (unsigned char)fileSize;
compressedData[2] = (unsigned char)(fileSize >> 8);
@@ -411,6 +426,61 @@ void HandleRLDecompressCommand(char *inputPath, char *outputPath, int argc UNUSE
free(uncompressedData);
}
+void HandleHuffCompressCommand(char *inputPath, char *outputPath, int argc, char **argv)
+{
+ int fileSize;
+ int bitDepth = 4;
+
+ for (int i = 3; i < argc; i++)
+ {
+ char *option = argv[i];
+
+ if (strcmp(option, "-depth") == 0)
+ {
+ if (i + 1 >= argc)
+ FATAL_ERROR("No size following \"-depth\".\n");
+
+ i++;
+
+ if (!ParseNumber(argv[i], NULL, 10, &bitDepth))
+ FATAL_ERROR("Failed to parse bit depth.\n");
+
+ if (bitDepth != 4 && bitDepth != 8)
+ FATAL_ERROR("GBA only supports bit depth of 4 or 8.\n");
+ }
+ else
+ {
+ FATAL_ERROR("Unrecognized option \"%s\".\n", option);
+ }
+ }
+
+ unsigned char *buffer = ReadWholeFile(inputPath, &fileSize);
+
+ int compressedSize;
+ unsigned char *compressedData = HuffCompress(buffer, fileSize, &compressedSize, bitDepth);
+
+ free(buffer);
+
+ WriteWholeFile(outputPath, compressedData, compressedSize);
+
+ free(compressedData);
+}
+
+void HandleHuffDecompressCommand(char *inputPath, char *outputPath, int argc UNUSED, char **argv UNUSED)
+{
+ int fileSize;
+ unsigned char *buffer = ReadWholeFile(inputPath, &fileSize);
+
+ int uncompressedSize;
+ unsigned char *uncompressedData = HuffDecompress(buffer, fileSize, &uncompressedSize);
+
+ free(buffer);
+
+ WriteWholeFile(outputPath, uncompressedData, uncompressedSize);
+
+ free(uncompressedData);
+}
+
int main(int argc, char **argv)
{
if (argc < 3)
@@ -433,7 +503,9 @@ int main(int argc, char **argv)
{ "png", "hwjpnfont", HandlePngToHalfwidthJapaneseFontCommand },
{ "fwjpnfont", "png", HandleFullwidthJapaneseFontToPngCommand },
{ "png", "fwjpnfont", HandlePngToFullwidthJapaneseFontCommand },
+ { NULL, "huff", HandleHuffCompressCommand },
{ NULL, "lz", HandleLZCompressCommand },
+ { "huff", NULL, HandleHuffDecompressCommand },
{ "lz", NULL, HandleLZDecompressCommand },
{ NULL, "rl", HandleRLCompressCommand },
{ "rl", NULL, HandleRLDecompressCommand },
diff --git a/tools/jsonproc/jsonproc.cpp b/tools/jsonproc/jsonproc.cpp
index efe48f39f..15eae9dcb 100755
--- a/tools/jsonproc/jsonproc.cpp
+++ b/tools/jsonproc/jsonproc.cpp
@@ -5,7 +5,7 @@
#include <map>
#include <string>
-using std::string;
+using std::string; using std::to_string;
#include <inja.hpp>
using namespace inja;
@@ -36,7 +36,14 @@ int main(int argc, char *argv[])
// Add custom command callbacks.
env.add_callback("doNotModifyHeader", 0, [jsonfilepath, templateFilepath](Arguments& args) {
- return "//\n// DO NOT MODIFY THIS FILE! IT IS AUTO-GENERATED FROM " + jsonfilepath +" and Inja template " + templateFilepath + "\n//\n";
+ return "//\n// DO NOT MODIFY THIS FILE! It is auto-generated from " + jsonfilepath +" and Inja template " + templateFilepath + "\n//\n";
+ });
+
+ env.add_callback("subtract", 2, [](Arguments& args) {
+ int minuend = args.at(0)->get<int>();
+ int subtrahend = args.at(1)->get<int>();
+
+ return minuend - subtrahend;
});
env.add_callback("setVar", 2, [=](Arguments& args) {
@@ -46,11 +53,33 @@ int main(int argc, char *argv[])
return "";
});
+ env.add_callback("setVarInt", 2, [=](Arguments& args) {
+ string key = args.at(0)->get<string>();
+ string value = to_string(args.at(1)->get<int>());
+ set_custom_var(key, value);
+ return "";
+ });
+
env.add_callback("getVar", 1, [=](Arguments& args) {
string key = args.at(0)->get<string>();
return get_custom_var(key);
});
+ env.add_callback("trackVar", 2, [](Arguments& args) {
+ static int counter = 0;
+
+ int addValue = args.at(0)->get<int>();
+ int checkValue = args.at(1)->get<int>();
+
+ bool over = false;
+
+ counter = (counter + addValue) % (checkValue + 1);
+
+ if (counter <= addValue) over = true;
+
+ return over;
+ });
+
env.add_callback("concat", 2, [](Arguments& args) {
string first = args.at(0)->get<string>();
string second = args.at(1)->get<string>();
@@ -67,7 +96,6 @@ int main(int argc, char *argv[])
return rawValue.erase(0, prefix.length());
});
- // Add custom command callbacks.
env.add_callback("removeSuffix", 2, [](Arguments& args) {
string rawValue = args.at(0)->get<string>();
string suffix = args.at(1)->get<string>();
diff --git a/tools/preproc/asm_file.cpp b/tools/preproc/asm_file.cpp
index 383010aa3..98805c952 100644
--- a/tools/preproc/asm_file.cpp
+++ b/tools/preproc/asm_file.cpp
@@ -475,9 +475,11 @@ void AsmFile::ExpectEmptyRestOfLine()
m_lineStart = m_pos;
m_lineNum++;
}
- else if (m_buffer[m_pos] == '\r')
+ else if (m_buffer[m_pos] == '\r' && m_buffer[m_pos + 1] == '\n')
{
- RaiseError("only Unix-style LF newlines are supported");
+ m_pos += 2;
+ m_lineStart = m_pos;
+ m_lineNum++;
}
else
{
diff --git a/tools/ramscrgen/elf.cpp b/tools/ramscrgen/elf.cpp
index 7599fe0bb..7e78704b8 100644
--- a/tools/ramscrgen/elf.cpp
+++ b/tools/ramscrgen/elf.cpp
@@ -10,6 +10,8 @@
#define SHN_COMMON 0xFFF2
static std::string s_elfPath;
+static std::string s_archiveFilePath;
+static std::string s_archiveObjectPath;
static FILE *s_file;
@@ -22,6 +24,7 @@ static std::uint32_t s_symtabOffset;
static std::uint32_t s_strtabOffset;
static std::uint32_t s_symbolCount;
+static std::uint32_t s_elfFileOffset;
struct Symbol
{
@@ -31,7 +34,7 @@ struct Symbol
static void Seek(long offset)
{
- if (std::fseek(s_file, offset, SEEK_SET) != 0)
+ if (std::fseek(s_file, s_elfFileOffset + offset, SEEK_SET) != 0)
FATAL_ERROR("error: failed to seek to %ld in \"%s\"", offset, s_elfPath.c_str());
}
@@ -98,6 +101,18 @@ static void VerifyElfIdent()
FATAL_ERROR("error: \"%s\" not little-endian ELF\n", s_elfPath.c_str());
}
+static void VerifyAr()
+{
+ char expectedMagic[8] = {'!', '<', 'a', 'r', 'c', 'h', '>', '\n'};
+ char magic[8];
+
+ if (std::fread(magic, 8, 1, s_file) != 1)
+ FATAL_ERROR("error: failed to read AR magic from \"%s\"\n", s_archiveFilePath.c_str());
+
+ if (std::memcmp(magic, expectedMagic, 8) != 0)
+ FATAL_ERROR("error: AR magic did not match in \"%s\"\n", s_archiveFilePath.c_str());
+}
+
static void ReadElfHeader()
{
Seek(0x20);
@@ -108,6 +123,40 @@ static void ReadElfHeader()
s_shstrtabIndex = ReadInt16();
}
+static void FindArObj()
+{
+ char file_ident[17] = {0};
+ char filesize_s[11] = {0};
+ char expectedEndMagic[2] = { 0x60, 0x0a };
+ char end_magic[2];
+ std::size_t filesize;
+
+ Seek(8);
+ while (!std::feof(s_file)) {
+ if (std::fread(file_ident, 16, 1, s_file) != 1)
+ FATAL_ERROR("error: failed to read file ident in \"%s\"\n", s_archiveFilePath.c_str());
+ Skip(32);
+ if (std::fread(filesize_s, 10, 1, s_file) != 1)
+ FATAL_ERROR("error: failed to read filesize in \"%s\"\n", s_archiveFilePath.c_str());
+ if (std::fread(end_magic, 2, 1, s_file) != 1)
+ FATAL_ERROR("error: failed to read end sentinel in \"%s\"\n", s_archiveFilePath.c_str());
+ if (std::memcmp(end_magic, expectedEndMagic, 2) != 0)
+ FATAL_ERROR("error: corrupted archive header in \"%s\" at \"%s\"\n", s_archiveFilePath.c_str(), file_ident);
+
+ char * ptr = std::strchr(file_ident, '/');
+ if (ptr != nullptr)
+ *ptr = 0;
+ filesize = std::strtoul(filesize_s, nullptr, 10);
+ if (std::strncmp(s_archiveObjectPath.c_str(), file_ident, 16) == 0) {
+ s_elfFileOffset = std::ftell(s_file);
+ return;
+ }
+ Skip(filesize);
+ }
+
+ FATAL_ERROR("error: could not find object \"%s\" in archive \"%s\"\n", s_archiveObjectPath.c_str(), s_archiveFilePath.c_str());
+}
+
static std::string GetSectionName(std::uint32_t shstrtabOffset, int index)
{
Seek(s_sectionHeaderOffset + s_sectionHeaderEntrySize * index);
@@ -153,21 +202,14 @@ static void FindTableOffsets()
FATAL_ERROR("error: couldn't find .strtab section in \"%s\"\n", s_elfPath.c_str());
}
-std::map<std::string, std::uint32_t> GetCommonSymbols(std::string path)
+static std::map<std::string, std::uint32_t> GetCommonSymbols_Shared()
{
- s_elfPath = path;
-
- std::map<std::string, std::uint32_t> commonSymbols;
-
- s_file = std::fopen(s_elfPath.c_str(), "rb");
-
- if (s_file == NULL)
- FATAL_ERROR("error: failed to open \"%s\" for reading\n", path.c_str());
-
VerifyElfIdent();
ReadElfHeader();
FindTableOffsets();
-
+
+ std::map<std::string, std::uint32_t> commonSymbols;
+
std::vector<Symbol> commonSymbolVec;
Seek(s_symtabOffset);
@@ -193,3 +235,38 @@ std::map<std::string, std::uint32_t> GetCommonSymbols(std::string path)
return commonSymbols;
}
+
+std::map<std::string, std::uint32_t> GetCommonSymbolsFromLib(std::string sourcePath, std::string libpath)
+{
+ std::size_t colonPos = libpath.find(':');
+ if (colonPos == std::string::npos)
+ FATAL_ERROR("error: missing colon separator in libfile \"%s\"\n", s_elfPath.c_str());
+
+ s_archiveObjectPath = libpath.substr(colonPos + 1);
+ s_archiveFilePath = sourcePath + "/" + libpath.substr(1, colonPos - 1);
+ s_elfPath = sourcePath + "/" + libpath.substr(1);
+
+ s_file = std::fopen(s_archiveFilePath.c_str(), "rb");
+
+ if (s_file == NULL)
+ FATAL_ERROR("error: failed to open \"%s\" for reading\n", s_archiveFilePath.c_str());
+
+ VerifyAr();
+ FindArObj();
+ return GetCommonSymbols_Shared();
+}
+
+std::map<std::string, std::uint32_t> GetCommonSymbols(std::string sourcePath, std::string path)
+{
+ s_elfFileOffset = 0;
+ if (path[0] == '*')
+ return GetCommonSymbolsFromLib(sourcePath, path);
+
+ s_elfPath = sourcePath + "/" + path;
+ s_file = std::fopen(s_elfPath.c_str(), "rb");
+
+ if (s_file == NULL)
+ FATAL_ERROR("error: failed to open \"%s\" for reading\n", path.c_str());
+
+ return GetCommonSymbols_Shared();
+}
diff --git a/tools/ramscrgen/elf.h b/tools/ramscrgen/elf.h
index 0bfdd696f..3704860c0 100644
--- a/tools/ramscrgen/elf.h
+++ b/tools/ramscrgen/elf.h
@@ -25,6 +25,6 @@
#include <map>
#include <string>
-std::map<std::string, std::uint32_t> GetCommonSymbols(std::string path);
+std::map<std::string, std::uint32_t> GetCommonSymbols(std::string sourcePath, std::string path);
#endif // ELF_H
diff --git a/tools/ramscrgen/main.cpp b/tools/ramscrgen/main.cpp
index 6c4f4bbd7..5e5894f47 100644
--- a/tools/ramscrgen/main.cpp
+++ b/tools/ramscrgen/main.cpp
@@ -27,9 +27,15 @@
void HandleCommonInclude(std::string filename, std::string sourcePath, std::string symOrderPath, std::string lang)
{
- auto commonSymbols = GetCommonSymbols(sourcePath + "/" + filename);
+ auto commonSymbols = GetCommonSymbols(sourcePath, filename);
+ std::size_t dotIndex;
- std::size_t dotIndex = filename.find_last_of('.');
+ if (filename[0] == '*') {
+ dotIndex = filename.find_last_of(':');
+ filename = filename.substr(dotIndex + 1);
+ }
+
+ dotIndex = filename.find_last_of('.');
if (dotIndex == std::string::npos)
FATAL_ERROR("error: \"%s\" doesn't have a file extension\n", filename.c_str());
@@ -73,7 +79,7 @@ void HandleCommonInclude(std::string filename, std::string sourcePath, std::stri
}
}
-void ConvertSymFile(std::string filename, std::string sectionName, std::string lang, bool common, std::string sourcePath, std::string commonSymPath)
+void ConvertSymFile(std::string filename, std::string sectionName, std::string lang, bool common, std::string sourcePath, std::string commonSymPath, std::string libSourcePath)
{
SymFile symFile(filename);
@@ -91,7 +97,7 @@ void ConvertSymFile(std::string filename, std::string sectionName, std::string l
symFile.ExpectEmptyRestOfLine();
printf(". = ALIGN(4);\n");
if (common)
- HandleCommonInclude(incFilename, sourcePath, commonSymPath, lang);
+ HandleCommonInclude(incFilename, incFilename[0] == '*' ? libSourcePath : sourcePath, commonSymPath, lang);
else
printf("%s(%s);\n", incFilename.c_str(), sectionName.c_str());
break;
@@ -148,6 +154,7 @@ int main(int argc, char **argv)
std::string lang = std::string(argv[3]);
std::string sourcePath;
std::string commonSymPath;
+ std::string libSourcePath;
if (argc > 4)
{
@@ -166,8 +173,15 @@ int main(int argc, char **argv)
sourcePath = paths.substr(0, commaPos);
commonSymPath = paths.substr(commaPos + 1);
+ commaPos = commonSymPath.find(',');
+ if (commaPos == std::string::npos) {
+ libSourcePath = "tools/agbcc/lib";
+ } else {
+ libSourcePath = commonSymPath.substr(commaPos + 1);
+ commonSymPath = commonSymPath.substr(0, commaPos);
+ }
}
- ConvertSymFile(symFileName, sectionName, lang, common, sourcePath, commonSymPath);
+ ConvertSymFile(symFileName, sectionName, lang, common, sourcePath, commonSymPath, libSourcePath);
return 0;
}
diff --git a/tools/scaninc/scaninc.cpp b/tools/scaninc/scaninc.cpp
index b95cbd033..a3e40c5d9 100644
--- a/tools/scaninc/scaninc.cpp
+++ b/tools/scaninc/scaninc.cpp
@@ -97,19 +97,26 @@ int main(int argc, char **argv)
}
for (auto include : file.GetIncludes())
{
+ bool exists = false;
+ std::string path("");
for (auto includeDir : includeDirs)
{
- std::string path(includeDir + include);
+ path = includeDir + include;
if (CanOpenFile(path))
{
- bool inserted = dependencies.insert(path).second;
- if (inserted)
- {
- filesToProcess.push(path);
- }
+ exists = true;
break;
}
}
+ if (!exists && file.FileType() == SourceFileType::Asm)
+ {
+ path = include;
+ }
+ bool inserted = dependencies.insert(path).second;
+ if (inserted && exists)
+ {
+ filesToProcess.push(path);
+ }
}
includeDirs.pop_back();
}
diff --git a/tools/scaninc/source_file.cpp b/tools/scaninc/source_file.cpp
index f23ff6db6..df31282f8 100644
--- a/tools/scaninc/source_file.cpp
+++ b/tools/scaninc/source_file.cpp
@@ -89,6 +89,11 @@ SourceFile::SourceFile(std::string path)
}
}
+SourceFileType SourceFile::FileType()
+{
+ return m_file_type;
+}
+
SourceFile::~SourceFile()
{
if (m_file_type == SourceFileType::Cpp || m_file_type == SourceFileType::Header)
diff --git a/tools/scaninc/source_file.h b/tools/scaninc/source_file.h
index f7b6412bd..854b3f116 100644
--- a/tools/scaninc/source_file.h
+++ b/tools/scaninc/source_file.h
@@ -50,6 +50,7 @@ public:
const std::set<std::string>& GetIncbins();
const std::set<std::string>& GetIncludes();
std::string& GetSrcDir();
+ SourceFileType FileType();
private:
union InnerUnion {