diff --git a/INSTALL.md b/INSTALL.md index 01fbd5ceef..a76d0acc75 100644 --- a/INSTALL.md +++ b/INSTALL.md @@ -125,19 +125,53 @@ Otherwise, ask for help on Discord or IRC (see [README.md](README.md)), or conti Note that in msys2, Copy is Ctrl+Insert and Paste is Shift+Insert. -1. Open msys2 at C:\devkitPro\msys2\mingw64.exe or run `C:\devkitPro\msys2\msys2_shell.bat -mingw64`. +1. Open msys2 at C:\devkitPro\msys2\msys2_shell.bat. -2. Certain packages are required to build pokeemerald. Install these by running the following command: +2. Certain packages are required to build pokeemerald. Install these by running the following two commands: ```bash - pacman -S make zlib-devel git mingw-w64-x86_64-gcc mingw-w64-x86_64-libpng + pacman -Sy msys2-keyring + pacman -S make gcc zlib-devel git ```
Note... - > This command will ask for confirmation, just enter the yes action when prompted. + > The commands will ask for confirmation, just enter the yes action when prompted.
+3. Download [libpng](https://sourceforge.net/projects/libpng/files/libpng16/1.6.37/libpng-1.6.37.tar.xz/download). + +4. Change directory to where libpng was downloaded. By default, msys2 will start in the current user's profile folder, located at **C:\Users\\⁠_\_**, where *\* is your Windows username. In most cases, libpng should be saved within a subfolder of the profile folder. For example, if libpng was saved to **C:\Users\\_\_\Downloads** (the Downloads location for most users), enter this command: + + ```bash + cd Downloads + ``` + +
+ Notes... + + > Note 1: While not shown, msys uses forward slashes `/` instead of backwards slashes `\` as the directory separator. + > Note 2: If the path has spaces, then the path must be wrapped with quotations, e.g. `cd "Downloads/My Downloads"`. + > Note 3: Windows path names are case-insensitive so adhering to capitalization isn’t needed. + > Note 4: If libpng was saved elsewhere, you will need to specify the full path to where libpng was downloaded, e.g. `cd c:/devkitpro/msys2` if it was saved there. +
+ +5. Run the following commands to uncompress and install libpng. + + ```bash + tar xf libpng-1.6.37.tar.xz + cd libpng-1.6.37 + ./configure --prefix=/usr + make check + make install + ``` + +6. Then finally, run the following command to change back to the user profile folder. + + ```bash + cd + ``` + ### Choosing where to store pokeemerald (msys2) At this point, you can choose a folder to store pokeemerald into. If you're okay with storing pokeemerald in the user profile folder, then proceed to [Installation](#installation). Otherwise, you'll need to account for where pokeemerald is stored when changing directory to the pokeemerald folder. diff --git a/Makefile b/Makefile index 16dfe9d296..720255de06 100644 --- a/Makefile +++ b/Makefile @@ -28,7 +28,7 @@ LD := $(PREFIX)ld # note: the makefile must be set up so MODERNCC is never called # if MODERN=0 MODERNCC := $(PREFIX)gcc -PATH_MODERNCC := PATH=$(TOOLCHAIN)/bin:PATH $(MODERNCC) +PATH_MODERNCC := PATH="$(PATH)" $(MODERNCC) ifeq ($(OS),Windows_NT) EXE := .exe diff --git a/README.md b/README.md index 893678a2dc..6f6d67f178 100644 --- a/README.md +++ b/README.md @@ -50,8 +50,14 @@ Other disassembly and/or decompilation projects: * [**Pokémon Pinball: Ruby & Sapphire**](https://github.com/pret/pokepinballrs) * [**Pokémon FireRed and LeafGreen**](https://github.com/pret/pokefirered) * [**Pokémon Mystery Dungeon: Red Rescue Team**](https://github.com/pret/pmd-red) - +* [**Pokémon Diamond and Pearl**](https://github.com/pret/pokediamond) +* [**Pokémon Platinum**](https://github.com/pret/pokeplatinum) +* [**Pokémon HeartGold and SoulSilver**](https://github.com/pret/pokeheartgold) +* [**Pokémon Mystery Dungeon: Explorers of Sky**](https://github.com/pret/pmd-sky) ## Contacts -You can find PRET on [Discord](https://discord.gg/d5dubZ3) and [IRC](https://web.libera.chat/?#pret). +You can find PRET on: + +* [Discord (PRET, #pokeemerald)](https://discord.gg/d5dubZ3) +* [IRC](https://web.libera.chat/?#pret) diff --git a/asm/macros/battle_frontier/frontier_util.inc b/asm/macros/battle_frontier/frontier_util.inc index c875fcdde2..e40eccb5e7 100644 --- a/asm/macros/battle_frontier/frontier_util.inc +++ b/asm/macros/battle_frontier/frontier_util.inc @@ -1,4 +1,4 @@ - @ Get the status (CHALLENGE_STATUS_*) of the current challenge and store the result in VAR_TEMP_0 + @ Get the status (CHALLENGE_STATUS_*) of the current challenge and store the result in VAR_TEMP_CHALLENGE_STATUS .macro frontier_getstatus setvar VAR_0x8004, FRONTIER_UTIL_FUNC_GET_STATUS special CallFrontierUtilFunc diff --git a/constants/constants.inc b/constants/constants.inc index e7561f4293..1f8f1cda2e 100644 --- a/constants/constants.inc +++ b/constants/constants.inc @@ -1,2 +1,3 @@ .include "constants/gba_constants.inc" .include "constants/global.inc" + .include "constants/tms_hms.inc" diff --git a/constants/tms_hms.inc b/constants/tms_hms.inc new file mode 100644 index 0000000000..3450aa73ba --- /dev/null +++ b/constants/tms_hms.inc @@ -0,0 +1,17 @@ +#include "constants/tms_hms.h" + +/* Expands to: +* enum_start ITEM_TM01 +* enum ITEM_TM_FOCUS_PUNCH +* ... +* enum_start ITEM_HM01 +* enum ITEM_HM_CUT +* ... */ +#define EQUIV_TM(id) enum ITEM_TM_ ## id; +#define EQUIV_HM(id) enum ITEM_HM_ ## id; + enum_start ITEM_TM01 +FOREACH_TM(EQUIV_TM) + enum_start ITEM_HM01 +FOREACH_HM(EQUIV_HM) +#undef EQUIV_TM +#undef EQUIV_HM diff --git a/data/battle_ai_scripts.s b/data/battle_ai_scripts.s index bdc80cd5b4..c296702a64 100644 --- a/data/battle_ai_scripts.s +++ b/data/battle_ai_scripts.s @@ -6,6 +6,7 @@ #include "constants/battle_move_effects.h" #include "constants/hold_effects.h" #include "constants/pokemon.h" + .include "asm/macros.inc" .include "asm/macros/battle_ai_script.inc" .include "constants/constants.inc" diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index 7e99911b19..e7f592aacb 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -533,7 +533,7 @@ BattleScript_EffectEvasionDown:: setstatchanger STAT_EVASION, 1, TRUE BattleScript_EffectStatDown:: attackcanceler - jumpifstatus2 BS_TARGET, STATUS2_SUBSTITUTE, BattleScript_ButItFailedAtkStringPpReduce + jumpifstatus2 BS_TARGET, STATUS2_SUBSTITUTE, BattleScript_FailedFromAtkString accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE attackstring ppreduce @@ -1216,7 +1216,7 @@ BattleScript_EffectPsywave:: BattleScript_EffectCounter:: attackcanceler - counterdamagecalculator BattleScript_ButItFailedAtkStringPpReduce + counterdamagecalculator BattleScript_FailedFromAtkString accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE attackstring ppreduce @@ -1543,7 +1543,7 @@ BattleScript_EffectEndure:: BattleScript_EffectSpikes:: attackcanceler - trysetspikes BattleScript_ButItFailedAtkStringPpReduce + trysetspikes BattleScript_FailedFromAtkString attackstring ppreduce attackanimation @@ -1800,7 +1800,7 @@ BattleScript_EffectPsychUp:: BattleScript_EffectMirrorCoat:: attackcanceler - mirrorcoatdamagecalculator BattleScript_ButItFailedAtkStringPpReduce + mirrorcoatdamagecalculator BattleScript_FailedFromAtkString accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE attackstring ppreduce @@ -2047,13 +2047,13 @@ BattleScript_AlreadyAtFullHp:: BattleScript_EffectFakeOut:: attackcanceler - jumpifnotfirstturn BattleScript_ButItFailedAtkStringPpReduce + jumpifnotfirstturn BattleScript_FailedFromAtkString setmoveeffect MOVE_EFFECT_FLINCH | MOVE_EFFECT_CERTAIN goto BattleScript_EffectHit -BattleScript_ButItFailedAtkStringPpReduce:: +BattleScript_FailedFromAtkString:: attackstring -BattleScript_ButItFailedPpReduce:: +BattleScript_FailedFromPpReduce:: ppreduce BattleScript_ButItFailed:: pause B_WAIT_TIME_SHORT @@ -2367,7 +2367,7 @@ BattleScript_EffectWish:: BattleScript_EffectAssist:: attackcanceler attackstring - assistattackselect BattleScript_ButItFailedPpReduce + assistattackselect BattleScript_FailedFromPpReduce attackanimation waitanimation setbyte sB_ANIM_TURN, 0 @@ -2391,7 +2391,7 @@ BattleScript_EffectSuperpower:: BattleScript_EffectMagicCoat:: attackcanceler - trysetmagiccoat BattleScript_ButItFailedAtkStringPpReduce + trysetmagiccoat BattleScript_FailedFromAtkString attackstring ppreduce attackanimation @@ -2542,7 +2542,7 @@ BattleScript_EffectGrudge:: BattleScript_EffectSnatch:: attackcanceler - trysetsnatch BattleScript_ButItFailedAtkStringPpReduce + trysetsnatch BattleScript_FailedFromAtkString attackstring ppreduce attackanimation diff --git a/data/maps/AbandonedShip_HiddenFloorRooms/map.json b/data/maps/AbandonedShip_HiddenFloorRooms/map.json index e808250f47..08869317e3 100644 --- a/data/maps/AbandonedShip_HiddenFloorRooms/map.json +++ b/data/maps/AbandonedShip_HiddenFloorRooms/map.json @@ -50,8 +50,8 @@ "movement_range_y": 1, "trainer_type": "TRAINER_TYPE_NONE", "trainer_sight_or_berry_tree_id": "0", - "script": "AbandonedShip_HiddenFloorRooms_EventScript_ItemTM18", - "flag": "FLAG_ITEM_ABANDONED_SHIP_HIDDEN_FLOOR_ROOM_1_TM18" + "script": "AbandonedShip_HiddenFloorRooms_EventScript_ItemTMRainDance", + "flag": "FLAG_ITEM_ABANDONED_SHIP_HIDDEN_FLOOR_ROOM_1_TM_RAIN_DANCE" }, { "graphics_id": "OBJ_EVENT_GFX_ITEM_BALL", diff --git a/data/maps/AbandonedShip_Room_B1F/map.json b/data/maps/AbandonedShip_Room_B1F/map.json index 2a296325c9..ac9820a8ab 100644 --- a/data/maps/AbandonedShip_Room_B1F/map.json +++ b/data/maps/AbandonedShip_Room_B1F/map.json @@ -24,8 +24,8 @@ "movement_range_y": 1, "trainer_type": "TRAINER_TYPE_NONE", "trainer_sight_or_berry_tree_id": "0", - "script": "AbandonedShip_Room_B1F_EventScript_ItemTM13", - "flag": "FLAG_ITEM_ABANDONED_SHIP_ROOMS_B1F_TM13" + "script": "AbandonedShip_Room_B1F_EventScript_ItemTMIceBeam", + "flag": "FLAG_ITEM_ABANDONED_SHIP_ROOMS_B1F_TM_ICE_BEAM" } ], "warp_events": [ diff --git a/data/maps/BattleFrontier_BattleArenaLobby/scripts.inc b/data/maps/BattleFrontier_BattleArenaLobby/scripts.inc index 1a9b8756c4..08e749b4a6 100644 --- a/data/maps/BattleFrontier_BattleArenaLobby/scripts.inc +++ b/data/maps/BattleFrontier_BattleArenaLobby/scripts.inc @@ -15,11 +15,11 @@ BattleFrontier_BattleArenaLobby_EventScript_TurnPlayerNorth:: end BattleFrontier_BattleArenaLobby_OnFrame: - map_script_2 VAR_TEMP_0, 0, BattleFrontier_BattleArenaLobby_EventScript_GetChallengeStatus - map_script_2 VAR_TEMP_0, CHALLENGE_STATUS_SAVING, BattleFrontier_BattleArenaLobby_EventScript_QuitWithoutSaving - map_script_2 VAR_TEMP_0, CHALLENGE_STATUS_PAUSED, BattleFrontier_BattleArenaLobby_EventScript_ResumeChallenge - map_script_2 VAR_TEMP_0, CHALLENGE_STATUS_WON, BattleFrontier_BattleArenaLobby_EventScript_WonChallenge - map_script_2 VAR_TEMP_0, CHALLENGE_STATUS_LOST, BattleFrontier_BattleArenaLobby_EventScript_LostChallenge + map_script_2 VAR_TEMP_CHALLENGE_STATUS, 0, BattleFrontier_BattleArenaLobby_EventScript_GetChallengeStatus + map_script_2 VAR_TEMP_CHALLENGE_STATUS, CHALLENGE_STATUS_SAVING, BattleFrontier_BattleArenaLobby_EventScript_QuitWithoutSaving + map_script_2 VAR_TEMP_CHALLENGE_STATUS, CHALLENGE_STATUS_PAUSED, BattleFrontier_BattleArenaLobby_EventScript_ResumeChallenge + map_script_2 VAR_TEMP_CHALLENGE_STATUS, CHALLENGE_STATUS_WON, BattleFrontier_BattleArenaLobby_EventScript_WonChallenge + map_script_2 VAR_TEMP_CHALLENGE_STATUS, CHALLENGE_STATUS_LOST, BattleFrontier_BattleArenaLobby_EventScript_LostChallenge .2byte 0 BattleFrontier_BattleArenaLobby_EventScript_GetChallengeStatus:: @@ -33,7 +33,7 @@ BattleFrontier_BattleArenaLobby_EventScript_QuitWithoutSaving:: arena_set ARENA_DATA_WIN_STREAK, 0 arena_set ARENA_DATA_WIN_STREAK_ACTIVE, FALSE frontier_set FRONTIER_DATA_CHALLENGE_STATUS, 0 - setvar VAR_TEMP_0, 255 + setvar VAR_TEMP_CHALLENGE_STATUS, 255 releaseall end @@ -55,7 +55,7 @@ BattleFrontier_BattleArenaLobby_EventScript_GiveBattlePoints:: call BattleFrontier_BattleArenaLobby_EventScript_SaveAfterChallenge msgbox BattleFrontier_BattleArenaLobby_Text_AwaitAnotherChallenge2, MSGBOX_DEFAULT closemessage - setvar VAR_TEMP_0, 255 + setvar VAR_TEMP_CHALLENGE_STATUS, 255 releaseall end @@ -67,7 +67,7 @@ BattleFrontier_BattleArenaLobby_EventScript_LostChallenge:: call BattleFrontier_BattleArenaLobby_EventScript_SaveAfterChallenge msgbox BattleFrontier_BattleArenaLobby_Text_AwaitAnotherChallenge2, MSGBOX_DEFAULT closemessage - setvar VAR_TEMP_0, 255 + setvar VAR_TEMP_CHALLENGE_STATUS, 255 releaseall end @@ -102,7 +102,7 @@ BattleFrontier_BattleArenaLobby_EventScript_ResumeChallenge:: playse SE_SAVE waitse frontier_set FRONTIER_DATA_PAUSED, FALSE - setvar VAR_TEMP_0, 255 + setvar VAR_TEMP_CHALLENGE_STATUS, 255 goto BattleFrontier_BattleArenaLobby_EventScript_EnterChallenge BattleFrontier_BattleArenaLobby_EventScript_Attendant:: @@ -148,7 +148,7 @@ BattleFrontier_BattleArenaLobby_EventScript_TryEnterChallenge:: case MULTI_B_PRESSED, BattleFrontier_BattleArenaLobby_EventScript_LoadPartyAndCancelChallenge BattleFrontier_BattleArenaLobby_EventScript_SaveBeforeChallenge:: - setvar VAR_TEMP_0, 0 + setvar VAR_TEMP_CHALLENGE_STATUS, 0 frontier_set FRONTIER_DATA_SELECTED_MON_ORDER arena_init arena_set ARENA_DATA_WIN_STREAK_ACTIVE, TRUE @@ -158,7 +158,7 @@ BattleFrontier_BattleArenaLobby_EventScript_SaveBeforeChallenge:: closemessage delay 2 call Common_EventScript_SaveGame - setvar VAR_TEMP_0, 255 + setvar VAR_TEMP_CHALLENGE_STATUS, 255 goto_if_eq VAR_RESULT, 0, BattleFrontier_BattleArenaLobby_EventScript_CancelChallengeSaveFailed BattleFrontier_BattleArenaLobby_EventScript_EnterChallenge:: special SavePlayerParty @@ -169,7 +169,7 @@ BattleFrontier_BattleArenaLobby_EventScript_EnterChallenge:: call_if_eq VAR_RESULT, FRONTIER_LVL_50, BattleFrontier_BattleArenaLobby_EventScript_WalkToDoorLv50 call_if_eq VAR_RESULT, FRONTIER_LVL_OPEN, BattleFrontier_BattleArenaLobby_EventScript_WalkToDoorLvOpen warp MAP_BATTLE_FRONTIER_BATTLE_ARENA_CORRIDOR, 9, 13 - setvar VAR_TEMP_0, 0 + setvar VAR_TEMP_CHALLENGE_STATUS, 0 waitstate end diff --git a/data/maps/BattleFrontier_BattleDomeLobby/scripts.inc b/data/maps/BattleFrontier_BattleDomeLobby/scripts.inc index 46f92ab1cf..edc651287c 100644 --- a/data/maps/BattleFrontier_BattleDomeLobby/scripts.inc +++ b/data/maps/BattleFrontier_BattleDomeLobby/scripts.inc @@ -21,11 +21,11 @@ BattleFrontier_BattleDomeLobby_EventScript_TurnPlayerNorth:: end BattleFrontier_BattleDomeLobby_OnFrame: - map_script_2 VAR_TEMP_0, 0, BattleFrontier_BattleDomeLobby_EventScript_GetChallengeStatus - map_script_2 VAR_TEMP_0, CHALLENGE_STATUS_SAVING, BattleFrontier_BattleDomeLobby_EventScript_QuitWithoutSaving - map_script_2 VAR_TEMP_0, CHALLENGE_STATUS_PAUSED, BattleFrontier_BattleDomeLobby_EventScript_ResumeChallenge - map_script_2 VAR_TEMP_0, CHALLENGE_STATUS_WON, BattleFrontier_BattleDomeLobby_EventScript_WonChallenge - map_script_2 VAR_TEMP_0, CHALLENGE_STATUS_LOST, BattleFrontier_BattleDomeLobby_EventScript_LostChallenge + map_script_2 VAR_TEMP_CHALLENGE_STATUS, 0, BattleFrontier_BattleDomeLobby_EventScript_GetChallengeStatus + map_script_2 VAR_TEMP_CHALLENGE_STATUS, CHALLENGE_STATUS_SAVING, BattleFrontier_BattleDomeLobby_EventScript_QuitWithoutSaving + map_script_2 VAR_TEMP_CHALLENGE_STATUS, CHALLENGE_STATUS_PAUSED, BattleFrontier_BattleDomeLobby_EventScript_ResumeChallenge + map_script_2 VAR_TEMP_CHALLENGE_STATUS, CHALLENGE_STATUS_WON, BattleFrontier_BattleDomeLobby_EventScript_WonChallenge + map_script_2 VAR_TEMP_CHALLENGE_STATUS, CHALLENGE_STATUS_LOST, BattleFrontier_BattleDomeLobby_EventScript_LostChallenge .2byte 0 BattleFrontier_BattleDomeLobby_EventScript_GetChallengeStatus:: @@ -40,7 +40,7 @@ BattleFrontier_BattleDomeLobby_EventScript_QuitWithoutSaving:: dome_set DOME_DATA_WIN_STREAK_ACTIVE, FALSE dome_set DOME_DATA_ATTEMPTED_CHALLENGE, TRUE frontier_set FRONTIER_DATA_CHALLENGE_STATUS, 0 - setvar VAR_TEMP_0, 255 + setvar VAR_TEMP_CHALLENGE_STATUS, 255 releaseall end @@ -103,7 +103,7 @@ BattleFrontier_BattleDomeLobby_EventScript_RecordBattle:: BattleFrontier_BattleDomeLobby_EventScript_EndChallenge:: msgbox BattleFrontier_BattleDomeLobby_Text_HopeToSeeYouAgain, MSGBOX_DEFAULT closemessage - setvar VAR_TEMP_0, 255 + setvar VAR_TEMP_CHALLENGE_STATUS, 255 releaseall end @@ -116,7 +116,7 @@ BattleFrontier_BattleDomeLobby_EventScript_ResumeChallenge:: playse SE_SAVE waitse frontier_set FRONTIER_DATA_PAUSED, FALSE - setvar VAR_TEMP_0, 255 + setvar VAR_TEMP_CHALLENGE_STATUS, 255 goto BattleFrontier_BattleDomeLobby_EventScript_EnterChallenge BattleFrontier_BattleDomeLobby_EventScript_SinglesAttendant:: @@ -176,7 +176,7 @@ BattleFrontier_BattleDomeLobby_EventScript_TryEnterChallenge:: case MULTI_B_PRESSED, BattleFrontier_BattleDomeLobby_EventScript_LoadPartyCancelChallenge BattleFrontier_BattleDomeLobby_EventScript_SaveBeforeChallenge:: - setvar VAR_TEMP_0, 0 + setvar VAR_TEMP_CHALLENGE_STATUS, 0 frontier_set FRONTIER_DATA_SELECTED_MON_ORDER dome_init frontier_set FRONTIER_DATA_CHALLENGE_STATUS, CHALLENGE_STATUS_SAVING @@ -185,7 +185,7 @@ BattleFrontier_BattleDomeLobby_EventScript_SaveBeforeChallenge:: closemessage delay 2 call Common_EventScript_SaveGame - setvar VAR_TEMP_0, 255 + setvar VAR_TEMP_CHALLENGE_STATUS, 255 goto_if_eq VAR_RESULT, 0, BattleFrontier_BattleDomeLobby_EventScript_CancelChallengeSaveFailed dome_inittrainers BattleFrontier_BattleDomeLobby_EventScript_EnterChallenge:: @@ -197,7 +197,7 @@ BattleFrontier_BattleDomeLobby_EventScript_EnterChallenge:: call BattleFrontier_BattleDomeLobby_EventScript_WalkToDoor special HealPlayerParty warp MAP_BATTLE_FRONTIER_BATTLE_DOME_CORRIDOR, 23, 6 - setvar VAR_TEMP_0, 0 + setvar VAR_TEMP_CHALLENGE_STATUS, 0 waitstate end diff --git a/data/maps/BattleFrontier_BattleFactoryLobby/scripts.inc b/data/maps/BattleFrontier_BattleFactoryLobby/scripts.inc index 8e598c7d23..d41741d13b 100644 --- a/data/maps/BattleFrontier_BattleFactoryLobby/scripts.inc +++ b/data/maps/BattleFrontier_BattleFactoryLobby/scripts.inc @@ -16,11 +16,11 @@ BattleFrontier_BattleFactoryLobby_EventScript_TurnPlayerNorth:: end BattleFrontier_BattleFactoryLobby_OnFrame: - map_script_2 VAR_TEMP_0, 0, BattleFrontier_BattleFactoryLobby_EventScript_GetChallengeStatus - map_script_2 VAR_TEMP_0, CHALLENGE_STATUS_SAVING, BattleFrontier_BattleFactoryLobby_EventScript_QuitWithoutSaving - map_script_2 VAR_TEMP_0, CHALLENGE_STATUS_PAUSED, BattleFrontier_BattleFactoryLobby_EventScript_ResumeChallenge - map_script_2 VAR_TEMP_0, CHALLENGE_STATUS_WON, BattleFrontier_BattleFactoryLobby_EventScript_WonChallenge - map_script_2 VAR_TEMP_0, CHALLENGE_STATUS_LOST, BattleFrontier_BattleFactoryLobby_EventScript_LostChallenge + map_script_2 VAR_TEMP_CHALLENGE_STATUS, 0, BattleFrontier_BattleFactoryLobby_EventScript_GetChallengeStatus + map_script_2 VAR_TEMP_CHALLENGE_STATUS, CHALLENGE_STATUS_SAVING, BattleFrontier_BattleFactoryLobby_EventScript_QuitWithoutSaving + map_script_2 VAR_TEMP_CHALLENGE_STATUS, CHALLENGE_STATUS_PAUSED, BattleFrontier_BattleFactoryLobby_EventScript_ResumeChallenge + map_script_2 VAR_TEMP_CHALLENGE_STATUS, CHALLENGE_STATUS_WON, BattleFrontier_BattleFactoryLobby_EventScript_WonChallenge + map_script_2 VAR_TEMP_CHALLENGE_STATUS, CHALLENGE_STATUS_LOST, BattleFrontier_BattleFactoryLobby_EventScript_LostChallenge .2byte 0 BattleFrontier_BattleFactoryLobby_EventScript_GetChallengeStatus:: @@ -36,7 +36,7 @@ BattleFrontier_BattleFactoryLobby_EventScript_QuitWithoutSaving:: factory_set FACTORY_DATA_WIN_STREAK, 0 factory_set FACTORY_DATA_WIN_STREAK_ACTIVE, FALSE frontier_set FRONTIER_DATA_CHALLENGE_STATUS, 0 - setvar VAR_TEMP_0, 255 + setvar VAR_TEMP_CHALLENGE_STATUS, 255 releaseall end @@ -94,7 +94,7 @@ BattleFrontier_BattleFactoryLobby_EventScript_RecordBattle:: BattleFrontier_BattleFactoryLobby_EventScript_EndRecordBattle:: msgbox BattleFrontier_BattleFactoryLobby_Text_LookForwardToNextVisit, MSGBOX_DEFAULT closemessage - setvar VAR_TEMP_0, 255 + setvar VAR_TEMP_CHALLENGE_STATUS, 255 releaseall end @@ -106,7 +106,7 @@ BattleFrontier_BattleFactoryLobby_EventScript_ResumeChallenge:: playse SE_SAVE waitse frontier_set FRONTIER_DATA_PAUSED, FALSE - setvar VAR_TEMP_0, 255 + setvar VAR_TEMP_CHALLENGE_STATUS, 255 setvar VAR_0x8006, 2 goto BattleFrontier_BattleFactoryLobby_EventScript_EnterChallenge @@ -154,7 +154,7 @@ BattleFrontier_BattleFactoryLobby_EventScript_TryEnterChallenge:: case MULTI_B_PRESSED, BattleFrontier_BattleFactoryLobby_EventScript_LoadPartyAndCancelChallenge BattleFrontier_BattleFactoryLobby_EventScript_SaveBeforeChallenge:: - setvar VAR_TEMP_0, 0 + setvar VAR_TEMP_CHALLENGE_STATUS, 0 factory_init frontier_set FRONTIER_DATA_CHALLENGE_STATUS, CHALLENGE_STATUS_SAVING factory_set FACTORY_DATA_WIN_STREAK_ACTIVE, TRUE @@ -162,7 +162,7 @@ BattleFrontier_BattleFactoryLobby_EventScript_SaveBeforeChallenge:: closemessage delay 2 call Common_EventScript_SaveGame - setvar VAR_TEMP_0, 255 + setvar VAR_TEMP_CHALLENGE_STATUS, 255 goto_if_eq VAR_RESULT, 0, BattleFrontier_BattleFactoryLobby_EventScript_CancelChallengeSaveFailed setvar VAR_0x8006, 0 BattleFrontier_BattleFactoryLobby_EventScript_EnterChallenge:: @@ -175,7 +175,7 @@ BattleFrontier_BattleFactoryLobby_EventScript_EnterChallenge:: applymovement OBJ_EVENT_ID_PLAYER, BattleFrontier_BattleFactoryLobby_Movement_PlayerEnterDoor waitmovement 0 warp MAP_BATTLE_FRONTIER_BATTLE_FACTORY_PRE_BATTLE_ROOM, 8, 13 - setvar VAR_TEMP_0, 0 + setvar VAR_TEMP_CHALLENGE_STATUS, 0 waitstate end diff --git a/data/maps/BattleFrontier_BattlePalaceLobby/scripts.inc b/data/maps/BattleFrontier_BattlePalaceLobby/scripts.inc index 66d0e6662d..9f80421e14 100644 --- a/data/maps/BattleFrontier_BattlePalaceLobby/scripts.inc +++ b/data/maps/BattleFrontier_BattlePalaceLobby/scripts.inc @@ -16,11 +16,11 @@ BattleFrontier_BattlePalaceLobby_EventScript_TurnPlayerNorth:: end BattleFrontier_BattlePalaceLobby_OnFrame: - map_script_2 VAR_TEMP_0, 0, BattleFrontier_BattlePalaceLobby_EventScript_GetChallengeStatus - map_script_2 VAR_TEMP_0, CHALLENGE_STATUS_SAVING, BattleFrontier_BattlePalaceLobby_EventScript_QuitWithoutSaving - map_script_2 VAR_TEMP_0, CHALLENGE_STATUS_PAUSED, BattleFrontier_BattlePalaceLobby_EventScript_ResumeChallenge - map_script_2 VAR_TEMP_0, CHALLENGE_STATUS_WON, BattleFrontier_BattlePalaceLobby_EventScript_WonChallenge - map_script_2 VAR_TEMP_0, CHALLENGE_STATUS_LOST, BattleFrontier_BattlePalaceLobby_EventScript_LostChallenge + map_script_2 VAR_TEMP_CHALLENGE_STATUS, 0, BattleFrontier_BattlePalaceLobby_EventScript_GetChallengeStatus + map_script_2 VAR_TEMP_CHALLENGE_STATUS, CHALLENGE_STATUS_SAVING, BattleFrontier_BattlePalaceLobby_EventScript_QuitWithoutSaving + map_script_2 VAR_TEMP_CHALLENGE_STATUS, CHALLENGE_STATUS_PAUSED, BattleFrontier_BattlePalaceLobby_EventScript_ResumeChallenge + map_script_2 VAR_TEMP_CHALLENGE_STATUS, CHALLENGE_STATUS_WON, BattleFrontier_BattlePalaceLobby_EventScript_WonChallenge + map_script_2 VAR_TEMP_CHALLENGE_STATUS, CHALLENGE_STATUS_LOST, BattleFrontier_BattlePalaceLobby_EventScript_LostChallenge .2byte 0 BattleFrontier_BattlePalaceLobby_EventScript_GetChallengeStatus:: @@ -34,7 +34,7 @@ BattleFrontier_BattlePalaceLobby_EventScript_QuitWithoutSaving:: palace_set PALACE_DATA_WIN_STREAK, 0 palace_set PALACE_DATA_WIN_STREAK_ACTIVE, FALSE frontier_set FRONTIER_DATA_CHALLENGE_STATUS, 0 - setvar VAR_TEMP_0, 255 + setvar VAR_TEMP_CHALLENGE_STATUS, 255 releaseall end @@ -56,7 +56,7 @@ BattleFrontier_BattlePalaceLobby_EventScript_GiveBattlePoints:: call BattleFrontier_BattlePalaceLobby_EventScript_SaveAfterChallenge msgbox BattleFrontier_BattlePalaceLobby_Text_ReturnWhenFortified, MSGBOX_DEFAULT closemessage - setvar VAR_TEMP_0, 255 + setvar VAR_TEMP_CHALLENGE_STATUS, 255 releaseall end @@ -68,7 +68,7 @@ BattleFrontier_BattlePalaceLobby_EventScript_LostChallenge:: call BattleFrontier_BattlePalaceLobby_EventScript_SaveAfterChallenge msgbox BattleFrontier_BattlePalaceLobby_Text_ReturnWhenFortified, MSGBOX_DEFAULT closemessage - setvar VAR_TEMP_0, 255 + setvar VAR_TEMP_CHALLENGE_STATUS, 255 releaseall end @@ -104,7 +104,7 @@ BattleFrontier_BattlePalaceLobby_EventScript_ResumeChallenge:: playse SE_SAVE waitse frontier_set FRONTIER_DATA_PAUSED, FALSE - setvar VAR_TEMP_0, 255 + setvar VAR_TEMP_CHALLENGE_STATUS, 255 goto BattleFrontier_BattlePalaceLobby_EventScript_EnterChallenge BattleFrontier_BattlePalaceLobby_EventScript_SinglesAttendant:: @@ -166,7 +166,7 @@ BattleFrontier_BattlePalaceLobby_EventScript_TryEnterChallenge:: case MULTI_B_PRESSED, BattleFrontier_BattlePalaceLobby_EventScript_LoadPartyAndCancelChallenge BattleFrontier_BattlePalaceLobby_EventScript_SaveBeforeChallenge:: - setvar VAR_TEMP_0, 0 + setvar VAR_TEMP_CHALLENGE_STATUS, 0 frontier_set FRONTIER_DATA_SELECTED_MON_ORDER palace_init palace_set PALACE_DATA_WIN_STREAK_ACTIVE, TRUE @@ -176,7 +176,7 @@ BattleFrontier_BattlePalaceLobby_EventScript_SaveBeforeChallenge:: closemessage delay 2 call Common_EventScript_SaveGame - setvar VAR_TEMP_0, 255 + setvar VAR_TEMP_CHALLENGE_STATUS, 255 goto_if_eq VAR_RESULT, 0, BattleFrontier_BattlePalaceLobby_EventScript_CancelChallengeSaveFailed BattleFrontier_BattlePalaceLobby_EventScript_EnterChallenge:: special SavePlayerParty @@ -185,7 +185,7 @@ BattleFrontier_BattlePalaceLobby_EventScript_EnterChallenge:: closemessage call BattleFrontier_BattlePalaceLobby_EventScript_WalkToDoor warp MAP_BATTLE_FRONTIER_BATTLE_PALACE_CORRIDOR, 8, 13 - setvar VAR_TEMP_0, 0 + setvar VAR_TEMP_CHALLENGE_STATUS, 0 waitstate end diff --git a/data/maps/BattleFrontier_BattlePikeLobby/scripts.inc b/data/maps/BattleFrontier_BattlePikeLobby/scripts.inc index 5f0e68fcc7..0b7cd130e6 100644 --- a/data/maps/BattleFrontier_BattlePikeLobby/scripts.inc +++ b/data/maps/BattleFrontier_BattlePikeLobby/scripts.inc @@ -6,10 +6,10 @@ BattleFrontier_BattlePikeLobby_MapScripts:: .byte 0 BattleFrontier_BattlePikeLobby_OnFrame: - map_script_2 VAR_TEMP_0, 0, BattleFrontier_BattlePikeLobby_EventScript_GetChallengeStatus - map_script_2 VAR_TEMP_0, CHALLENGE_STATUS_SAVING, BattleFrontier_BattlePikeLobby_EventScript_QuitWithoutSaving - map_script_2 VAR_TEMP_0, CHALLENGE_STATUS_WON, BattleFrontier_BattlePikeLobby_EventScript_WonChallenge - map_script_2 VAR_TEMP_0, CHALLENGE_STATUS_LOST, BattleFrontier_BattlePikeLobby_EventScript_LostChallenge + map_script_2 VAR_TEMP_CHALLENGE_STATUS, 0, BattleFrontier_BattlePikeLobby_EventScript_GetChallengeStatus + map_script_2 VAR_TEMP_CHALLENGE_STATUS, CHALLENGE_STATUS_SAVING, BattleFrontier_BattlePikeLobby_EventScript_QuitWithoutSaving + map_script_2 VAR_TEMP_CHALLENGE_STATUS, CHALLENGE_STATUS_WON, BattleFrontier_BattlePikeLobby_EventScript_WonChallenge + map_script_2 VAR_TEMP_CHALLENGE_STATUS, CHALLENGE_STATUS_LOST, BattleFrontier_BattlePikeLobby_EventScript_LostChallenge .2byte 0 BattleFrontier_BattlePikeLobby_OnWarp: @@ -34,7 +34,7 @@ BattleFrontier_BattlePikeLobby_EventScript_QuitWithoutSaving:: pike_set PIKE_DATA_WIN_STREAK, 0 pike_set PIKE_DATA_WIN_STREAK_ACTIVE, FALSE frontier_set FRONTIER_DATA_CHALLENGE_STATUS, 0 - setvar VAR_TEMP_0, 255 + setvar VAR_TEMP_CHALLENGE_STATUS, 255 releaseall end @@ -68,7 +68,7 @@ BattleFrontier_BattlePikeLobby_EventScript_GiveBattlePoints:: waitse msgbox BattleFrontier_BattlePikeLobby_Text_LookForwardToSeeingYou, MSGBOX_DEFAULT closemessage - setvar VAR_TEMP_0, 255 + setvar VAR_TEMP_CHALLENGE_STATUS, 255 releaseall end @@ -88,7 +88,7 @@ BattleFrontier_BattlePikeLobby_EventScript_LostChallenge:: waitse msgbox BattleFrontier_BattlePikeLobby_Text_LookForwardToSeeingYou, MSGBOX_DEFAULT closemessage - setvar VAR_TEMP_0, 255 + setvar VAR_TEMP_CHALLENGE_STATUS, 255 releaseall end @@ -135,7 +135,7 @@ BattleFrontier_BattlePikeLobby_EventScript_TryEnterChallenge:: case MULTI_B_PRESSED, BattleFrontier_BattlePikeLobby_EventScript_LoadPartyAndCancelChallenge BattleFrontier_BattlePikeLobby_EventScript_SaveBeforeChallenge:: - setvar VAR_TEMP_0, 0 + setvar VAR_TEMP_CHALLENGE_STATUS, 0 setvar VAR_TEMP_1, 0 frontier_set FRONTIER_DATA_SELECTED_MON_ORDER pike_init @@ -147,7 +147,7 @@ BattleFrontier_BattlePikeLobby_EventScript_SaveBeforeChallenge:: closemessage delay 2 call Common_EventScript_SaveGame - setvar VAR_TEMP_0, 255 + setvar VAR_TEMP_CHALLENGE_STATUS, 255 pike_savehelditems goto_if_eq VAR_RESULT, 0, BattleFrontier_BattlePikeLobby_EventScript_CancelChallengeSaveFailed special SavePlayerParty @@ -159,7 +159,7 @@ BattleFrontier_BattlePikeLobby_EventScript_SaveBeforeChallenge:: special HealPlayerParty call BattleFrontier_BattlePike_EventScript_CloseCurtain warpsilent MAP_BATTLE_FRONTIER_BATTLE_PIKE_CORRIDOR, 6, 7 - setvar VAR_TEMP_0, 0 + setvar VAR_TEMP_CHALLENGE_STATUS, 0 waitstate end diff --git a/data/maps/BattleFrontier_BattlePikeThreePathRoom/scripts.inc b/data/maps/BattleFrontier_BattlePikeThreePathRoom/scripts.inc index e95ca9dcea..3547871444 100644 --- a/data/maps/BattleFrontier_BattlePikeThreePathRoom/scripts.inc +++ b/data/maps/BattleFrontier_BattlePikeThreePathRoom/scripts.inc @@ -7,9 +7,9 @@ BattleFrontier_BattlePikeThreePathRoom_MapScripts:: .byte 0 BattleFrontier_BattlePikeThreePathRoom_OnFrame: - map_script_2 VAR_TEMP_0, 0, BattleFrontier_BattlePikeThreePathRoom_EventScript_GetChallengeStatus - map_script_2 VAR_TEMP_0, CHALLENGE_STATUS_SAVING, BattleFrontier_BattlePikeThreePathRoom_EventScript_WarpToLobby - map_script_2 VAR_TEMP_0, CHALLENGE_STATUS_PAUSED, BattleFrontier_BattlePikeThreePathRoom_EventScript_ResumeChallenge + map_script_2 VAR_TEMP_CHALLENGE_STATUS, 0, BattleFrontier_BattlePikeThreePathRoom_EventScript_GetChallengeStatus + map_script_2 VAR_TEMP_CHALLENGE_STATUS, CHALLENGE_STATUS_SAVING, BattleFrontier_BattlePikeThreePathRoom_EventScript_WarpToLobby + map_script_2 VAR_TEMP_CHALLENGE_STATUS, CHALLENGE_STATUS_PAUSED, BattleFrontier_BattlePikeThreePathRoom_EventScript_ResumeChallenge map_script_2 VAR_TEMP_5, 0, BattleFrontier_BattlePikeThreePathRoom_EventScript_SetHintRoom map_script_2 VAR_TEMP_5, 1, BattleFrontier_BattlePikeThreePathRoom_EventScript_GivePikeQueenHint .2byte 0 @@ -40,7 +40,7 @@ BattleFrontier_BattlePikeThreePathRoom_EventScript_ResumeChallenge:: playse SE_SAVE waitse frontier_set FRONTIER_DATA_PAUSED, FALSE - setvar VAR_TEMP_0, 255 + setvar VAR_TEMP_CHALLENGE_STATUS, 255 special SavePlayerParty frontier_setpartyorder FRONTIER_PARTY_SIZE msgbox BattleFrontier_BattlePikeThreePathRoom_Text_PleaseEnjoyChallenge, MSGBOX_DEFAULT diff --git a/data/maps/BattleFrontier_BattlePyramidFloor/scripts.inc b/data/maps/BattleFrontier_BattlePyramidFloor/scripts.inc index a6b3f63c8e..ba9d996706 100644 --- a/data/maps/BattleFrontier_BattlePyramidFloor/scripts.inc +++ b/data/maps/BattleFrontier_BattlePyramidFloor/scripts.inc @@ -6,7 +6,7 @@ BattleFrontier_BattlePyramidFloor_MapScripts:: BattleFrontier_BattlePyramidFloor_OnFrame: map_script_2 VAR_TEMP_D, 1, BattleFrontier_BattlePyramidFloor_EventScript_UpdateLight - map_script_2 VAR_TEMP_E, 0, BattleFrontier_BattlePyramidFloor_EventScript_PlayPyramidMusic + map_script_2 VAR_TEMP_PLAYING_PYRAMID_MUSIC, 0, BattleFrontier_BattlePyramidFloor_EventScript_PlayPyramidMusic map_script_2 VAR_TEMP_F, 1, BattleFrontier_BattlePyramidFloor_EventScript_ShowMapName .2byte 0 @@ -33,13 +33,13 @@ BattleFrontier_BattlePyramidFloor_EventScript_ShowMapName:: BattleFrontier_BattlePyramidFloor_EventScript_PlayPyramidMusic:: playbgm MUS_B_PYRAMID, FALSE - setvar VAR_TEMP_E, 1 + setvar VAR_TEMP_PLAYING_PYRAMID_MUSIC, 1 end BattleFrontier_BattlePyramidFloor_OnResume: pyramid_setfloorpal frontier_getstatus - switch VAR_TEMP_0 + switch VAR_TEMP_CHALLENGE_STATUS case 0, BattleFrontier_BattlePyramidFloor_EventScript_ReadyChallenge case CHALLENGE_STATUS_SAVING, BattleFrontier_BattlePyramid_EventScript_WarpToLobby case CHALLENGE_STATUS_PAUSED, BattleFrontier_BattlePyramidFloor_EventScript_ReadyChallenge diff --git a/data/maps/BattleFrontier_BattlePyramidLobby/scripts.inc b/data/maps/BattleFrontier_BattlePyramidLobby/scripts.inc index 5f3cdb54af..12734a2947 100644 --- a/data/maps/BattleFrontier_BattlePyramidLobby/scripts.inc +++ b/data/maps/BattleFrontier_BattlePyramidLobby/scripts.inc @@ -17,11 +17,11 @@ BattleFrontier_BattlePyramidLobby_EventScript_TurnPlayerNorth: end BattleFrontier_BattlePyramidLobby_OnFrame: - map_script_2 VAR_TEMP_0, 0, BattleFrontier_BattlePyramidLobby_EventScript_GetChallengeStatus - map_script_2 VAR_TEMP_0, CHALLENGE_STATUS_SAVING, BattleFrontier_BattlePyramidLobby_EventScript_QuitWithoutSaving - map_script_2 VAR_TEMP_0, CHALLENGE_STATUS_PAUSED, BattleFrontier_BattlePyramidLobby_EventScript_ResumeChallenge - map_script_2 VAR_TEMP_0, CHALLENGE_STATUS_WON, BattleFrontier_BattlePyramidLobby_EventScript_WonChallenge - map_script_2 VAR_TEMP_0, CHALLENGE_STATUS_LOST, BattleFrontier_BattlePyramidLobby_EventScript_LostChallenge + map_script_2 VAR_TEMP_CHALLENGE_STATUS, 0, BattleFrontier_BattlePyramidLobby_EventScript_GetChallengeStatus + map_script_2 VAR_TEMP_CHALLENGE_STATUS, CHALLENGE_STATUS_SAVING, BattleFrontier_BattlePyramidLobby_EventScript_QuitWithoutSaving + map_script_2 VAR_TEMP_CHALLENGE_STATUS, CHALLENGE_STATUS_PAUSED, BattleFrontier_BattlePyramidLobby_EventScript_ResumeChallenge + map_script_2 VAR_TEMP_CHALLENGE_STATUS, CHALLENGE_STATUS_WON, BattleFrontier_BattlePyramidLobby_EventScript_WonChallenge + map_script_2 VAR_TEMP_CHALLENGE_STATUS, CHALLENGE_STATUS_LOST, BattleFrontier_BattlePyramidLobby_EventScript_LostChallenge .2byte 0 BattleFrontier_BattlePyramidLobby_EventScript_GetChallengeStatus:: @@ -38,7 +38,7 @@ BattleFrontier_BattlePyramidLobby_EventScript_QuitWithoutSaving:: pyramid_set PYRAMID_DATA_WIN_STREAK, 0 pyramid_set PYRAMID_DATA_WIN_STREAK_ACTIVE, FALSE frontier_set FRONTIER_DATA_CHALLENGE_STATUS, 0 - setvar VAR_TEMP_0, 255 + setvar VAR_TEMP_CHALLENGE_STATUS, 255 releaseall end @@ -75,7 +75,7 @@ BattleFrontier_BattlePyramidLobby_EventScript_GiveBattlePoints:: waitse msgbox BattleFrontier_BattlePyramidLobby_Text_LookForwardToNextChallenge, MSGBOX_DEFAULT closemessage - setvar VAR_TEMP_0, 255 + setvar VAR_TEMP_CHALLENGE_STATUS, 255 releaseall end @@ -98,7 +98,7 @@ BattleFrontier_BattlePyramidLobby_EventScript_LostChallenge:: waitse msgbox BattleFrontier_BattlePyramidLobby_Text_LookForwardToNextChallenge, MSGBOX_DEFAULT closemessage - setvar VAR_TEMP_0, 255 + setvar VAR_TEMP_CHALLENGE_STATUS, 255 releaseall end @@ -148,7 +148,7 @@ BattleFrontier_BattlePyramidLobby_EventScript_TryEnterChallenge:: case MULTI_B_PRESSED, BattleFrontier_BattlePyramidLobby_EventScript_LoadPartyAndCancelChallenge BattleFrontier_BattlePyramidLobby_EventScript_SaveBeforeChallenge:: - setvar VAR_TEMP_0, 0 + setvar VAR_TEMP_CHALLENGE_STATUS, 0 frontier_set FRONTIER_DATA_SELECTED_MON_ORDER pyramid_init pyramid_set PYRAMID_DATA_WIN_STREAK_ACTIVE, TRUE @@ -160,7 +160,7 @@ BattleFrontier_BattlePyramidLobby_EventScript_SaveBeforeChallenge:: closemessage delay 2 call Common_EventScript_SaveGame - setvar VAR_TEMP_0, 255 + setvar VAR_TEMP_CHALLENGE_STATUS, 255 goto_if_eq VAR_RESULT, 0, BattleFrontier_BattlePyramidLobby_EventScript_CancelChallengeSaveFailed BattleFrontier_BattlePyramidLobby_EventScript_EnterChallenge:: special SavePlayerParty @@ -172,7 +172,7 @@ BattleFrontier_BattlePyramidLobby_EventScript_EnterChallenge:: setvar VAR_RESULT, 0 special HealPlayerParty warp MAP_BATTLE_FRONTIER_BATTLE_PYRAMID_FLOOR, 1, 1 - setvar VAR_TEMP_0, 0 + setvar VAR_TEMP_CHALLENGE_STATUS, 0 waitstate end diff --git a/data/maps/BattleFrontier_BattlePyramidTop/scripts.inc b/data/maps/BattleFrontier_BattlePyramidTop/scripts.inc index 385356c4ba..fa57635271 100644 --- a/data/maps/BattleFrontier_BattlePyramidTop/scripts.inc +++ b/data/maps/BattleFrontier_BattlePyramidTop/scripts.inc @@ -32,7 +32,7 @@ BattleFrontier_BattlePyramidTop_OnResume: BattleFrontier_BattlePyramidTop_EventScript_CheckChallengeStatus:: copyvar VAR_TEMP_C, VAR_RESULT frontier_getstatus - switch VAR_TEMP_0 + switch VAR_TEMP_CHALLENGE_STATUS case 0, BattleFrontier_BattlePyramidTop_EventScript_ReadyChallenge case CHALLENGE_STATUS_SAVING, BattleFrontier_BattlePyramid_EventScript_WarpToLobby case CHALLENGE_STATUS_PAUSED, BattleFrontier_BattlePyramidTop_EventScript_ReadyChallenge @@ -43,13 +43,13 @@ BattleFrontier_BattlePyramidTop_EventScript_CheckChallengeStatus:: end BattleFrontier_BattlePyramidTop_OnFrame: - map_script_2 VAR_TEMP_E, 0, BattleFrontier_BattlePyramidTop_EventScript_PlayPyramidMusic + map_script_2 VAR_TEMP_PLAYING_PYRAMID_MUSIC, 0, BattleFrontier_BattlePyramidTop_EventScript_PlayPyramidMusic map_script_2 VAR_TEMP_F, 1, BattleFrontier_BattlePyramidTop_EventScript_ShowMapName .2byte 0 BattleFrontier_BattlePyramidTop_EventScript_PlayPyramidMusic:: playbgm MUS_B_PYRAMID_TOP, FALSE - setvar VAR_TEMP_E, 1 + setvar VAR_TEMP_PLAYING_PYRAMID_MUSIC, 1 end BattleFrontier_BattlePyramidTop_EventScript_ShowMapName:: diff --git a/data/maps/BattleFrontier_BattleTowerLobby/scripts.inc b/data/maps/BattleFrontier_BattleTowerLobby/scripts.inc index 1d39235505..d1d80719d2 100644 --- a/data/maps/BattleFrontier_BattleTowerLobby/scripts.inc +++ b/data/maps/BattleFrontier_BattleTowerLobby/scripts.inc @@ -41,11 +41,11 @@ BattleFrontier_BattleTowerLobby_EventScript_PlayerFaceNorth:: end BattleFrontier_BattleTowerLobby_OnFrame: - map_script_2 VAR_TEMP_0, 0, BattleFrontier_BattleTowerLobby_EventScript_GetChallengeStatus - map_script_2 VAR_TEMP_0, CHALLENGE_STATUS_SAVING, BattleFrontier_BattleTowerLobby_EventScript_QuitWithoutSaving - map_script_2 VAR_TEMP_0, CHALLENGE_STATUS_PAUSED, BattleFrontier_BattleTowerLobby_EventScript_ResumeChallenge - map_script_2 VAR_TEMP_0, CHALLENGE_STATUS_WON, BattleFrontier_BattleTowerLobby_EventScript_WonChallenge - map_script_2 VAR_TEMP_0, CHALLENGE_STATUS_LOST, BattleFrontier_BattleTowerLobby_EventScript_LostChallenge + map_script_2 VAR_TEMP_CHALLENGE_STATUS, 0, BattleFrontier_BattleTowerLobby_EventScript_GetChallengeStatus + map_script_2 VAR_TEMP_CHALLENGE_STATUS, CHALLENGE_STATUS_SAVING, BattleFrontier_BattleTowerLobby_EventScript_QuitWithoutSaving + map_script_2 VAR_TEMP_CHALLENGE_STATUS, CHALLENGE_STATUS_PAUSED, BattleFrontier_BattleTowerLobby_EventScript_ResumeChallenge + map_script_2 VAR_TEMP_CHALLENGE_STATUS, CHALLENGE_STATUS_WON, BattleFrontier_BattleTowerLobby_EventScript_WonChallenge + map_script_2 VAR_TEMP_CHALLENGE_STATUS, CHALLENGE_STATUS_LOST, BattleFrontier_BattleTowerLobby_EventScript_LostChallenge .2byte 0 BattleFrontier_BattleTowerLobby_EventScript_GetChallengeStatus:: @@ -60,7 +60,7 @@ BattleFrontier_BattleTowerLobby_EventScript_QuitWithoutSaving:: tower_set TOWER_DATA_WIN_STREAK, 0 tower_set TOWER_DATA_WIN_STREAK_ACTIVE, FALSE frontier_set FRONTIER_DATA_CHALLENGE_STATUS, 0 - setvar VAR_TEMP_0, 255 + setvar VAR_TEMP_CHALLENGE_STATUS, 255 release end @@ -94,8 +94,8 @@ BattleFrontier_BattleTowerLobby_EventScript_GiveBattlePoints:: BattleFrontier_BattleTowerLobby_EventScript_LookForwardToChallenge:: msgbox BattleFrontier_BattleTowerLobby_Text_LookForwardToAnotherChallenge, MSGBOX_DEFAULT closemessage - setvar VAR_TEMP_0, 255 - callnative UpdateFollowingPokemon + setvar VAR_TEMP_CHALLENGE_STATUS, 255 + callnative UpdateFollowingPokemon release end @@ -114,8 +114,8 @@ BattleFrontier_BattleTowerLobby_EventScript_LostThanksForPlaying:: call BattleFrontier_BattleTowerLobby_EventScript_AskSaveBattle msgbox BattleFrontier_BattleTowerLobby_Text_LookForwardToAnotherChallenge, MSGBOX_DEFAULT closemessage - setvar VAR_TEMP_0, 255 - callnative UpdateFollowingPokemon + setvar VAR_TEMP_CHALLENGE_STATUS, 255 + callnative UpdateFollowingPokemon release end @@ -217,7 +217,7 @@ BattleFrontier_BattleTowerLobby_EventScript_TryEnterSinglesChallenge:: BattleFrontier_BattleTowerLobby_EventScript_SaveBeforeSinglesChallenge:: frontier_set FRONTIER_DATA_SELECTED_MON_ORDER - setvar VAR_TEMP_0, 0 + setvar VAR_TEMP_CHALLENGE_STATUS, 0 tower_init tower_set TOWER_DATA_WIN_STREAK_ACTIVE, TRUE frontier_set FRONTIER_DATA_PAUSED, FALSE @@ -225,7 +225,7 @@ BattleFrontier_BattleTowerLobby_EventScript_SaveBeforeSinglesChallenge:: closemessage delay 2 call Common_EventScript_SaveGame - setvar VAR_TEMP_0, 255 + setvar VAR_TEMP_CHALLENGE_STATUS, 255 goto_if_eq VAR_RESULT, 0, BattleFrontier_BattleTowerLobby_EventScript_CancelChallengeSaveFailed incrementgamestat GAME_STAT_ENTERED_BATTLE_TOWER setvar VAR_BRAVO_TRAINER_BATTLE_TOWER_ON, TRUE @@ -281,7 +281,7 @@ BattleFrontier_BattleTowerLobby_EventScript_TryEnterDoublesChallenge:: BattleFrontier_BattleTowerLobby_EventScript_SaveBeforeDoublesChallenge:: frontier_set FRONTIER_DATA_SELECTED_MON_ORDER - setvar VAR_TEMP_0, 0 + setvar VAR_TEMP_CHALLENGE_STATUS, 0 tower_init tower_set TOWER_DATA_WIN_STREAK_ACTIVE, TRUE frontier_set FRONTIER_DATA_PAUSED, FALSE @@ -289,7 +289,7 @@ BattleFrontier_BattleTowerLobby_EventScript_SaveBeforeDoublesChallenge:: closemessage delay 2 call Common_EventScript_SaveGame - setvar VAR_TEMP_0, 255 + setvar VAR_TEMP_CHALLENGE_STATUS, 255 goto_if_eq VAR_RESULT, 0, BattleFrontier_BattleTowerLobby_EventScript_CancelChallengeSaveFailed incrementgamestat GAME_STAT_ENTERED_BATTLE_TOWER setvar VAR_BRAVO_TRAINER_BATTLE_TOWER_ON, FALSE @@ -346,7 +346,7 @@ BattleFrontier_BattleTowerLobby_EventScript_TryEnterMultisChallenge:: BattleFrontier_BattleTowerLobby_EventScript_SaveBeforeMultisChallenge:: frontier_set FRONTIER_DATA_SELECTED_MON_ORDER - setvar VAR_TEMP_0, 0 + setvar VAR_TEMP_CHALLENGE_STATUS, 0 tower_init tower_set TOWER_DATA_WIN_STREAK_ACTIVE, TRUE frontier_set FRONTIER_DATA_PAUSED, FALSE @@ -354,7 +354,7 @@ BattleFrontier_BattleTowerLobby_EventScript_SaveBeforeMultisChallenge:: closemessage delay 2 call Common_EventScript_SaveGame - setvar VAR_TEMP_0, 255 + setvar VAR_TEMP_CHALLENGE_STATUS, 255 goto_if_eq VAR_RESULT, 0, BattleFrontier_BattleTowerLobby_EventScript_CancelChallengeSaveFailed incrementgamestat GAME_STAT_ENTERED_BATTLE_TOWER setvar VAR_BRAVO_TRAINER_BATTLE_TOWER_ON, FALSE @@ -410,7 +410,7 @@ BattleFrontier_BattleTowerLobby_EventScript_TryEnterLinkMultisChallenge:: BattleFrontier_BattleTowerLobby_EventScript_SaveBeforeLinkMultisChallenge:: frontier_set FRONTIER_DATA_SELECTED_MON_ORDER - setvar VAR_TEMP_0, 0 + setvar VAR_TEMP_CHALLENGE_STATUS, 0 tower_init tower_set TOWER_DATA_WIN_STREAK_ACTIVE, TRUE frontier_set FRONTIER_DATA_PAUSED, FALSE @@ -425,9 +425,14 @@ BattleFrontier_BattleTowerLobby_EventScript_SaveBeforeLinkMultisChallenge:: tower_save 0 .endif call Common_EventScript_SaveGame - setvar VAR_TEMP_0, 255 + setvar VAR_TEMP_CHALLENGE_STATUS, 255 goto_if_eq VAR_RESULT, 0, BattleFrontier_BattleTowerLobby_EventScript_CancelChallengeSaveFailed +@ GAME_STAT_ENTERED_BATTLE_TOWER should not be incremented here, for two reasons: +@ 1. It is incremented again in BattleFrontier_BattleTowerLobby_EventScript_CableLinkSuccessful or BattleFrontier_BattleTowerLobby_EventScript_WirelessLinkSuccessful +@ 2. If the player tries to save, but fails, the counter will still be incremented even if the player never enters the tower. +.ifndef BUGFIX incrementgamestat GAME_STAT_ENTERED_BATTLE_TOWER +.endif specialvar VAR_RESULT, IsWirelessAdapterConnected goto_if_eq VAR_RESULT, TRUE, BattleFrontier_BattleTowerLobby_EventScript_TryWirelessLink goto BattleFrontier_BattleTowerLobby_EventScript_TryCableLink @@ -604,7 +609,7 @@ BattleFrontier_BattleTowerLobby_EventScript_WaitForLinkOpponentLoad:: call BattleFrontier_BattleTowerLobby_EventScript_ShowYouToBattleRoom clearflag FLAG_CANCEL_BATTLE_ROOM_CHALLENGE warp MAP_BATTLE_FRONTIER_BATTLE_TOWER_ELEVATOR, 1, 6 - setvar VAR_TEMP_0, 0 + setvar VAR_TEMP_CHALLENGE_STATUS, 0 waitstate end diff --git a/data/maps/BattleFrontier_Lounge7/scripts.inc b/data/maps/BattleFrontier_Lounge7/scripts.inc index c52df3cafb..d2b6114a72 100644 --- a/data/maps/BattleFrontier_Lounge7/scripts.inc +++ b/data/maps/BattleFrontier_Lounge7/scripts.inc @@ -20,12 +20,12 @@ BattleFrontier_Lounge7_EventScript_ChooseLeftTutorMove:: message BattleFrontier_Lounge7_Text_TeachWhichMove waitmessage special ShowBattlePointsWindow - setvar VAR_TEMP_E, 0 + setvar VAR_TEMP_FRONTIER_TUTOR_ID, 0 setvar VAR_0x8004, SCROLL_MULTI_BF_MOVE_TUTOR_1 setvar VAR_0x8006, 0 special ShowScrollableMultichoice waitstate - copyvar VAR_TEMP_D, VAR_RESULT + copyvar VAR_TEMP_FRONTIER_TUTOR_SELECTION, VAR_RESULT switch VAR_RESULT case 0, BattleFrontier_Lounge7_EventScript_Softboiled case 1, BattleFrontier_Lounge7_EventScript_SeismicToss @@ -44,12 +44,12 @@ BattleFrontier_Lounge7_EventScript_ChooseLeftTutorMove:: BattleFrontier_Lounge7_EventScript_ChooseNewLeftTutorMove:: message BattleFrontier_Lounge7_Text_TeachWhichMove waitmessage - setvar VAR_TEMP_E, 0 + setvar VAR_TEMP_FRONTIER_TUTOR_ID, 0 setvar VAR_0x8004, SCROLL_MULTI_BF_MOVE_TUTOR_1 setvar VAR_0x8006, 1 special ShowScrollableMultichoice waitstate - copyvar VAR_TEMP_D, VAR_RESULT + copyvar VAR_TEMP_FRONTIER_TUTOR_SELECTION, VAR_RESULT switch VAR_RESULT case 0, BattleFrontier_Lounge7_EventScript_Softboiled case 1, BattleFrontier_Lounge7_EventScript_SeismicToss @@ -134,12 +134,12 @@ BattleFrontier_Lounge7_EventScript_ChooseRightTutorMove:: message BattleFrontier_Lounge7_Text_TeachWhichMove waitmessage special ShowBattlePointsWindow - setvar VAR_TEMP_E, 1 + setvar VAR_TEMP_FRONTIER_TUTOR_ID, 1 setvar VAR_0x8004, SCROLL_MULTI_BF_MOVE_TUTOR_2 setvar VAR_0x8006, 0 special ShowScrollableMultichoice waitstate - copyvar VAR_TEMP_D, VAR_RESULT + copyvar VAR_TEMP_FRONTIER_TUTOR_SELECTION, VAR_RESULT switch VAR_RESULT case 0, BattleFrontier_Lounge7_EventScript_DefenseCurl case 1, BattleFrontier_Lounge7_EventScript_Snore @@ -158,12 +158,12 @@ BattleFrontier_Lounge7_EventScript_ChooseRightTutorMove:: BattleFrontier_Lounge7_EventScript_ChooseNewRightTutorMove:: message BattleFrontier_Lounge7_Text_TeachWhichMove waitmessage - setvar VAR_TEMP_E, 1 + setvar VAR_TEMP_FRONTIER_TUTOR_ID, 1 setvar VAR_0x8004, SCROLL_MULTI_BF_MOVE_TUTOR_2 setvar VAR_0x8006, 1 special ShowScrollableMultichoice waitstate - copyvar VAR_TEMP_D, VAR_RESULT + copyvar VAR_TEMP_FRONTIER_TUTOR_SELECTION, VAR_RESULT switch VAR_RESULT case 0, BattleFrontier_Lounge7_EventScript_DefenseCurl case 1, BattleFrontier_Lounge7_EventScript_Snore @@ -243,11 +243,11 @@ BattleFrontier_Lounge7_EventScript_CancelChooseMon:: @ VAR_0x8008 is the price @ VAR_TEMP_C is the scroll multichoice ID -@ VAR_TEMP_D is the move selection -@ VAR_TEMP_E is which move tutor was spoken to +@ VAR_TEMP_FRONTIER_TUTOR_SELECTION is the move selection +@ VAR_TEMP_FRONTIER_TUTOR_ID is which move tutor was spoken to BattleFrontier_Lounge7_EventScript_ConfirmMoveSelection:: - copyvar VAR_0x8004, VAR_TEMP_D - copyvar VAR_0x8005, VAR_TEMP_E + copyvar VAR_0x8004, VAR_TEMP_FRONTIER_TUTOR_SELECTION + copyvar VAR_0x8005, VAR_TEMP_FRONTIER_TUTOR_ID special BufferBattleFrontierTutorMoveName buffernumberstring STR_VAR_2, VAR_0x8008 copyvar VAR_0x8004, VAR_TEMP_C @@ -275,7 +275,7 @@ BattleFrontier_Lounge7_EventScript_TeachTutorMove:: end BattleFrontier_Lounge7_EventScript_ChooseNewMove:: - goto_if_eq VAR_TEMP_E, 0, BattleFrontier_Lounge7_EventScript_ChooseNewLeftTutorMove + goto_if_eq VAR_TEMP_FRONTIER_TUTOR_ID, 0, BattleFrontier_Lounge7_EventScript_ChooseNewLeftTutorMove goto BattleFrontier_Lounge7_EventScript_ChooseNewRightTutorMove end diff --git a/data/maps/DewfordTown_Gym/scripts.inc b/data/maps/DewfordTown_Gym/scripts.inc index 81474af726..c425819304 100644 --- a/data/maps/DewfordTown_Gym/scripts.inc +++ b/data/maps/DewfordTown_Gym/scripts.inc @@ -136,7 +136,7 @@ DewfordTown_Gym_EventScript_Brawly:: trainerbattle_single TRAINER_BRAWLY_1, DewfordTown_Gym_Text_BrawlyIntro, DewfordTown_Gym_Text_BrawlyDefeat, DewfordTown_Gym_EventScript_BrawlyDefeated, NO_MUSIC specialvar VAR_RESULT, ShouldTryRematchBattle goto_if_eq VAR_RESULT, TRUE, DewfordTown_Gym_EventScript_BrawlyRematch - goto_if_unset FLAG_RECEIVED_TM08, DewfordTown_Gym_EventScript_GiveBulkUp2 + goto_if_unset FLAG_RECEIVED_TM_BULK_UP, DewfordTown_Gym_EventScript_GiveBulkUp2 msgbox DewfordTown_Gym_Text_BrawlyPostBattle, MSGBOX_DEFAULT release end @@ -168,17 +168,17 @@ DewfordTown_Gym_EventScript_BrawlyDefeated:: end DewfordTown_Gym_EventScript_GiveBulkUp:: - giveitem ITEM_TM08 + giveitem ITEM_TM_BULK_UP goto_if_eq VAR_RESULT, 0, Common_EventScript_BagIsFull msgbox DewfordTown_Gym_Text_ExplainBulkUp, MSGBOX_DEFAULT - setflag FLAG_RECEIVED_TM08 + setflag FLAG_RECEIVED_TM_BULK_UP return DewfordTown_Gym_EventScript_GiveBulkUp2: - giveitem ITEM_TM08 + giveitem ITEM_TM_BULK_UP goto_if_eq VAR_RESULT, 0, Common_EventScript_ShowBagIsFull msgbox DewfordTown_Gym_Text_ExplainBulkUp, MSGBOX_DEFAULT - setflag FLAG_RECEIVED_TM08 + setflag FLAG_RECEIVED_TM_BULK_UP release end diff --git a/data/maps/DewfordTown_Hall/scripts.inc b/data/maps/DewfordTown_Hall/scripts.inc index 6249a7fac5..1472bebb24 100644 --- a/data/maps/DewfordTown_Hall/scripts.inc +++ b/data/maps/DewfordTown_Hall/scripts.inc @@ -246,11 +246,11 @@ DewfordTown_Hall_EventScript_SludgeBombMan:: lock faceplayer call Common_EventScript_BufferTrendyPhrase - goto_if_set FLAG_RECEIVED_TM36, DewfordTown_Hall_EventScript_ReceivedSludgeBomb + goto_if_set FLAG_RECEIVED_TM_SLUDGE_BOMB, DewfordTown_Hall_EventScript_ReceivedSludgeBomb msgbox DewfordTown_Hall_Text_GiveYouSludgeBomb, MSGBOX_DEFAULT - giveitem ITEM_TM36 + giveitem ITEM_TM_SLUDGE_BOMB goto_if_eq VAR_RESULT, FALSE, Common_EventScript_ShowBagIsFull - setflag FLAG_RECEIVED_TM36 + setflag FLAG_RECEIVED_TM_SLUDGE_BOMB release end diff --git a/data/maps/FallarborTown_BattleTentLobby/scripts.inc b/data/maps/FallarborTown_BattleTentLobby/scripts.inc index 1bcd04559c..8f705075c7 100644 --- a/data/maps/FallarborTown_BattleTentLobby/scripts.inc +++ b/data/maps/FallarborTown_BattleTentLobby/scripts.inc @@ -15,11 +15,11 @@ FallarborTown_BattleTentLobby_EventScript_TurnPlayerNorth:: end FallarborTown_BattleTentLobby_OnFrame: - map_script_2 VAR_TEMP_0, 0, FallarborTown_BattleTentLobby_EventScript_GetChallengeStatus - map_script_2 VAR_TEMP_0, CHALLENGE_STATUS_SAVING, FallarborTown_BattleTentLobby_EventScript_QuitWithoutSaving - map_script_2 VAR_TEMP_0, CHALLENGE_STATUS_PAUSED, FallarborTown_BattleTentLobby_EventScript_ResumeChallenge - map_script_2 VAR_TEMP_0, CHALLENGE_STATUS_WON, FallarborTown_BattleTentLobby_EventScript_WonChallenge - map_script_2 VAR_TEMP_0, CHALLENGE_STATUS_LOST, FallarborTown_BattleTentLobby_EventScript_LostChallenge + map_script_2 VAR_TEMP_CHALLENGE_STATUS, 0, FallarborTown_BattleTentLobby_EventScript_GetChallengeStatus + map_script_2 VAR_TEMP_CHALLENGE_STATUS, CHALLENGE_STATUS_SAVING, FallarborTown_BattleTentLobby_EventScript_QuitWithoutSaving + map_script_2 VAR_TEMP_CHALLENGE_STATUS, CHALLENGE_STATUS_PAUSED, FallarborTown_BattleTentLobby_EventScript_ResumeChallenge + map_script_2 VAR_TEMP_CHALLENGE_STATUS, CHALLENGE_STATUS_WON, FallarborTown_BattleTentLobby_EventScript_WonChallenge + map_script_2 VAR_TEMP_CHALLENGE_STATUS, CHALLENGE_STATUS_LOST, FallarborTown_BattleTentLobby_EventScript_LostChallenge .2byte 0 FallarborTown_BattleTentLobby_EventScript_GetChallengeStatus:: @@ -31,7 +31,7 @@ FallarborTown_BattleTentLobby_EventScript_QuitWithoutSaving:: msgbox FallarborTown_BattleTentLobby_Text_DidntSaveBeforeQuitting, MSGBOX_DEFAULT closemessage frontier_set FRONTIER_DATA_CHALLENGE_STATUS, 0 - setvar VAR_TEMP_0, 255 + setvar VAR_TEMP_CHALLENGE_STATUS, 255 frontier_set FRONTIER_DATA_LVL_MODE, FRONTIER_LVL_50 releaseall end @@ -59,7 +59,7 @@ FallarborTown_BattleTentLobby_EventScript_GivePrize:: waitfanfare msgbox FallarborTown_BattleTentLobby_Text_AwaitAnotherChallenge2, MSGBOX_DEFAULT closemessage - setvar VAR_TEMP_0, 255 + setvar VAR_TEMP_CHALLENGE_STATUS, 255 releaseall end @@ -67,7 +67,7 @@ FallarborTown_BattleTentLobby_EventScript_NoRoomForPrize:: msgbox FallarborTown_BattleTentLobby_Text_BagFullReturnForPrize, MSGBOX_DEFAULT waitmessage closemessage - setvar VAR_TEMP_0, 255 + setvar VAR_TEMP_CHALLENGE_STATUS, 255 releaseall end @@ -87,7 +87,7 @@ FallarborTown_BattleTentLobby_EventScript_LostChallenge:: waitse msgbox FallarborTown_BattleTentLobby_Text_AwaitAnotherChallenge2, MSGBOX_DEFAULT closemessage - setvar VAR_TEMP_0, 255 + setvar VAR_TEMP_CHALLENGE_STATUS, 255 releaseall end @@ -99,7 +99,7 @@ FallarborTown_BattleTentLobby_EventScript_ResumeChallenge:: playse SE_SAVE waitse frontier_set FRONTIER_DATA_PAUSED, FALSE - setvar VAR_TEMP_0, 255 + setvar VAR_TEMP_CHALLENGE_STATUS, 255 goto FallarborTown_BattleTentLobby_EventScript_EnterChallenge FallarborTown_BattleTentLobby_EventScript_Attendant:: @@ -140,7 +140,7 @@ FallarborTown_BattleTentLobby_EventScript_TryEnterChallenge:: case MULTI_B_PRESSED, FallarborTown_BattleTentLobby_EventScript_LoadPartyCancelChallenge FallarborTown_BattleTentLobby_EventScript_SaveBeforeChallenge:: - setvar VAR_TEMP_0, 0 + setvar VAR_TEMP_CHALLENGE_STATUS, 0 frontier_set FRONTIER_DATA_SELECTED_MON_ORDER fallarbortent_init frontier_set FRONTIER_DATA_CHALLENGE_STATUS, CHALLENGE_STATUS_SAVING @@ -149,7 +149,7 @@ FallarborTown_BattleTentLobby_EventScript_SaveBeforeChallenge:: closemessage delay 2 call Common_EventScript_SaveGame - setvar VAR_TEMP_0, 255 + setvar VAR_TEMP_CHALLENGE_STATUS, 255 goto_if_eq VAR_RESULT, 0, FallarborTown_BattleTentLobby_EventScript_CancelChallengeSaveFailed FallarborTown_BattleTentLobby_EventScript_EnterChallenge:: special SavePlayerParty @@ -158,7 +158,7 @@ FallarborTown_BattleTentLobby_EventScript_EnterChallenge:: closemessage call FallarborTown_BattleTentLobby_EventScript_WalkToDoor warp MAP_FALLARBOR_TOWN_BATTLE_TENT_CORRIDOR, 2, 7 - setvar VAR_TEMP_0, 0 + setvar VAR_TEMP_CHALLENGE_STATUS, 0 waitstate end diff --git a/data/maps/FallarborTown_CozmosHouse/scripts.inc b/data/maps/FallarborTown_CozmosHouse/scripts.inc index 61f297e69d..27b03436da 100644 --- a/data/maps/FallarborTown_CozmosHouse/scripts.inc +++ b/data/maps/FallarborTown_CozmosHouse/scripts.inc @@ -4,7 +4,7 @@ FallarborTown_CozmosHouse_MapScripts:: FallarborTown_CozmosHouse_EventScript_ProfCozmo:: lock faceplayer - goto_if_set FLAG_RECEIVED_TM27, FallarborTown_CozmosHouse_EventScript_GaveMeteorite + goto_if_set FLAG_RECEIVED_TM_RETURN, FallarborTown_CozmosHouse_EventScript_GaveMeteorite checkitem ITEM_METEORITE goto_if_eq VAR_RESULT, TRUE, FallarborTown_CozmosHouse_EventScript_PlayerHasMeteorite msgbox FallarborTown_CozmosHouse_Text_MeteoriteWillNeverBeMineNow, MSGBOX_DEFAULT @@ -16,11 +16,11 @@ FallarborTown_CozmosHouse_EventScript_PlayerHasMeteorite:: call_if_set FLAG_TEMP_2, FallarborTown_CozmosHouse_EventScript_AskForMeteorite goto_if_eq VAR_RESULT, NO, FallarborTown_CozmosHouse_EventScript_DeclineGiveMeteorite msgbox FallarborTown_CozmosHouse_Text_PleaseUseThisTM, MSGBOX_DEFAULT - giveitem ITEM_TM27 + giveitem ITEM_TM_RETURN goto_if_eq VAR_RESULT, FALSE, Common_EventScript_ShowBagIsFull setvar VAR_0x8004, ITEM_METEORITE call Common_EventScript_PlayerHandedOverTheItem - setflag FLAG_RECEIVED_TM27 + setflag FLAG_RECEIVED_TM_RETURN msgbox FallarborTown_CozmosHouse_Text_ReallyGoingToHelpMyResearch, MSGBOX_DEFAULT release end @@ -48,7 +48,7 @@ FallarborTown_CozmosHouse_EventScript_GaveMeteorite:: FallarborTown_CozmosHouse_EventScript_CozmosWife:: lock faceplayer - goto_if_set FLAG_RECEIVED_TM27, FallarborTown_CozmosHouse_EventScript_CozmoIsHappy + goto_if_set FLAG_RECEIVED_TM_RETURN, FallarborTown_CozmosHouse_EventScript_CozmoIsHappy goto_if_set FLAG_DEFEATED_EVIL_TEAM_MT_CHIMNEY, FallarborTown_CozmosHouse_EventScript_CozmoIsSad msgbox FallarborTown_CozmosHouse_Text_CozmoWentToMeteorFalls, MSGBOX_DEFAULT release diff --git a/data/maps/FieryPath/map.json b/data/maps/FieryPath/map.json index 38b9aff75e..69f5050ad5 100644 --- a/data/maps/FieryPath/map.json +++ b/data/maps/FieryPath/map.json @@ -24,8 +24,8 @@ "movement_range_y": 1, "trainer_type": "TRAINER_TYPE_NONE", "trainer_sight_or_berry_tree_id": "0", - "script": "FieryPath_EventScript_ItemTM06", - "flag": "FLAG_ITEM_FIERY_PATH_TM06" + "script": "FieryPath_EventScript_ItemTMToxic", + "flag": "FLAG_ITEM_FIERY_PATH_TM_TOXIC" }, { "graphics_id": "OBJ_EVENT_GFX_PUSHABLE_BOULDER", diff --git a/data/maps/FortreeCity_Gym/scripts.inc b/data/maps/FortreeCity_Gym/scripts.inc index d52102ebf5..6812dc4345 100644 --- a/data/maps/FortreeCity_Gym/scripts.inc +++ b/data/maps/FortreeCity_Gym/scripts.inc @@ -12,6 +12,7 @@ FortreeCity_Gym_OnWarp: map_script_2 VAR_TEMP_0, VAR_TEMP_0, FortreeCity_Gym_EventScript_InitRotatingGates .2byte 0 +@ NOTE: This rotating gate puzzle makes use of VAR_TEMP_0 - VAR_TEMP_3 FortreeCity_Gym_EventScript_InitRotatingGates:: special RotatingGate_InitPuzzleAndGraphics end @@ -20,7 +21,7 @@ FortreeCity_Gym_EventScript_Winona:: trainerbattle_single TRAINER_WINONA_1, FortreeCity_Gym_Text_WinonaIntro, FortreeCity_Gym_Text_WinonaDefeat, FortreeCity_Gym_EventScript_WinonaDefeated, NO_MUSIC specialvar VAR_RESULT, ShouldTryRematchBattle goto_if_eq VAR_RESULT, TRUE, FortreeCity_Gym_EventScript_WinonaRematch - goto_if_unset FLAG_RECEIVED_TM40, FortreeCity_Gym_EventScript_GiveAerialAce2 + goto_if_unset FLAG_RECEIVED_TM_AERIAL_ACE, FortreeCity_Gym_EventScript_GiveAerialAce2 msgbox FortreeCity_Gym_Text_WinonaPostBattle, MSGBOX_DEFAULT release end @@ -49,18 +50,18 @@ FortreeCity_Gym_EventScript_WinonaDefeated:: end FortreeCity_Gym_EventScript_GiveAerialAce2:: - giveitem ITEM_TM40 + giveitem ITEM_TM_AERIAL_ACE goto_if_eq VAR_RESULT, FALSE, Common_EventScript_ShowBagIsFull msgbox FortreeCity_Gym_Text_ExplainAerialAce, MSGBOX_DEFAULT - setflag FLAG_RECEIVED_TM40 + setflag FLAG_RECEIVED_TM_AERIAL_ACE release end FortreeCity_Gym_EventScript_GiveAerialAce:: - giveitem ITEM_TM40 + giveitem ITEM_TM_AERIAL_ACE goto_if_eq VAR_RESULT, FALSE, Common_EventScript_BagIsFull msgbox FortreeCity_Gym_Text_ExplainAerialAce, MSGBOX_DEFAULT - setflag FLAG_RECEIVED_TM40 + setflag FLAG_RECEIVED_TM_AERIAL_ACE return FortreeCity_Gym_EventScript_WinonaRematch:: diff --git a/data/maps/FortreeCity_House2/scripts.inc b/data/maps/FortreeCity_House2/scripts.inc index cdd0fc99f7..a81a7a8e0a 100644 --- a/data/maps/FortreeCity_House2/scripts.inc +++ b/data/maps/FortreeCity_House2/scripts.inc @@ -4,7 +4,7 @@ FortreeCity_House2_MapScripts:: FortreeCity_House2_EventScript_HiddenPowerGiver:: lock faceplayer - goto_if_set FLAG_RECEIVED_TM10, FortreeCity_House2_EventScript_ExplainHiddenPower + goto_if_set FLAG_RECEIVED_TM_HIDDEN_POWER, FortreeCity_House2_EventScript_ExplainHiddenPower call_if_unset FLAG_MET_HIDDEN_POWER_GIVER, FortreeCity_House2_EventScript_Greeting msgbox FortreeCity_House2_Text_CoinInWhichHand, MSGBOX_DEFAULT multichoice 21, 8, MULTI_RIGHTLEFT, TRUE @@ -19,9 +19,9 @@ FortreeCity_House2_EventScript_HiddenPowerGiver:: switch VAR_RESULT case 0, FortreeCity_House2_EventScript_WrongGuess msgbox FortreeCity_House2_Text_YourHiddenPowerHasAwoken, MSGBOX_DEFAULT - giveitem ITEM_TM10 + giveitem ITEM_TM_HIDDEN_POWER goto_if_eq VAR_RESULT, 0, Common_EventScript_ShowBagIsFull - setflag FLAG_RECEIVED_TM10 + setflag FLAG_RECEIVED_TM_HIDDEN_POWER msgbox FortreeCity_House2_Text_ExplainHiddenPower, MSGBOX_DEFAULT release end diff --git a/data/maps/GraniteCave_1F/scripts.inc b/data/maps/GraniteCave_1F/scripts.inc index 1bf81b997b..ab0ccac21c 100644 --- a/data/maps/GraniteCave_1F/scripts.inc +++ b/data/maps/GraniteCave_1F/scripts.inc @@ -4,10 +4,10 @@ GraniteCave_1F_MapScripts:: GraniteCave_1F_EventScript_Hiker:: lock faceplayer - goto_if_set FLAG_RECEIVED_HM05, GraniteCave_1F_EventScript_ReceivedFlash + goto_if_set FLAG_RECEIVED_HM_FLASH, GraniteCave_1F_EventScript_ReceivedFlash msgbox GraniteCave_1F_Text_GetsDarkAheadHereYouGo, MSGBOX_DEFAULT - giveitem ITEM_HM05 - setflag FLAG_RECEIVED_HM05 + giveitem ITEM_HM_FLASH + setflag FLAG_RECEIVED_HM_FLASH msgbox GraniteCave_1F_Text_ExplainFlash, MSGBOX_DEFAULT release end diff --git a/data/maps/GraniteCave_StevensRoom/scripts.inc b/data/maps/GraniteCave_StevensRoom/scripts.inc index 384e648ee2..eb32c26293 100644 --- a/data/maps/GraniteCave_StevensRoom/scripts.inc +++ b/data/maps/GraniteCave_StevensRoom/scripts.inc @@ -11,7 +11,7 @@ GraniteCave_StevensRoom_EventScript_Steven:: call Common_EventScript_PlayerHandedOverTheItem setflag FLAG_DELIVERED_STEVEN_LETTER msgbox GraniteCave_StevensRoom_Text_ThankYouTakeThis, MSGBOX_DEFAULT - giveitem ITEM_TM47 + giveitem ITEM_TM_STEEL_WING call_if_eq VAR_RESULT, FALSE, GraniteCave_StevensRoom_EventScript_BagFull msgbox GraniteCave_StevensRoom_Text_CouldBecomeChampionLetsRegister, MSGBOX_DEFAULT closemessage diff --git a/data/maps/IslandCave/scripts.inc b/data/maps/IslandCave/scripts.inc index d42e150939..1fe8ae22cf 100644 --- a/data/maps/IslandCave/scripts.inc +++ b/data/maps/IslandCave/scripts.inc @@ -51,10 +51,10 @@ IslandCave_EventScript_OpenRegiEntrance:: IslandCave_EventScript_CaveEntranceMiddle:: lockall - call_if_set FLAG_TEMP_3, IslandCave_EventScript_ClearSteps + call_if_set FLAG_TEMP_REGICE_PUZZLE_FAILED, IslandCave_EventScript_ClearSteps goto_if_set FLAG_SYS_BRAILLE_REGICE_COMPLETED, IslandCave_EventScript_BigHoleInWall braillemessage IslandCave_Braille_RunLapAroundWall - setflag FLAG_TEMP_2 + setflag FLAG_TEMP_REGICE_PUZZLE_STARTED special ShouldDoBrailleRegicePuzzle goto IslandCave_EventScript_CloseBrailleMsg end @@ -66,10 +66,10 @@ IslandCave_EventScript_BigHoleInWall:: IslandCave_EventScript_CaveEntranceSide:: lockall - call_if_set FLAG_TEMP_3, IslandCave_EventScript_ClearSteps + call_if_set FLAG_TEMP_REGICE_PUZZLE_FAILED, IslandCave_EventScript_ClearSteps braillemessage IslandCave_Braille_RunLapAroundWall goto_if_set FLAG_SYS_BRAILLE_REGICE_COMPLETED, IslandCave_EventScript_CloseBrailleMsg - setflag FLAG_TEMP_2 + setflag FLAG_TEMP_REGICE_PUZZLE_STARTED special ShouldDoBrailleRegicePuzzle goto IslandCave_EventScript_CloseBrailleMsg end @@ -84,7 +84,7 @@ IslandCave_EventScript_ClearSteps:: setvar VAR_REGICE_STEPS_1, 0 setvar VAR_REGICE_STEPS_2, 0 setvar VAR_REGICE_STEPS_3, 0 - clearflag FLAG_TEMP_3 + clearflag FLAG_TEMP_REGICE_PUZZLE_FAILED return IslandCave_EventScript_Regice:: diff --git a/data/maps/LavaridgeTown_Gym_1F/scripts.inc b/data/maps/LavaridgeTown_Gym_1F/scripts.inc index 530d6e9598..b7db13f54a 100644 --- a/data/maps/LavaridgeTown_Gym_1F/scripts.inc +++ b/data/maps/LavaridgeTown_Gym_1F/scripts.inc @@ -52,7 +52,7 @@ LavaridgeTown_Gym_1F_EventScript_Flannery:: trainerbattle_single TRAINER_FLANNERY_1, LavaridgeTown_Gym_1F_Text_FlanneryIntro, LavaridgeTown_Gym_1F_Text_FlanneryDefeat, LavaridgeTown_Gym_1F_EventScript_FlanneryDefeated, NO_MUSIC specialvar VAR_RESULT, ShouldTryRematchBattle goto_if_eq VAR_RESULT, TRUE, LavaridgeTown_Gym_1F_EventScript_FlanneryRematch - goto_if_unset FLAG_RECEIVED_TM50, LavaridgeTown_Gym_1F_EventScript_GiveOverheat2 + goto_if_unset FLAG_RECEIVED_TM_OVERHEAT, LavaridgeTown_Gym_1F_EventScript_GiveOverheat2 msgbox LavaridgeTown_Gym_1F_Text_FlanneryPostBattle, MSGBOX_DEFAULT release end @@ -84,18 +84,18 @@ LavaridgeTown_Gym_1F_EventScript_FlanneryDefeated:: end LavaridgeTown_Gym_1F_EventScript_GiveOverheat2:: - giveitem ITEM_TM50 + giveitem ITEM_TM_OVERHEAT goto_if_eq VAR_RESULT, FALSE, Common_EventScript_ShowBagIsFull msgbox LavaridgeTown_Gym_1F_Text_ExplainOverheat, MSGBOX_DEFAULT - setflag FLAG_RECEIVED_TM50 + setflag FLAG_RECEIVED_TM_OVERHEAT release end LavaridgeTown_Gym_1F_EventScript_GiveOverheat:: - giveitem ITEM_TM50 + giveitem ITEM_TM_OVERHEAT goto_if_eq VAR_RESULT, FALSE, Common_EventScript_BagIsFull msgbox LavaridgeTown_Gym_1F_Text_ExplainOverheat, MSGBOX_DEFAULT - setflag FLAG_RECEIVED_TM50 + setflag FLAG_RECEIVED_TM_OVERHEAT return LavaridgeTown_Gym_1F_EventScript_FlanneryRematch:: diff --git a/data/maps/LilycoveCity_DepartmentStore_4F/scripts.inc b/data/maps/LilycoveCity_DepartmentStore_4F/scripts.inc index d176781d6e..760abc600d 100644 --- a/data/maps/LilycoveCity_DepartmentStore_4F/scripts.inc +++ b/data/maps/LilycoveCity_DepartmentStore_4F/scripts.inc @@ -25,10 +25,10 @@ LilycoveCity_DepartmentStore_4F_EventScript_ClerkLeft:: .align 2 LilycoveCity_DepartmentStore_4F_Pokemart_AttackTMs: - .2byte ITEM_TM38 @ Fire Blast - .2byte ITEM_TM25 @ Thunder - .2byte ITEM_TM14 @ Blizzard - .2byte ITEM_TM15 @ Hyper Beam + .2byte ITEM_TM_FIRE_BLAST + .2byte ITEM_TM_THUNDER + .2byte ITEM_TM_BLIZZARD + .2byte ITEM_TM_HYPER_BEAM .2byte ITEM_NONE release end @@ -45,10 +45,10 @@ LilycoveCity_DepartmentStore_4F_EventScript_ClerkRight:: .align 2 LilycoveCity_DepartmentStore_4F_Pokemart_DefenseTMs: - .2byte ITEM_TM17 @ Protect - .2byte ITEM_TM20 @ Safeguard - .2byte ITEM_TM33 @ Reflect - .2byte ITEM_TM16 @ Light Screen + .2byte ITEM_TM_PROTECT + .2byte ITEM_TM_SAFEGUARD + .2byte ITEM_TM_REFLECT + .2byte ITEM_TM_LIGHT_SCREEN .2byte ITEM_NONE release end diff --git a/data/maps/LilycoveCity_House2/scripts.inc b/data/maps/LilycoveCity_House2/scripts.inc index 965d82acfb..5d1bc8eaa8 100644 --- a/data/maps/LilycoveCity_House2/scripts.inc +++ b/data/maps/LilycoveCity_House2/scripts.inc @@ -4,11 +4,11 @@ LilycoveCity_House2_MapScripts:: LilycoveCity_House2_EventScript_FatMan:: lock faceplayer - goto_if_set FLAG_RECEIVED_TM44, LilycoveCity_House2_EventScript_ReceivedRest + goto_if_set FLAG_RECEIVED_TM_REST, LilycoveCity_House2_EventScript_ReceivedRest msgbox LilycoveCity_House2_Text_NotAwakeYetHaveThis, MSGBOX_DEFAULT - giveitem ITEM_TM44 + giveitem ITEM_TM_REST goto_if_eq VAR_RESULT, FALSE, Common_EventScript_ShowBagIsFull - setflag FLAG_RECEIVED_TM44 + setflag FLAG_RECEIVED_TM_REST msgbox LilycoveCity_House2_Text_SleepIsEssential, MSGBOX_DEFAULT release end diff --git a/data/maps/LittlerootTown_ProfessorBirchsLab/scripts.inc b/data/maps/LittlerootTown_ProfessorBirchsLab/scripts.inc index acf80f0e40..0c8a468ab0 100644 --- a/data/maps/LittlerootTown_ProfessorBirchsLab/scripts.inc +++ b/data/maps/LittlerootTown_ProfessorBirchsLab/scripts.inc @@ -339,7 +339,7 @@ LittlerootTown_ProfessorBirchsLab_EventScript_TakeYourTime:: LittlerootTown_ProfessorBirchsLab_EventScript_GiveCyndaquil:: bufferspeciesname STR_VAR_1, SPECIES_CYNDAQUIL - setvar VAR_TEMP_1, SPECIES_CYNDAQUIL + setvar VAR_TEMP_TRANSFERRED_SPECIES, SPECIES_CYNDAQUIL givemon SPECIES_CYNDAQUIL, 5 goto_if_eq VAR_RESULT, MON_GIVEN_TO_PARTY, LittlerootTown_ProfessorBirchsLab_EventScript_SendCyndaquilToParty goto_if_eq VAR_RESULT, MON_GIVEN_TO_PC, LittlerootTown_ProfessorBirchsLab_EventScript_SendCyndaquilToPC @@ -380,7 +380,7 @@ LittlerootTown_ProfessorBirchsLab_EventScript_ReceivedCyndaquil:: LittlerootTown_ProfessorBirchsLab_EventScript_GiveTotodile:: bufferspeciesname STR_VAR_1, SPECIES_TOTODILE - setvar VAR_TEMP_1, SPECIES_TOTODILE + setvar VAR_TEMP_TRANSFERRED_SPECIES, SPECIES_TOTODILE givemon SPECIES_TOTODILE, 5 goto_if_eq VAR_RESULT, MON_GIVEN_TO_PARTY, LittlerootTown_ProfessorBirchsLab_EventScript_SendTotodileToParty goto_if_eq VAR_RESULT, MON_GIVEN_TO_PC, LittlerootTown_ProfessorBirchsLab_EventScript_SendTotodileToPC @@ -421,7 +421,7 @@ LittlerootTown_ProfessorBirchsLab_EventScript_ReceivedTotodile:: LittlerootTown_ProfessorBirchsLab_EventScript_GiveChikorita:: bufferspeciesname STR_VAR_1, SPECIES_CHIKORITA - setvar VAR_TEMP_1, SPECIES_CHIKORITA + setvar VAR_TEMP_TRANSFERRED_SPECIES, SPECIES_CHIKORITA givemon SPECIES_CHIKORITA, 5 goto_if_eq VAR_RESULT, MON_GIVEN_TO_PARTY, LittlerootTown_ProfessorBirchsLab_EventScript_SendChikoritaToParty goto_if_eq VAR_RESULT, MON_GIVEN_TO_PC, LittlerootTown_ProfessorBirchsLab_EventScript_SendChikoritaToPC diff --git a/data/maps/MauvilleCity/scripts.inc b/data/maps/MauvilleCity/scripts.inc index 2ad39aec1c..9211402705 100644 --- a/data/maps/MauvilleCity/scripts.inc +++ b/data/maps/MauvilleCity/scripts.inc @@ -13,7 +13,7 @@ MauvilleCity_OnTransition: setflag FLAG_SYS_TV_START clearflag FLAG_MAUVILLE_GYM_BARRIERS_STATE setvar VAR_MAUVILLE_GYM_STATE, 0 - call_if_set FLAG_GOT_TM24_FROM_WATTSON, MauvilleCity_EventScript_MoveWattsonBackToGym + call_if_set FLAG_GOT_TM_THUNDERBOLT_FROM_WATTSON, MauvilleCity_EventScript_MoveWattsonBackToGym end MauvilleCity_EventScript_MoveWattsonBackToGym:: @@ -418,7 +418,7 @@ MauvilleCity_Movement_ScottExitEast: MauvilleCity_EventScript_Wattson:: lock faceplayer - goto_if_set FLAG_GOT_TM24_FROM_WATTSON, MauvilleCity_EventScript_ReceivedThunderbolt + goto_if_set FLAG_GOT_TM_THUNDERBOLT_FROM_WATTSON, MauvilleCity_EventScript_ReceivedThunderbolt goto_if_eq VAR_NEW_MAUVILLE_STATE, 2, MauvilleCity_EventScript_CompletedNewMauville goto_if_set FLAG_GOT_BASEMENT_KEY_FROM_WATTSON, MauvilleCity_EventScript_BegunNewMauville msgbox MauvilleCity_Text_WattsonNeedFavorTakeKey, MSGBOX_DEFAULT @@ -435,9 +435,9 @@ MauvilleCity_EventScript_BegunNewMauville:: MauvilleCity_EventScript_CompletedNewMauville:: msgbox MauvilleCity_Text_WattsonThanksTakeTM, MSGBOX_DEFAULT - giveitem ITEM_TM24 + giveitem ITEM_TM_THUNDERBOLT goto_if_eq VAR_RESULT, FALSE, Common_EventScript_ShowBagIsFull - setflag FLAG_GOT_TM24_FROM_WATTSON + setflag FLAG_GOT_TM_THUNDERBOLT_FROM_WATTSON msgbox MauvilleCity_Text_WattsonYoungTakeCharge, MSGBOX_DEFAULT release end diff --git a/data/maps/MauvilleCity_GameCorner/scripts.inc b/data/maps/MauvilleCity_GameCorner/scripts.inc index b7c8603a33..c9e425be73 100644 --- a/data/maps/MauvilleCity_GameCorner/scripts.inc +++ b/data/maps/MauvilleCity_GameCorner/scripts.inc @@ -2,12 +2,12 @@ MauvilleCity_GameCorner_MapScripts:: .byte 0 @ Game Corner prices - .set TM32_COINS, 1500 - .set TM29_COINS, 3500 - .set TM35_COINS, 4000 - .set TM24_COINS, 4000 - .set TM13_COINS, 4000 - .set DOLL_COINS, 1000 + .set TM_DOUBLE_TEAM_COINS, 1500 + .set TM_PSYCHIC_COINS, 3500 + .set TM_FLAMETHROWER_COINS, 4000 + .set TM_THUNDERBOLT_COINS, 4000 + .set TM_ICE_BEAM_COINS, 4000 + .set DOLL_COINS, 1000 .set COINS_PRICE_50, 1000 .set COINS_PRICE_500, 10000 @@ -236,43 +236,43 @@ MauvilleCity_GameCorner_EventScript_ReturnToChooseTMPrize:: MauvilleCity_GameCorner_EventScript_ChooseTMPrize:: multichoice 12, 0, MULTI_GAME_CORNER_TMS, FALSE switch VAR_RESULT - case 0, MauvilleCity_GameCorner_EventScript_TM32 - case 1, MauvilleCity_GameCorner_EventScript_TM29 - case 2, MauvilleCity_GameCorner_EventScript_TM35 - case 3, MauvilleCity_GameCorner_EventScript_TM24 - case 4, MauvilleCity_GameCorner_EventScript_TM13 + case 0, MauvilleCity_GameCorner_EventScript_TMDoubleTeam + case 1, MauvilleCity_GameCorner_EventScript_TMPsychic + case 2, MauvilleCity_GameCorner_EventScript_TMFlamethrower + case 3, MauvilleCity_GameCorner_EventScript_TMThunderbolt + case 4, MauvilleCity_GameCorner_EventScript_TMIceBeam case 5, MauvilleCity_GameCorner_EventScript_CancelTMSelect goto MauvilleCity_GameCorner_EventScript_CancelTMSelect end -MauvilleCity_GameCorner_EventScript_TM32:: +MauvilleCity_GameCorner_EventScript_TMDoubleTeam:: setvar VAR_TEMP_1, 1 - bufferitemname STR_VAR_1, ITEM_TM32 - setvar VAR_0x8004, ITEM_TM32 + bufferitemname STR_VAR_1, ITEM_TM_DOUBLE_TEAM + setvar VAR_0x8004, ITEM_TM_DOUBLE_TEAM goto MauvilleCity_GameCorner_EventScript_ConfirmTMPrize -MauvilleCity_GameCorner_EventScript_TM29:: +MauvilleCity_GameCorner_EventScript_TMPsychic:: setvar VAR_TEMP_1, 2 - bufferitemname STR_VAR_1, ITEM_TM29 - setvar VAR_0x8004, ITEM_TM29 + bufferitemname STR_VAR_1, ITEM_TM_PSYCHIC + setvar VAR_0x8004, ITEM_TM_PSYCHIC goto MauvilleCity_GameCorner_EventScript_ConfirmTMPrize -MauvilleCity_GameCorner_EventScript_TM35:: +MauvilleCity_GameCorner_EventScript_TMFlamethrower:: setvar VAR_TEMP_1, 3 - bufferitemname STR_VAR_1, ITEM_TM35 - setvar VAR_0x8004, ITEM_TM35 + bufferitemname STR_VAR_1, ITEM_TM_FLAMETHROWER + setvar VAR_0x8004, ITEM_TM_FLAMETHROWER goto MauvilleCity_GameCorner_EventScript_ConfirmTMPrize -MauvilleCity_GameCorner_EventScript_TM24:: +MauvilleCity_GameCorner_EventScript_TMThunderbolt:: setvar VAR_TEMP_1, 4 - bufferitemname STR_VAR_1, ITEM_TM24 - setvar VAR_0x8004, ITEM_TM24 + bufferitemname STR_VAR_1, ITEM_TM_THUNDERBOLT + setvar VAR_0x8004, ITEM_TM_THUNDERBOLT goto MauvilleCity_GameCorner_EventScript_ConfirmTMPrize -MauvilleCity_GameCorner_EventScript_TM13:: +MauvilleCity_GameCorner_EventScript_TMIceBeam:: setvar VAR_TEMP_1, 5 - bufferitemname STR_VAR_1, ITEM_TM13 - setvar VAR_0x8004, ITEM_TM13 + bufferitemname STR_VAR_1, ITEM_TM_ICE_BEAM + setvar VAR_0x8004, ITEM_TM_ICE_BEAM goto MauvilleCity_GameCorner_EventScript_ConfirmTMPrize MauvilleCity_GameCorner_EventScript_ConfirmTMPrize:: @@ -280,72 +280,72 @@ MauvilleCity_GameCorner_EventScript_ConfirmTMPrize:: msgbox MauvilleCity_GameCorner_Text_SoYourChoiceIsTheTMX, MSGBOX_YESNO goto_if_eq VAR_RESULT, NO, MauvilleCity_GameCorner_EventScript_CancelTMSelect switch VAR_TEMP_1 - case 1, MauvilleCity_GameCorner_EventScript_BuyTM32 - case 2, MauvilleCity_GameCorner_EventScript_BuyTM29 - case 3, MauvilleCity_GameCorner_EventScript_BuyTM35 - case 4, MauvilleCity_GameCorner_EventScript_BuyTM24 - case 5, MauvilleCity_GameCorner_EventScript_BuyTM13 + case 1, MauvilleCity_GameCorner_EventScript_BuyTMDoubleTeam + case 2, MauvilleCity_GameCorner_EventScript_BuyTMPsychic + case 3, MauvilleCity_GameCorner_EventScript_BuyTMFlamethrower + case 4, MauvilleCity_GameCorner_EventScript_BuyTMThunderbolt + case 5, MauvilleCity_GameCorner_EventScript_BuyTMIceBeam end -MauvilleCity_GameCorner_EventScript_BuyTM32:: +MauvilleCity_GameCorner_EventScript_BuyTMDoubleTeam:: checkcoins VAR_TEMP_2 - goto_if_lt VAR_TEMP_2, TM32_COINS, MauvilleCity_GameCorner_EventScript_NotEnoughCoinsForTM - checkitemspace ITEM_TM32 + goto_if_lt VAR_TEMP_2, TM_DOUBLE_TEAM_COINS, MauvilleCity_GameCorner_EventScript_NotEnoughCoinsForTM + checkitemspace ITEM_TM_DOUBLE_TEAM goto_if_eq VAR_RESULT, FALSE, MauvilleCity_GameCorner_EventScript_NoRoomForTM - removecoins TM32_COINS - additem ITEM_TM32 + removecoins TM_DOUBLE_TEAM_COINS + additem ITEM_TM_DOUBLE_TEAM updatecoinsbox 1, 1 playse SE_SHOP msgbox MauvilleCity_GameCorner_Text_HereYouGo, MSGBOX_DEFAULT goto MauvilleCity_GameCorner_EventScript_ReturnToChooseTMPrize end -MauvilleCity_GameCorner_EventScript_BuyTM29:: +MauvilleCity_GameCorner_EventScript_BuyTMPsychic:: checkcoins VAR_TEMP_2 - goto_if_lt VAR_TEMP_2, TM29_COINS, MauvilleCity_GameCorner_EventScript_NotEnoughCoinsForTM - checkitemspace ITEM_TM29 + goto_if_lt VAR_TEMP_2, TM_PSYCHIC_COINS, MauvilleCity_GameCorner_EventScript_NotEnoughCoinsForTM + checkitemspace ITEM_TM_PSYCHIC goto_if_eq VAR_RESULT, FALSE, MauvilleCity_GameCorner_EventScript_NoRoomForTM - removecoins TM29_COINS - additem ITEM_TM29 + removecoins TM_PSYCHIC_COINS + additem ITEM_TM_PSYCHIC updatecoinsbox 1, 1 playse SE_SHOP msgbox MauvilleCity_GameCorner_Text_HereYouGo, MSGBOX_DEFAULT goto MauvilleCity_GameCorner_EventScript_ReturnToChooseTMPrize end -MauvilleCity_GameCorner_EventScript_BuyTM35:: +MauvilleCity_GameCorner_EventScript_BuyTMFlamethrower:: checkcoins VAR_TEMP_2 - goto_if_lt VAR_TEMP_2, TM35_COINS, MauvilleCity_GameCorner_EventScript_NotEnoughCoinsForTM - checkitemspace ITEM_TM35 + goto_if_lt VAR_TEMP_2, TM_FLAMETHROWER_COINS, MauvilleCity_GameCorner_EventScript_NotEnoughCoinsForTM + checkitemspace ITEM_TM_FLAMETHROWER goto_if_eq VAR_RESULT, FALSE, MauvilleCity_GameCorner_EventScript_NoRoomForTM - removecoins TM35_COINS - additem ITEM_TM35 + removecoins TM_FLAMETHROWER_COINS + additem ITEM_TM_FLAMETHROWER updatecoinsbox 1, 1 playse SE_SHOP msgbox MauvilleCity_GameCorner_Text_HereYouGo, MSGBOX_DEFAULT goto MauvilleCity_GameCorner_EventScript_ReturnToChooseTMPrize end -MauvilleCity_GameCorner_EventScript_BuyTM24:: +MauvilleCity_GameCorner_EventScript_BuyTMThunderbolt:: checkcoins VAR_TEMP_2 - goto_if_lt VAR_TEMP_2, TM24_COINS, MauvilleCity_GameCorner_EventScript_NotEnoughCoinsForTM - checkitemspace ITEM_TM24 + goto_if_lt VAR_TEMP_2, TM_THUNDERBOLT_COINS, MauvilleCity_GameCorner_EventScript_NotEnoughCoinsForTM + checkitemspace ITEM_TM_THUNDERBOLT goto_if_eq VAR_RESULT, FALSE, MauvilleCity_GameCorner_EventScript_NoRoomForTM - removecoins TM24_COINS - additem ITEM_TM24 + removecoins TM_THUNDERBOLT_COINS + additem ITEM_TM_THUNDERBOLT updatecoinsbox 1, 1 playse SE_SHOP msgbox MauvilleCity_GameCorner_Text_HereYouGo, MSGBOX_DEFAULT goto MauvilleCity_GameCorner_EventScript_ReturnToChooseTMPrize end -MauvilleCity_GameCorner_EventScript_BuyTM13:: +MauvilleCity_GameCorner_EventScript_BuyTMIceBeam:: checkcoins VAR_TEMP_2 - goto_if_lt VAR_TEMP_2, TM13_COINS, MauvilleCity_GameCorner_EventScript_NotEnoughCoinsForTM - checkitemspace ITEM_TM13 + goto_if_lt VAR_TEMP_2, TM_ICE_BEAM_COINS, MauvilleCity_GameCorner_EventScript_NotEnoughCoinsForTM + checkitemspace ITEM_TM_ICE_BEAM goto_if_eq VAR_RESULT, FALSE, MauvilleCity_GameCorner_EventScript_NoRoomForTM - removecoins TM13_COINS - additem ITEM_TM13 + removecoins TM_ICE_BEAM_COINS + additem ITEM_TM_ICE_BEAM updatecoinsbox 1, 1 playse SE_SHOP msgbox MauvilleCity_GameCorner_Text_HereYouGo, MSGBOX_DEFAULT diff --git a/data/maps/MauvilleCity_Gym/scripts.inc b/data/maps/MauvilleCity_Gym/scripts.inc index de924d7d93..433c45bf81 100644 --- a/data/maps/MauvilleCity_Gym/scripts.inc +++ b/data/maps/MauvilleCity_Gym/scripts.inc @@ -77,7 +77,7 @@ MauvilleCity_Gym_EventScript_Wattson:: trainerbattle_single TRAINER_WATTSON_1, MauvilleCity_Gym_Text_WattsonIntro, MauvilleCity_Gym_Text_WattsonDefeat, MauvilleCity_Gym_EventScript_WattsonDefeated, NO_MUSIC specialvar VAR_RESULT, ShouldTryRematchBattle goto_if_eq VAR_RESULT, TRUE, MauvilleCity_Gym_EventScript_WattsonRematch - goto_if_unset FLAG_RECEIVED_TM34, MauvilleCity_Gym_EventScript_GiveShockWave2 + goto_if_unset FLAG_RECEIVED_TM_SHOCK_WAVE, MauvilleCity_Gym_EventScript_GiveShockWave2 goto_if_eq VAR_NEW_MAUVILLE_STATE, 2, MauvilleCity_Gym_EventScript_CompletedNewMauville msgbox MauvilleCity_Gym_Text_WattsonPostBattle, MSGBOX_DEFAULT release @@ -112,18 +112,18 @@ MauvilleCity_Gym_EventScript_WattsonDefeated:: end MauvilleCity_Gym_EventScript_GiveShockWave2:: - giveitem ITEM_TM34 + giveitem ITEM_TM_SHOCK_WAVE goto_if_eq VAR_RESULT, FALSE, Common_EventScript_ShowBagIsFull msgbox MauvilleCity_Gym_Text_ExplainShockWave, MSGBOX_DEFAULT - setflag FLAG_RECEIVED_TM34 + setflag FLAG_RECEIVED_TM_SHOCK_WAVE release end MauvilleCity_Gym_EventScript_GiveShockWave:: - giveitem ITEM_TM34 + giveitem ITEM_TM_SHOCK_WAVE goto_if_eq VAR_RESULT, FALSE, Common_EventScript_BagIsFull msgbox MauvilleCity_Gym_Text_ExplainShockWave, MSGBOX_DEFAULT - setflag FLAG_RECEIVED_TM34 + setflag FLAG_RECEIVED_TM_SHOCK_WAVE return MauvilleCity_Gym_EventScript_CompletedNewMauville:: diff --git a/data/maps/MauvilleCity_House1/scripts.inc b/data/maps/MauvilleCity_House1/scripts.inc index d0d3481a66..2e4e9abcbc 100644 --- a/data/maps/MauvilleCity_House1/scripts.inc +++ b/data/maps/MauvilleCity_House1/scripts.inc @@ -4,10 +4,10 @@ MauvilleCity_House1_MapScripts:: MauvilleCity_House1_EventScript_RockSmashDude:: lock faceplayer - goto_if_set FLAG_RECEIVED_HM06, MauvilleCity_House1_EventScript_ReceivedRockSmash + goto_if_set FLAG_RECEIVED_HM_ROCK_SMASH, MauvilleCity_House1_EventScript_ReceivedRockSmash msgbox MauvilleCity_House1_Text_ImRockSmashDudeTakeThis, MSGBOX_DEFAULT - giveitem ITEM_HM06 - setflag FLAG_RECEIVED_HM06 + giveitem ITEM_HM_ROCK_SMASH + setflag FLAG_RECEIVED_HM_ROCK_SMASH setflag FLAG_HIDE_ROUTE_111_ROCK_SMASH_TIP_GUY msgbox MauvilleCity_House1_Text_ExplainRockSmash, MSGBOX_DEFAULT release diff --git a/data/maps/MeteorFalls_1F_1R/map.json b/data/maps/MeteorFalls_1F_1R/map.json index 71f1d1cc5b..e0d32c5804 100644 --- a/data/maps/MeteorFalls_1F_1R/map.json +++ b/data/maps/MeteorFalls_1F_1R/map.json @@ -24,8 +24,8 @@ "movement_range_y": 0, "trainer_type": "TRAINER_TYPE_NONE", "trainer_sight_or_berry_tree_id": "0", - "script": "MeteorFalls_1F_1R_EventScript_ItemTM23", - "flag": "FLAG_ITEM_METEOR_FALLS_1F_1R_TM23" + "script": "MeteorFalls_1F_1R_EventScript_ItemTMIronTail", + "flag": "FLAG_ITEM_METEOR_FALLS_1F_1R_TM_IRON_TAIL" }, { "graphics_id": "OBJ_EVENT_GFX_ITEM_BALL", diff --git a/data/maps/MeteorFalls_B1F_2R/map.json b/data/maps/MeteorFalls_B1F_2R/map.json index 8d153c4239..79a89874e9 100644 --- a/data/maps/MeteorFalls_B1F_2R/map.json +++ b/data/maps/MeteorFalls_B1F_2R/map.json @@ -24,8 +24,8 @@ "movement_range_y": 1, "trainer_type": "TRAINER_TYPE_NONE", "trainer_sight_or_berry_tree_id": "0", - "script": "MeteorFalls_B1F_2R_EventScript_ItemTM02", - "flag": "FLAG_ITEM_METEOR_FALLS_B1F_2R_TM02" + "script": "MeteorFalls_B1F_2R_EventScript_ItemTMDragonClaw", + "flag": "FLAG_ITEM_METEOR_FALLS_B1F_2R_TM_DRAGON_CLAW" } ], "warp_events": [ diff --git a/data/maps/MossdeepCity/scripts.inc b/data/maps/MossdeepCity/scripts.inc index 836490cbdd..a03b1db820 100644 --- a/data/maps/MossdeepCity/scripts.inc +++ b/data/maps/MossdeepCity/scripts.inc @@ -20,7 +20,7 @@ MossdeepCity_OnTransition: MossdeepCity_EventScript_PokefanF:: lock faceplayer - goto_if_set FLAG_RECEIVED_HM08, MossdeepCity_EventScript_PokefanFMagmaGone + goto_if_set FLAG_RECEIVED_HM_DIVE, MossdeepCity_EventScript_PokefanFMagmaGone msgbox MossdeepCity_Text_SpaceCenterReceivedLetter, MSGBOX_DEFAULT release end @@ -33,7 +33,7 @@ MossdeepCity_EventScript_PokefanFMagmaGone:: MossdeepCity_EventScript_Sailor:: lock faceplayer - goto_if_set FLAG_RECEIVED_HM08, MossdeepCity_EventScript_SailorMagmaGone + goto_if_set FLAG_RECEIVED_HM_DIVE, MossdeepCity_EventScript_SailorMagmaGone msgbox MossdeepCity_Text_MossdeepTargetedByMagma, MSGBOX_DEFAULT release end diff --git a/data/maps/MossdeepCity_Gym/scripts.inc b/data/maps/MossdeepCity_Gym/scripts.inc index 398a93bf3a..5033bc6e57 100644 --- a/data/maps/MossdeepCity_Gym/scripts.inc +++ b/data/maps/MossdeepCity_Gym/scripts.inc @@ -57,7 +57,7 @@ MossdeepCity_Gym_EventScript_TateAndLiza:: trainerbattle_double TRAINER_TATE_AND_LIZA_1, MossdeepCity_Gym_Text_TateAndLizaIntro, MossdeepCity_Gym_Text_TateAndLizaDefeat, MossdeepCity_Gym_Text_TateAndLizaNeedTwoMons, MossdeepCity_Gym_EventScript_TateAndLizaDefeated, NO_MUSIC specialvar VAR_RESULT, ShouldTryRematchBattle goto_if_eq VAR_RESULT, TRUE, MossdeepCity_Gym_EventScript_TateAndLizaRematch - goto_if_unset FLAG_RECEIVED_TM04, MossdeepCity_Gym_EventScript_GiveCalmMind2 + goto_if_unset FLAG_RECEIVED_TM_CALM_MIND, MossdeepCity_Gym_EventScript_GiveCalmMind2 msgbox MossdeepCity_Gym_Text_TateAndLizaPostBattle, MSGBOX_DEFAULT release end @@ -95,18 +95,18 @@ MossdeepCity_Gym_EventScript_TateAndLizaDefeated:: end MossdeepCity_Gym_EventScript_GiveCalmMind2:: - giveitem ITEM_TM04 + giveitem ITEM_TM_CALM_MIND goto_if_eq VAR_RESULT, FALSE, Common_EventScript_ShowBagIsFull msgbox MossdeepCity_Gym_Text_ExplainCalmMind, MSGBOX_DEFAULT - setflag FLAG_RECEIVED_TM04 + setflag FLAG_RECEIVED_TM_CALM_MIND release end MossdeepCity_Gym_EventScript_GiveCalmMind:: - giveitem ITEM_TM04 + giveitem ITEM_TM_CALM_MIND goto_if_eq VAR_RESULT, FALSE, Common_EventScript_BagIsFull msgbox MossdeepCity_Gym_Text_ExplainCalmMind, MSGBOX_DEFAULT - setflag FLAG_RECEIVED_TM04 + setflag FLAG_RECEIVED_TM_CALM_MIND return MossdeepCity_Gym_EventScript_TateAndLizaRematch:: diff --git a/data/maps/MossdeepCity_StevensHouse/scripts.inc b/data/maps/MossdeepCity_StevensHouse/scripts.inc index 0470e977a6..0f9255e5b6 100644 --- a/data/maps/MossdeepCity_StevensHouse/scripts.inc +++ b/data/maps/MossdeepCity_StevensHouse/scripts.inc @@ -40,8 +40,8 @@ MossdeepCity_StevensHouse_EventScript_StevenGivesDive:: applymovement LOCALID_STEVEN, MossdeepCity_StevensHouse_Movement_StevenApproachPlayer waitmovement 0 msgbox MossdeepCity_StevensHouse_Text_YouveEarnedHMDive, MSGBOX_DEFAULT - giveitem ITEM_HM08 - setflag FLAG_RECEIVED_HM08 + giveitem ITEM_HM_DIVE + setflag FLAG_RECEIVED_HM_DIVE setflag FLAG_OMIT_DIVE_FROM_STEVEN_LETTER msgbox MossdeepCity_StevensHouse_Text_ExplainDive, MSGBOX_DEFAULT closemessage @@ -85,7 +85,7 @@ MossdeepCity_StevensHouse_EventScript_LeaveBeldum:: end MossdeepCity_StevensHouse_EventScript_GiveBeldum:: - setvar VAR_TEMP_1, SPECIES_BELDUM + setvar VAR_TEMP_TRANSFERRED_SPECIES, SPECIES_BELDUM givemon SPECIES_BELDUM, 5 goto_if_eq VAR_RESULT, MON_GIVEN_TO_PARTY, MossdeepCity_StevensHouse_EventScript_SendBeldumParty goto_if_eq VAR_RESULT, MON_GIVEN_TO_PC, MossdeepCity_StevensHouse_EventScript_SendBeldumPC @@ -146,8 +146,8 @@ MossdeepCity_StevensHouse_EventScript_Letter:: @ Unused, leftover from RS MossdeepCity_StevensHouse_EventScript_DiveItemBall:: - finditem ITEM_HM08 - setflag FLAG_RECEIVED_HM08 + finditem ITEM_HM_DIVE + setflag FLAG_RECEIVED_HM_DIVE end MossdeepCity_StevensHouse_Text_YouveEarnedHMDive: diff --git a/data/maps/MtPyre_6F/map.json b/data/maps/MtPyre_6F/map.json index 9da33f4bc6..06bd940eac 100644 --- a/data/maps/MtPyre_6F/map.json +++ b/data/maps/MtPyre_6F/map.json @@ -37,8 +37,8 @@ "movement_range_y": 1, "trainer_type": "TRAINER_TYPE_NONE", "trainer_sight_or_berry_tree_id": "0", - "script": "MtPyre_6F_EventScript_ItemTM30", - "flag": "FLAG_ITEM_MT_PYRE_6F_TM30" + "script": "MtPyre_6F_EventScript_ItemTMShadowBall", + "flag": "FLAG_ITEM_MT_PYRE_6F_TM_SHADOW_BALL" }, { "graphics_id": "OBJ_EVENT_GFX_PSYCHIC_M", diff --git a/data/maps/MtPyre_Exterior/map.json b/data/maps/MtPyre_Exterior/map.json index 417a38d977..a65f1259d4 100644 --- a/data/maps/MtPyre_Exterior/map.json +++ b/data/maps/MtPyre_Exterior/map.json @@ -37,8 +37,8 @@ "movement_range_y": 0, "trainer_type": "TRAINER_TYPE_NONE", "trainer_sight_or_berry_tree_id": "0", - "script": "MtPyre_Exterior_EventScript_ItemTM48", - "flag": "FLAG_ITEM_MT_PYRE_EXTERIOR_TM48" + "script": "MtPyre_Exterior_EventScript_ItemTMSkillSwap", + "flag": "FLAG_ITEM_MT_PYRE_EXTERIOR_TM_SKILL_SWAP" } ], "warp_events": [ diff --git a/data/maps/PacifidlogTown_House2/scripts.inc b/data/maps/PacifidlogTown_House2/scripts.inc index 175b477e7a..3acb7583e8 100644 --- a/data/maps/PacifidlogTown_House2/scripts.inc +++ b/data/maps/PacifidlogTown_House2/scripts.inc @@ -38,7 +38,7 @@ PacifidlogTown_House2_EventScript_ClearReceivedFanClubTM:: PacifidlogTown_House2_EventScript_GiveReturn:: msgbox PacifidlogTown_House2_Text_AdoringPokemonTakeThis, MSGBOX_DEFAULT - giveitem ITEM_TM27 + giveitem ITEM_TM_RETURN goto_if_eq VAR_RESULT, FALSE, Common_EventScript_ShowBagIsFull setflag FLAG_RECEIVED_FANCLUB_TM_THIS_WEEK special SetPacifidlogTMReceivedDay @@ -53,7 +53,7 @@ PacifidlogTown_House2_EventScript_PutInEffort:: PacifidlogTown_House2_EventScript_GiveFrustration:: msgbox PacifidlogTown_House2_Text_ViciousPokemonTakeThis, MSGBOX_DEFAULT - giveitem ITEM_TM21 + giveitem ITEM_TM_FRUSTRATION goto_if_eq VAR_RESULT, FALSE, Common_EventScript_ShowBagIsFull setflag FLAG_RECEIVED_FANCLUB_TM_THIS_WEEK special SetPacifidlogTMReceivedDay diff --git a/data/maps/PetalburgCity_Gym/scripts.inc b/data/maps/PetalburgCity_Gym/scripts.inc index 836da26bfb..8b107c68ec 100644 --- a/data/maps/PetalburgCity_Gym/scripts.inc +++ b/data/maps/PetalburgCity_Gym/scripts.inc @@ -332,7 +332,7 @@ PetalburgCity_Gym_EventScript_NormanFaceDoorEast:: PetalburgCity_Gym_EventScript_NormanPostBattle:: call PetalburgCity_Gym_EventScript_ShouldGiveEnigmaBerry goto_if_eq VAR_RESULT, TRUE, PetalburgCity_Gym_EventScript_GiveEnigmaBerry - goto_if_unset FLAG_RECEIVED_TM42, PetalburgCity_Gym_EventScript_GiveFacade2 + goto_if_unset FLAG_RECEIVED_TM_FACADE, PetalburgCity_Gym_EventScript_GiveFacade2 goto_if_set FLAG_SYS_GAME_CLEAR, PetalburgCity_Gym_EventScript_NoAmountOfTrainingIsEnough msgbox PetalburgCity_Gym_Text_DadGoingToKeepTraining, MSGBOX_DEFAULT release @@ -405,9 +405,9 @@ PetalburgCity_Gym_EventScript_NormanBattle:: end PetalburgCity_Gym_EventScript_GiveFacade:: - giveitem ITEM_TM42 + giveitem ITEM_TM_FACADE goto_if_eq VAR_RESULT, FALSE, Common_EventScript_BagIsFull - setflag FLAG_RECEIVED_TM42 + setflag FLAG_RECEIVED_TM_FACADE msgbox PetalburgCity_Gym_Text_ExplainFacade, MSGBOX_DEFAULT return diff --git a/data/maps/PetalburgCity_WallysHouse/scripts.inc b/data/maps/PetalburgCity_WallysHouse/scripts.inc index 3a06208a78..f7e2e97828 100644 --- a/data/maps/PetalburgCity_WallysHouse/scripts.inc +++ b/data/maps/PetalburgCity_WallysHouse/scripts.inc @@ -15,14 +15,14 @@ PetalburgCity_WallysHouse_EventScript_PlayerWallysDadFaceEachOther:: end PetalburgCity_WallysHouse_OnFrame: - map_script_2 VAR_PETALBURG_CITY_STATE, 4, PetalburgCity_WallysHouse_EventScript_GiveHM03Surf + map_script_2 VAR_PETALBURG_CITY_STATE, 4, PetalburgCity_WallysHouse_EventScript_GiveHMSurf .2byte 0 -PetalburgCity_WallysHouse_EventScript_GiveHM03Surf:: +PetalburgCity_WallysHouse_EventScript_GiveHMSurf:: lockall msgbox PetalburgCity_WallysHouse_Text_PleaseExcuseUs, MSGBOX_DEFAULT - giveitem ITEM_HM03 - setflag FLAG_RECEIVED_HM03 + giveitem ITEM_HM_SURF + setflag FLAG_RECEIVED_HM_SURF msgbox PetalburgCity_WallysHouse_Text_SurfGoAllSortsOfPlaces, MSGBOX_DEFAULT setvar VAR_PETALBURG_CITY_STATE, 5 releaseall @@ -32,14 +32,14 @@ PetalburgCity_WallysHouse_EventScript_WallysDad:: lock faceplayer goto_if_set FLAG_DEFEATED_WALLY_VICTORY_ROAD, PetalburgCity_WallysHouse_EventScript_DefeatedWallyInVictoryRoad - goto_if_set FLAG_RECEIVED_HM03, PetalburgCity_WallysHouse_EventScript_ReceievedHM03Surf + goto_if_set FLAG_RECEIVED_HM_SURF, PetalburgCity_WallysHouse_EventScript_ReceievedHMSurf goto_if_set FLAG_THANKED_FOR_PLAYING_WITH_WALLY, PetalburgCity_WallysHouse_EventScript_PlayedWithWally msgbox PetalburgCity_WallysHouse_Text_ThanksForPlayingWithWally, MSGBOX_DEFAULT setflag FLAG_THANKED_FOR_PLAYING_WITH_WALLY release end -PetalburgCity_WallysHouse_EventScript_ReceievedHM03Surf:: +PetalburgCity_WallysHouse_EventScript_ReceievedHMSurf:: msgbox PetalburgCity_WallysHouse_Text_WallyIsComingHomeSoon, MSGBOX_DEFAULT release end @@ -57,12 +57,12 @@ PetalburgCity_WallysHouse_EventScript_PlayedWithWally:: PetalburgCity_WallysHouse_EventScript_WallysMom:: lock faceplayer - goto_if_set FLAG_RECEIVED_HM03, PetalburgCity_WallysHouse_EventScript_ReceivedHM03Surf + goto_if_set FLAG_RECEIVED_HM_SURF, PetalburgCity_WallysHouse_EventScript_ReceivedHMSurf msgbox PetalburgCity_WallysHouse_Text_WallyWasReallyHappy, MSGBOX_DEFAULT release end -PetalburgCity_WallysHouse_EventScript_ReceivedHM03Surf:: +PetalburgCity_WallysHouse_EventScript_ReceivedHMSurf:: msgbox PetalburgCity_WallysHouse_Text_WallyLeftWithoutTelling, MSGBOX_DEFAULT release end diff --git a/data/maps/Route104/scripts.inc b/data/maps/Route104/scripts.inc index 68aeb0a212..dfb7675e90 100644 --- a/data/maps/Route104/scripts.inc +++ b/data/maps/Route104/scripts.inc @@ -329,11 +329,11 @@ Route104_EventScript_Woman:: Route104_EventScript_Boy2:: lock faceplayer - goto_if_set FLAG_RECEIVED_TM09, Route104_EventScript_ReceivedBulletSeed + goto_if_set FLAG_RECEIVED_TM_BULLET_SEED, Route104_EventScript_ReceivedBulletSeed msgbox Route104_Text_LikeFillingMouthWithSeedsTakeThis, MSGBOX_DEFAULT - giveitem ITEM_TM09 + giveitem ITEM_TM_BULLET_SEED goto_if_eq VAR_RESULT, FALSE, Common_EventScript_ShowBagIsFull - setflag FLAG_RECEIVED_TM09 + setflag FLAG_RECEIVED_TM_BULLET_SEED release end diff --git a/data/maps/Route110_TrickHouseEnd/scripts.inc b/data/maps/Route110_TrickHouseEnd/scripts.inc index be8f75e961..9f31d89e4c 100644 --- a/data/maps/Route110_TrickHouseEnd/scripts.inc +++ b/data/maps/Route110_TrickHouseEnd/scripts.inc @@ -109,7 +109,7 @@ Route110_TrickHouseEnd_EventScript_CompletedPuzzle5:: msgbox Route110_TrickHouseEnd_Text_AllNightToMakeMechadolls, MSGBOX_DEFAULT msgbox Route110_TrickHouseEnd_Text_YouHaveEarnedThisReward, MSGBOX_DEFAULT setvar VAR_TRICK_HOUSE_PRIZE_PICKUP, 0 - giveitem ITEM_TM12 + giveitem ITEM_TM_TAUNT call_if_eq VAR_RESULT, FALSE, Route110_TrickHouseEnd_EventScript_BagFull msgbox Route110_TrickHouseEnd_Text_MakeNewTricksToStumpYou, MSGBOX_DEFAULT closemessage diff --git a/data/maps/Route110_TrickHouseEntrance/scripts.inc b/data/maps/Route110_TrickHouseEntrance/scripts.inc index 52327553e3..51135ac339 100644 --- a/data/maps/Route110_TrickHouseEntrance/scripts.inc +++ b/data/maps/Route110_TrickHouseEntrance/scripts.inc @@ -370,7 +370,7 @@ Route110_TrickHouseEntrance_EventScript_GivePuzzle4Reward:: end Route110_TrickHouseEntrance_EventScript_GivePuzzle5Reward:: - giveitem ITEM_TM12 + giveitem ITEM_TM_TAUNT goto_if_eq VAR_RESULT, TRUE, Route110_TrickHouseEntrance_EventScript_GotReward call_if_eq VAR_RESULT, FALSE, Common_EventScript_BagIsFull msgbox Route110_TrickHouseEntrance_Text_DidYouNotComeToClaimReward, MSGBOX_DEFAULT diff --git a/data/maps/Route110_TrickHousePuzzle6/scripts.inc b/data/maps/Route110_TrickHousePuzzle6/scripts.inc index e442d094d5..3a6d221e43 100644 --- a/data/maps/Route110_TrickHousePuzzle6/scripts.inc +++ b/data/maps/Route110_TrickHousePuzzle6/scripts.inc @@ -11,6 +11,7 @@ Route110_TrickHousePuzzle6_OnWarp: map_script_2 VAR_TEMP_0, VAR_TEMP_0, Route110_TrickHousePuzzle6_EventScript_InitPuzzle .2byte 0 +@ NOTE: This rotating gate puzzle makes use of VAR_TEMP_0 - VAR_TEMP_5 Route110_TrickHousePuzzle6_EventScript_InitPuzzle:: special RotatingGate_InitPuzzleAndGraphics end diff --git a/data/maps/Route111/map.json b/data/maps/Route111/map.json index bc476ebaaf..6efa1770e2 100644 --- a/data/maps/Route111/map.json +++ b/data/maps/Route111/map.json @@ -261,8 +261,8 @@ "movement_range_y": 0, "trainer_type": "TRAINER_TYPE_NONE", "trainer_sight_or_berry_tree_id": "0", - "script": "Route111_EventScript_ItemTM37", - "flag": "FLAG_ITEM_ROUTE_111_TM37" + "script": "Route111_EventScript_ItemTMSandstorm", + "flag": "FLAG_ITEM_ROUTE_111_TM_SANDSTORM" }, { "graphics_id": "OBJ_EVENT_GFX_BERRY_TREE", diff --git a/data/maps/Route113/map.json b/data/maps/Route113/map.json index 4c45d904cb..2e5890d656 100644 --- a/data/maps/Route113/map.json +++ b/data/maps/Route113/map.json @@ -450,8 +450,8 @@ "x": 22, "y": 5, "elevation": 3, - "item": "ITEM_TM32", - "flag": "FLAG_HIDDEN_ITEM_ROUTE_113_TM32" + "item": "ITEM_TM_DOUBLE_TEAM", + "flag": "FLAG_HIDDEN_ITEM_ROUTE_113_TM_DOUBLE_TEAM" }, { "type": "hidden_item", diff --git a/data/maps/Route114/scripts.inc b/data/maps/Route114/scripts.inc index abf70ea081..db46f7bb80 100644 --- a/data/maps/Route114/scripts.inc +++ b/data/maps/Route114/scripts.inc @@ -43,11 +43,11 @@ Route114_EventScript_ReceivedBerry:: Route114_EventScript_RoarGentleman:: lock faceplayer - goto_if_set FLAG_RECEIVED_TM05, Route114_EventScript_ReceivedRoar + goto_if_set FLAG_RECEIVED_TM_ROAR, Route114_EventScript_ReceivedRoar msgbox Route114_Text_AllMyMonDoesIsRoarTakeThis, MSGBOX_DEFAULT - giveitem ITEM_TM05 + giveitem ITEM_TM_ROAR goto_if_eq VAR_RESULT, FALSE, Common_EventScript_ShowBagIsFull - setflag FLAG_RECEIVED_TM05 + setflag FLAG_RECEIVED_TM_ROAR msgbox Route114_Text_ExplainRoar, MSGBOX_DEFAULT release end diff --git a/data/maps/Route114_FossilManiacsHouse/scripts.inc b/data/maps/Route114_FossilManiacsHouse/scripts.inc index ba3c0c60e5..2586ea1076 100644 --- a/data/maps/Route114_FossilManiacsHouse/scripts.inc +++ b/data/maps/Route114_FossilManiacsHouse/scripts.inc @@ -9,11 +9,11 @@ Route114_FossilManiacsHouse_OnTransition: Route114_FossilManiacsHouse_EventScript_FossilManiacsBrother:: lock faceplayer - goto_if_set FLAG_RECEIVED_TM28, Route114_FossilManiacsHouse_EventScript_ReceivedDig + goto_if_set FLAG_RECEIVED_TM_DIG, Route114_FossilManiacsHouse_EventScript_ReceivedDig msgbox Route114_FossilManiacsHouse_Text_HaveThisToDigLikeMyBrother, MSGBOX_DEFAULT - giveitem ITEM_TM28 + giveitem ITEM_TM_DIG goto_if_eq VAR_RESULT, FALSE, Common_EventScript_ShowBagIsFull - setflag FLAG_RECEIVED_TM28 + setflag FLAG_RECEIVED_TM_DIG release end diff --git a/data/maps/Route115/map.json b/data/maps/Route115/map.json index a4143fad30..ee0d71349d 100644 --- a/data/maps/Route115/map.json +++ b/data/maps/Route115/map.json @@ -165,8 +165,8 @@ "movement_range_y": 0, "trainer_type": "TRAINER_TYPE_NONE", "trainer_sight_or_berry_tree_id": "0", - "script": "Route115_EventScript_ItemTM01", - "flag": "FLAG_ITEM_ROUTE_115_TM01" + "script": "Route115_EventScript_ItemTMFocusPunch", + "flag": "FLAG_ITEM_ROUTE_115_TM_FOCUS_PUNCH" }, { "graphics_id": "OBJ_EVENT_GFX_ITEM_BALL", diff --git a/data/maps/Route119/scripts.inc b/data/maps/Route119/scripts.inc index 94094206c7..6c9767dcb6 100644 --- a/data/maps/Route119/scripts.inc +++ b/data/maps/Route119/scripts.inc @@ -132,8 +132,8 @@ Route119_EventScript_DefeatedBrendan:: end Route119_EventScript_GiveFlyHM:: - giveitem ITEM_HM02 - setflag FLAG_RECEIVED_HM02 + giveitem ITEM_HM_FLY + setflag FLAG_RECEIVED_HM_FLY return Route119_EventScript_RivalExitScottArrive:: diff --git a/data/maps/Route119_WeatherInstitute_2F/scripts.inc b/data/maps/Route119_WeatherInstitute_2F/scripts.inc index 2060cb03c9..e5df03d4a1 100644 --- a/data/maps/Route119_WeatherInstitute_2F/scripts.inc +++ b/data/maps/Route119_WeatherInstitute_2F/scripts.inc @@ -88,7 +88,7 @@ Route119_WeatherInstitute_2F_EventScript_ShellyDefeated:: Route119_WeatherInstitute_2F_EventScript_ReceiveCastform:: msgbox Route119_WeatherInstitute_2F_Text_ThanksPleaseTakePokemon, MSGBOX_DEFAULT - setvar VAR_TEMP_1, SPECIES_CASTFORM + setvar VAR_TEMP_TRANSFERRED_SPECIES, SPECIES_CASTFORM givemon SPECIES_CASTFORM, 25, ITEM_MYSTIC_WATER goto_if_eq VAR_RESULT, MON_GIVEN_TO_PARTY, Route119_WeatherInstitute_2F_EventScript_ReceiveCastformParty goto_if_eq VAR_RESULT, MON_GIVEN_TO_PC, Route119_WeatherInstitute_2F_EventScript_ReceiveCastformPC diff --git a/data/maps/Route123/scripts.inc b/data/maps/Route123/scripts.inc index fe63661261..92cfa62768 100644 --- a/data/maps/Route123/scripts.inc +++ b/data/maps/Route123/scripts.inc @@ -9,14 +9,14 @@ Route123_OnTransition: Route123_EventScript_GigaDrainGirl:: lock faceplayer - goto_if_set FLAG_RECEIVED_TM19, Route123_EventScript_ReceivedGigaDrain + goto_if_set FLAG_RECEIVED_TM_GIGA_DRAIN, Route123_EventScript_ReceivedGigaDrain msgbox Route123_Text_LoveGrassMonsHaveAny, MSGBOX_DEFAULT special IsGrassTypeInParty goto_if_eq VAR_RESULT, FALSE, Route123_EventScript_NoGrassMons msgbox Route123_Text_YouLikeGrassMonsTooHaveThis, MSGBOX_DEFAULT - giveitem ITEM_TM19 + giveitem ITEM_TM_GIGA_DRAIN goto_if_eq VAR_RESULT, FALSE, Common_EventScript_ShowBagIsFull - setflag FLAG_RECEIVED_TM19 + setflag FLAG_RECEIVED_TM_GIGA_DRAIN msgbox Route123_Text_CheckTreesWithMyGrassMon, MSGBOX_DEFAULT release end diff --git a/data/maps/Route130/map.json b/data/maps/Route130/map.json index 7b37a10edd..bb79a2bb4a 100644 --- a/data/maps/Route130/map.json +++ b/data/maps/Route130/map.json @@ -62,7 +62,7 @@ "trainer_type": "TRAINER_TYPE_NONE", "trainer_sight_or_berry_tree_id": "BERRY_TREE_ROUTE_130_LIECHI", "script": "BerryTreeScript", - "flag": "FLAG_TEMP_11" + "flag": "FLAG_TEMP_HIDE_MIRAGE_ISLAND_BERRY_TREE" }, { "graphics_id": "OBJ_EVENT_GFX_SWIMMER_M", diff --git a/data/maps/Route130/scripts.inc b/data/maps/Route130/scripts.inc index 7e0ecc8bd1..b5b9227e84 100644 --- a/data/maps/Route130/scripts.inc +++ b/data/maps/Route130/scripts.inc @@ -6,7 +6,8 @@ Route130_OnTransition: call_if_ge VAR_SOOTOPOLIS_CITY_STATE, 4, Route130_EventScript_CheckSetAbnormalWeather specialvar VAR_RESULT, IsMirageIslandPresent goto_if_eq VAR_RESULT, TRUE, Route130_EventScript_SetMirageIslandLayout - setflag FLAG_TEMP_11 +@ Mirage Island isn't currently visible, hide any objects on the island. Only the first flag is actually associated with anything. + setflag FLAG_TEMP_HIDE_MIRAGE_ISLAND_BERRY_TREE setflag FLAG_TEMP_12 setflag FLAG_TEMP_13 setflag FLAG_TEMP_14 diff --git a/data/maps/RustboroCity_CuttersHouse/scripts.inc b/data/maps/RustboroCity_CuttersHouse/scripts.inc index f1d6030761..11cd0f608f 100644 --- a/data/maps/RustboroCity_CuttersHouse/scripts.inc +++ b/data/maps/RustboroCity_CuttersHouse/scripts.inc @@ -4,10 +4,10 @@ RustboroCity_CuttersHouse_MapScripts:: RustboroCity_CuttersHouse_EventScript_Cutter:: lock faceplayer - goto_if_set FLAG_RECEIVED_HM01, RustboroCity_CuttersHouse_EventScript_ExplainCut + goto_if_set FLAG_RECEIVED_HM_CUT, RustboroCity_CuttersHouse_EventScript_ExplainCut msgbox RustboroCity_CuttersHouse_Text_YouCanPutThisHMToGoodUse, MSGBOX_DEFAULT - giveitem ITEM_HM01 - setflag FLAG_RECEIVED_HM01 + giveitem ITEM_HM_CUT + setflag FLAG_RECEIVED_HM_CUT msgbox RustboroCity_CuttersHouse_Text_ExplainCut, MSGBOX_DEFAULT release end diff --git a/data/maps/RustboroCity_DevonCorp_2F/scripts.inc b/data/maps/RustboroCity_DevonCorp_2F/scripts.inc index 747070645c..ba3a259ec3 100644 --- a/data/maps/RustboroCity_DevonCorp_2F/scripts.inc +++ b/data/maps/RustboroCity_DevonCorp_2F/scripts.inc @@ -144,7 +144,7 @@ RustboroCity_DevonCorp_2F_EventScript_AnorithReady:: end RustboroCity_DevonCorp_2F_EventScript_ReceiveLileep:: - setvar VAR_TEMP_1, SPECIES_LILEEP + setvar VAR_TEMP_TRANSFERRED_SPECIES, SPECIES_LILEEP givemon SPECIES_LILEEP, 20 goto_if_eq VAR_RESULT, MON_GIVEN_TO_PARTY, RustboroCity_DevonCorp_2F_EventScript_ReceiveLileepParty goto_if_eq VAR_RESULT, MON_GIVEN_TO_PC, RustboroCity_DevonCorp_2F_EventScript_ReceiveLileepPC @@ -189,7 +189,7 @@ RustboroCity_DevonCorp_2F_EventScript_FinishReceivingLileep:: end RustboroCity_DevonCorp_2F_EventScript_ReceiveAnorith:: - setvar VAR_TEMP_1, SPECIES_ANORITH + setvar VAR_TEMP_TRANSFERRED_SPECIES, SPECIES_ANORITH givemon SPECIES_ANORITH, 20 goto_if_eq VAR_RESULT, MON_GIVEN_TO_PARTY, RustboroCity_DevonCorp_2F_EventScript_ReceiveAnorithParty goto_if_eq VAR_RESULT, MON_GIVEN_TO_PC, RustboroCity_DevonCorp_2F_EventScript_ReceiveAnorithPC diff --git a/data/maps/RustboroCity_Gym/scripts.inc b/data/maps/RustboroCity_Gym/scripts.inc index e1596a9730..53ed0b20be 100644 --- a/data/maps/RustboroCity_Gym/scripts.inc +++ b/data/maps/RustboroCity_Gym/scripts.inc @@ -5,7 +5,7 @@ RustboroCity_Gym_EventScript_Roxanne:: trainerbattle_single TRAINER_ROXANNE_1, RustboroCity_Gym_Text_RoxanneIntro, RustboroCity_Gym_Text_RoxanneDefeat, RustboroCity_Gym_EventScript_RoxanneDefeated, NO_MUSIC specialvar VAR_RESULT, ShouldTryRematchBattle goto_if_eq VAR_RESULT, TRUE, RustboroCity_Gym_EventScript_RoxanneRematch - goto_if_unset FLAG_RECEIVED_TM39, RustboroCity_Gym_EventScript_GiveRockTomb + goto_if_unset FLAG_RECEIVED_TM_ROCK_TOMB, RustboroCity_Gym_EventScript_GiveRockTomb msgbox RustboroCity_Gym_Text_RoxannePostBattle, MSGBOX_DEFAULT release end @@ -26,9 +26,9 @@ RustboroCity_Gym_EventScript_RoxanneDefeated:: end RustboroCity_Gym_EventScript_GiveRockTomb:: - giveitem ITEM_TM39 + giveitem ITEM_TM_ROCK_TOMB goto_if_eq VAR_RESULT, FALSE, Common_EventScript_ShowBagIsFull - setflag FLAG_RECEIVED_TM39 + setflag FLAG_RECEIVED_TM_ROCK_TOMB msgbox RustboroCity_Gym_Text_ExplainRockTomb, MSGBOX_DEFAULT release end diff --git a/data/maps/RusturfTunnel/scripts.inc b/data/maps/RusturfTunnel/scripts.inc index 86c5e0f6ad..f0dd37805f 100644 --- a/data/maps/RusturfTunnel/scripts.inc +++ b/data/maps/RusturfTunnel/scripts.inc @@ -62,8 +62,8 @@ RusturfTunnel_EventScript_ClearTunnelScene:: msgbox RusturfTunnel_Text_YouShatteredBoulderTakeHM, MSGBOX_DEFAULT call_if_eq VAR_TEMP_1, 2, RusturfTunnel_EventScript_WandasBoyfriendApproachPlayer call_if_eq VAR_TEMP_1, 3, RusturfTunnel_EventScript_WandasBoyfriendApproachPlayer - giveitem ITEM_HM04 - setflag FLAG_RECEIVED_HM04 + giveitem ITEM_HM_STRENGTH + setflag FLAG_RECEIVED_HM_STRENGTH msgbox RusturfTunnel_Text_ExplainStrength, MSGBOX_DEFAULT closemessage call_if_eq VAR_TEMP_1, 1, RusturfTunnel_EventScript_BoyfriendApproachWanda1 diff --git a/data/maps/SSTidalCorridor/scripts.inc b/data/maps/SSTidalCorridor/scripts.inc index b39b9a4336..0d425889a7 100644 --- a/data/maps/SSTidalCorridor/scripts.inc +++ b/data/maps/SSTidalCorridor/scripts.inc @@ -124,7 +124,7 @@ SSTidalCorridor_EventScript_ExitSailor:: SSTidalCorridor_EventScript_ExitLilycove:: setrespawn HEAL_LOCATION_LILYCOVE_CITY msgbox SSTidalCorridor_Text_WeveArrived, MSGBOX_DEFAULT - call_if_set FLAG_RECEIVED_TM49, SSTidalCorridor_EventScript_HideSnatchGiver + call_if_set FLAG_RECEIVED_TM_SNATCH, SSTidalCorridor_EventScript_HideSnatchGiver warp MAP_LILYCOVE_CITY_HARBOR, 8, 11 waitstate release @@ -133,7 +133,7 @@ SSTidalCorridor_EventScript_ExitLilycove:: SSTidalCorridor_EventScript_ExitSlateport:: setrespawn HEAL_LOCATION_SLATEPORT_CITY msgbox SSTidalCorridor_Text_WeveArrived, MSGBOX_DEFAULT - call_if_set FLAG_RECEIVED_TM49, SSTidalCorridor_EventScript_HideSnatchGiver + call_if_set FLAG_RECEIVED_TM_SNATCH, SSTidalCorridor_EventScript_HideSnatchGiver warp MAP_SLATEPORT_CITY_HARBOR, 8, 11 waitstate release diff --git a/data/maps/SSTidalRooms/scripts.inc b/data/maps/SSTidalRooms/scripts.inc index c3aa8ff8ab..53596ba838 100644 --- a/data/maps/SSTidalRooms/scripts.inc +++ b/data/maps/SSTidalRooms/scripts.inc @@ -4,11 +4,11 @@ SSTidalRooms_MapScripts:: SSTidalRooms_EventScript_SnatchGiver:: lock faceplayer - goto_if_set FLAG_RECEIVED_TM49, SSTidalRooms_EventScript_ExplainSnatch + goto_if_set FLAG_RECEIVED_TM_SNATCH, SSTidalRooms_EventScript_ExplainSnatch msgbox SSTidalRooms_Text_NotSuspiciousTakeThis, MSGBOX_DEFAULT - giveitem ITEM_TM49 + giveitem ITEM_TM_SNATCH goto_if_eq VAR_RESULT, FALSE, Common_EventScript_ShowBagIsFull - setflag FLAG_RECEIVED_TM49 + setflag FLAG_RECEIVED_TM_SNATCH msgbox SSTidalRooms_Text_ExplainSnatch, MSGBOX_DEFAULT release end diff --git a/data/maps/SafariZone_Northwest/map.json b/data/maps/SafariZone_Northwest/map.json index 93f3d2a79c..f30ef030a0 100644 --- a/data/maps/SafariZone_Northwest/map.json +++ b/data/maps/SafariZone_Northwest/map.json @@ -48,8 +48,8 @@ "movement_range_y": 1, "trainer_type": "TRAINER_TYPE_NONE", "trainer_sight_or_berry_tree_id": "0", - "script": "SafariZone_Northwest_EventScript_ItemTM22", - "flag": "FLAG_ITEM_SAFARI_ZONE_NORTH_WEST_TM22" + "script": "SafariZone_Northwest_EventScript_ItemTMSolarBeam", + "flag": "FLAG_ITEM_SAFARI_ZONE_NORTH_WEST_TM_SOLAR_BEAM" } ], "warp_events": [], diff --git a/data/maps/ScorchedSlab/map.json b/data/maps/ScorchedSlab/map.json index ca367b9215..5e0380b4e8 100644 --- a/data/maps/ScorchedSlab/map.json +++ b/data/maps/ScorchedSlab/map.json @@ -24,8 +24,8 @@ "movement_range_y": 0, "trainer_type": "TRAINER_TYPE_NONE", "trainer_sight_or_berry_tree_id": "0", - "script": "ScorchedSlab_EventScript_ItemTM11", - "flag": "FLAG_ITEM_SCORCHED_SLAB_TM11" + "script": "ScorchedSlab_EventScript_ItemTMSunnyDay", + "flag": "FLAG_ITEM_SCORCHED_SLAB_TM_SUNNY_DAY" } ], "warp_events": [ diff --git a/data/maps/SeafloorCavern_Room9/map.json b/data/maps/SeafloorCavern_Room9/map.json index f191941a2b..04fb621df1 100644 --- a/data/maps/SeafloorCavern_Room9/map.json +++ b/data/maps/SeafloorCavern_Room9/map.json @@ -89,8 +89,8 @@ "movement_range_y": 1, "trainer_type": "TRAINER_TYPE_NONE", "trainer_sight_or_berry_tree_id": "0", - "script": "SeafloorCavern_Room9_EventScript_ItemTM26", - "flag": "FLAG_ITEM_SEAFLOOR_CAVERN_ROOM_9_TM26" + "script": "SeafloorCavern_Room9_EventScript_ItemTMEarthquake", + "flag": "FLAG_ITEM_SEAFLOOR_CAVERN_ROOM_9_TM_EARTHQUAKE" }, { "graphics_id": "OBJ_EVENT_GFX_KYOGRE_ASLEEP", diff --git a/data/maps/ShoalCave_LowTideEntranceRoom/scripts.inc b/data/maps/ShoalCave_LowTideEntranceRoom/scripts.inc index 905a9a77a7..80368b1488 100644 --- a/data/maps/ShoalCave_LowTideEntranceRoom/scripts.inc +++ b/data/maps/ShoalCave_LowTideEntranceRoom/scripts.inc @@ -33,9 +33,9 @@ ShoalCave_LowTideEntranceRoom_EventScript_ShellBellExpert:: removeitem ITEM_SHOAL_SALT, 4 removeitem ITEM_SHOAL_SHELL, 4 giveitem ITEM_SHELL_BELL - goto_if_eq VAR_RESULT, FALSE, Common_EventScript_ShowBagIsFull + goto_if_eq VAR_RESULT, FALSE, Common_EventScript_ShowBagIsFull @ Never FALSE, we already made sure there will be room in the bag. msgbox ShoalCave_LowTideEntranceRoom_Text_ExplainShellBell, MSGBOX_DEFAULT - setflag FLAG_TEMP_2 + setflag FLAG_TEMP_2 @ Not read. Perhaps meant to stop him from re-explaining the Shell Bell if multiple are received in one sitting. release end diff --git a/data/maps/ShoalCave_LowTideIceRoom/map.json b/data/maps/ShoalCave_LowTideIceRoom/map.json index f87f88227e..dffa6d0de8 100644 --- a/data/maps/ShoalCave_LowTideIceRoom/map.json +++ b/data/maps/ShoalCave_LowTideIceRoom/map.json @@ -24,8 +24,8 @@ "movement_range_y": 1, "trainer_type": "TRAINER_TYPE_NONE", "trainer_sight_or_berry_tree_id": "0", - "script": "ShoalCave_LowTideIceRoom_EventScript_ItemTM07", - "flag": "FLAG_ITEM_SHOAL_CAVE_ICE_ROOM_TM07" + "script": "ShoalCave_LowTideIceRoom_EventScript_ItemTMHail", + "flag": "FLAG_ITEM_SHOAL_CAVE_ICE_ROOM_TM_HAIL" }, { "graphics_id": "OBJ_EVENT_GFX_ITEM_BALL", diff --git a/data/maps/SlateportCity/scripts.inc b/data/maps/SlateportCity/scripts.inc index 653f405c45..ae3910750e 100644 --- a/data/maps/SlateportCity/scripts.inc +++ b/data/maps/SlateportCity/scripts.inc @@ -566,8 +566,8 @@ SlateportCity_EventScript_PowerTMClerk:: .align 2 SlateportCity_Pokemart_PowerTMs: - .2byte ITEM_TM10 @ Hidden Power - .2byte ITEM_TM43 @ Secret Power + .2byte ITEM_TM_HIDDEN_POWER + .2byte ITEM_TM_SECRET_POWER .2byte ITEM_NONE release end diff --git a/data/maps/SlateportCity_BattleTentLobby/scripts.inc b/data/maps/SlateportCity_BattleTentLobby/scripts.inc index 0d3fae875f..88dd323da0 100644 --- a/data/maps/SlateportCity_BattleTentLobby/scripts.inc +++ b/data/maps/SlateportCity_BattleTentLobby/scripts.inc @@ -15,11 +15,11 @@ SlateportCity_BattleTentLobby_EventScript_TurnPlayerNorth:: end SlateportCity_BattleTentLobby_OnFrame: - map_script_2 VAR_TEMP_0, 0, SlateportCity_BattleTentLobby_EventScript_GetChallengeStatus - map_script_2 VAR_TEMP_0, CHALLENGE_STATUS_SAVING, SlateportCity_BattleTentLobby_EventScript_QuitWithoutSaving - map_script_2 VAR_TEMP_0, CHALLENGE_STATUS_PAUSED, SlateportCity_BattleTentLobby_EventScript_ResumeChallenge - map_script_2 VAR_TEMP_0, CHALLENGE_STATUS_WON, SlateportCity_BattleTentLobby_EventScript_WonChallenge - map_script_2 VAR_TEMP_0, CHALLENGE_STATUS_LOST, SlateportCity_BattleTentLobby_EventScript_LostChallenge + map_script_2 VAR_TEMP_CHALLENGE_STATUS, 0, SlateportCity_BattleTentLobby_EventScript_GetChallengeStatus + map_script_2 VAR_TEMP_CHALLENGE_STATUS, CHALLENGE_STATUS_SAVING, SlateportCity_BattleTentLobby_EventScript_QuitWithoutSaving + map_script_2 VAR_TEMP_CHALLENGE_STATUS, CHALLENGE_STATUS_PAUSED, SlateportCity_BattleTentLobby_EventScript_ResumeChallenge + map_script_2 VAR_TEMP_CHALLENGE_STATUS, CHALLENGE_STATUS_WON, SlateportCity_BattleTentLobby_EventScript_WonChallenge + map_script_2 VAR_TEMP_CHALLENGE_STATUS, CHALLENGE_STATUS_LOST, SlateportCity_BattleTentLobby_EventScript_LostChallenge .2byte 0 SlateportCity_BattleTentLobby_EventScript_GetChallengeStatus:: @@ -31,7 +31,7 @@ SlateportCity_BattleTentLobby_EventScript_QuitWithoutSaving:: msgbox SlateportCity_BattleTentLobby_Text_DidntSaveBeforeQuitting, MSGBOX_DEFAULT closemessage frontier_set FRONTIER_DATA_CHALLENGE_STATUS, 0 - setvar VAR_TEMP_0, 255 + setvar VAR_TEMP_CHALLENGE_STATUS, 255 frontier_set FRONTIER_DATA_LVL_MODE, FRONTIER_LVL_50 releaseall end @@ -73,7 +73,7 @@ SlateportCity_BattleTentLobby_EventScript_LostChallenge:: SlateportCity_BattleTentLobby_EventScript_EndGivePrize:: msgbox SlateportCity_BattleTentLobby_Text_LookForwardToNextVisit, MSGBOX_DEFAULT closemessage - setvar VAR_TEMP_0, 255 + setvar VAR_TEMP_CHALLENGE_STATUS, 255 releaseall end @@ -85,7 +85,7 @@ SlateportCity_BattleTentLobby_EventScript_ResumeChallenge:: playse SE_SAVE waitse frontier_set FRONTIER_DATA_PAUSED, FALSE - setvar VAR_TEMP_0, 255 + setvar VAR_TEMP_CHALLENGE_STATUS, 255 setvar VAR_0x8006, 2 goto SlateportCity_BattleTentLobby_EventScript_EnterChallenge @@ -117,7 +117,7 @@ SlateportCity_BattleTentLobby_EventScript_TryEnterChallenge:: case MULTI_B_PRESSED, SlateportCity_BattleTentLobby_EventScript_LoadPartyCancelChallenge SlateportCity_BattleTentLobby_EventScript_SaveBeforeChallenge:: - setvar VAR_TEMP_0, 0 + setvar VAR_TEMP_CHALLENGE_STATUS, 0 frontier_set FRONTIER_DATA_SELECTED_MON_ORDER slateporttent_init frontier_set FRONTIER_DATA_CHALLENGE_STATUS, CHALLENGE_STATUS_SAVING @@ -125,7 +125,7 @@ SlateportCity_BattleTentLobby_EventScript_SaveBeforeChallenge:: closemessage delay 2 call Common_EventScript_SaveGame - setvar VAR_TEMP_0, 255 + setvar VAR_TEMP_CHALLENGE_STATUS, 255 goto_if_eq VAR_RESULT, 0, SlateportCity_BattleTentLobby_EventScript_CancelChallengeSaveFailed setvar VAR_0x8006, 0 SlateportCity_BattleTentLobby_EventScript_EnterChallenge:: @@ -133,7 +133,7 @@ SlateportCity_BattleTentLobby_EventScript_EnterChallenge:: closemessage call SlateportCity_BattleTentLobby_EventScript_WalkToDoor warp MAP_SLATEPORT_CITY_BATTLE_TENT_CORRIDOR, 2, 7 - setvar VAR_TEMP_0, 0 + setvar VAR_TEMP_CHALLENGE_STATUS, 0 waitstate end @@ -199,11 +199,11 @@ SlateportCity_BattleTentLobby_Movement_UnusedEnterDoor:: SlateportCity_BattleTentLobby_EventScript_TormentGiver:: lock faceplayer - goto_if_set FLAG_RECEIVED_TM41, SlateportCity_BattleTentLobby_EventScript_ReceivedTorment + goto_if_set FLAG_RECEIVED_TM_TORMENT, SlateportCity_BattleTentLobby_EventScript_ReceivedTorment msgbox SlateportCity_BattleTentLobby_Text_CouldntFindMonForMe, MSGBOX_DEFAULT - giveitem ITEM_TM41 + giveitem ITEM_TM_TORMENT goto_if_eq VAR_RESULT, FALSE, Common_EventScript_ShowBagIsFull - setflag FLAG_RECEIVED_TM41 + setflag FLAG_RECEIVED_TM_TORMENT msgbox SlateportCity_BattleTentLobby_Text_ExplainTorment, MSGBOX_DEFAULT release end diff --git a/data/maps/SlateportCity_OceanicMuseum_1F/scripts.inc b/data/maps/SlateportCity_OceanicMuseum_1F/scripts.inc index 96892f948d..8b464f73ae 100644 --- a/data/maps/SlateportCity_OceanicMuseum_1F/scripts.inc +++ b/data/maps/SlateportCity_OceanicMuseum_1F/scripts.inc @@ -151,9 +151,9 @@ SlateportCity_OceanicMuseum_1F_EventScript_FamiliarGrunt:: applymovement LOCALID_FAMILIAR_GRUNT, Common_Movement_Delay48 waitmovement 0 msgbox SlateportCity_OceanicMuseum_1F_Text_RememberMeTakeThis, MSGBOX_DEFAULT - giveitem ITEM_TM46 + giveitem ITEM_TM_THIEF goto_if_eq VAR_RESULT, 0, SlateportCity_OceanicMuseum_1F_EventScript_NoRoomForThief - setflag FLAG_RECEIVED_TM46 + setflag FLAG_RECEIVED_TM_THIEF msgbox SlateportCity_OceanicMuseum_1F_Text_HopeINeverSeeYouAgain, MSGBOX_DEFAULT closemessage goto_if_eq VAR_FACING, DIR_NORTH, SlateportCity_OceanicMuseum_1F_EventScript_FamiliarGruntExitNorth diff --git a/data/maps/SootopolisCity/scripts.inc b/data/maps/SootopolisCity/scripts.inc index af6f68555c..5b72e77be5 100644 --- a/data/maps/SootopolisCity/scripts.inc +++ b/data/maps/SootopolisCity/scripts.inc @@ -1301,7 +1301,7 @@ SootopolisCity_EventScript_Wallace:: lock faceplayer goto_if_eq VAR_SOOTOPOLIS_CITY_STATE, 4, SootopolisCity_EventScript_GoToSkyPillar - goto_if_set FLAG_RECEIVED_HM07, SootopolisCity_EventScript_GoToGym + goto_if_set FLAG_RECEIVED_HM_WATERFALL, SootopolisCity_EventScript_GoToGym goto_if_set FLAG_SOOTOPOLIS_ARCHIE_MAXIE_LEAVE, SootopolisCity_EventScript_GiveWaterfall msgbox SootopolisCity_Text_AquaMagmaDidntMeanHarm, MSGBOX_DEFAULT release @@ -1309,8 +1309,8 @@ SootopolisCity_EventScript_Wallace:: SootopolisCity_EventScript_GiveWaterfall:: msgbox SootopolisCity_Text_ThankYouForHelpAcceptThis, MSGBOX_DEFAULT - giveitem ITEM_HM07 - setflag FLAG_RECEIVED_HM07 + giveitem ITEM_HM_WATERFALL + setflag FLAG_RECEIVED_HM_WATERFALL msgbox SootopolisCity_Text_ExplainWaterfallGoToGym, MSGBOX_DEFAULT closemessage call_if_eq VAR_FACING, DIR_NORTH, SootopolisCity_EventScript_WallaceMoveFromGym diff --git a/data/maps/SootopolisCity_Gym_1F/scripts.inc b/data/maps/SootopolisCity_Gym_1F/scripts.inc index 7f739935b1..5ae8145299 100644 --- a/data/maps/SootopolisCity_Gym_1F/scripts.inc +++ b/data/maps/SootopolisCity_Gym_1F/scripts.inc @@ -83,7 +83,7 @@ SootopolisCity_Gym_1F_EventScript_Juan:: trainerbattle_single TRAINER_JUAN_1, SootopolisCity_Gym_1F_Text_JuanIntro, SootopolisCity_Gym_1F_Text_JuanDefeat, SootopolisCity_Gym_1F_EventScript_JuanDefeated, NO_MUSIC specialvar VAR_RESULT, ShouldTryRematchBattle goto_if_eq VAR_RESULT, TRUE, SootopolisCity_Gym_1F_EventScript_JuanRematch - goto_if_unset FLAG_RECEIVED_TM03, SootopolisCity_Gym_1F_EventScript_GiveWaterPulse2 + goto_if_unset FLAG_RECEIVED_TM_WATER_PULSE, SootopolisCity_Gym_1F_EventScript_GiveWaterPulse2 goto_if_unset FLAG_BADGE06_GET, SootopolisCity_Gym_1F_EventScript_GoGetFortreeBadge msgbox SootopolisCity_Gym_1F_Text_JuanPostBattle, MSGBOX_DEFAULT release @@ -116,17 +116,17 @@ SootopolisCity_Gym_1F_EventScript_JuanDefeated:: end SootopolisCity_Gym_1F_EventScript_GiveWaterPulse:: - giveitem ITEM_TM03 + giveitem ITEM_TM_WATER_PULSE goto_if_eq VAR_RESULT, FALSE, Common_EventScript_BagIsFull msgbox SootopolisCity_Gym_1F_Text_ExplainWaterPulse, MSGBOX_DEFAULT - setflag FLAG_RECEIVED_TM03 + setflag FLAG_RECEIVED_TM_WATER_PULSE return SootopolisCity_Gym_1F_EventScript_GiveWaterPulse2:: - giveitem ITEM_TM03 + giveitem ITEM_TM_WATER_PULSE goto_if_eq VAR_RESULT, FALSE, Common_EventScript_ShowBagIsFull msgbox SootopolisCity_Gym_1F_Text_ExplainWaterPulse, MSGBOX_DEFAULT - setflag FLAG_RECEIVED_TM03 + setflag FLAG_RECEIVED_TM_WATER_PULSE release end diff --git a/data/maps/SootopolisCity_House1/scripts.inc b/data/maps/SootopolisCity_House1/scripts.inc index 40f22a9c1f..b298e51d53 100644 --- a/data/maps/SootopolisCity_House1/scripts.inc +++ b/data/maps/SootopolisCity_House1/scripts.inc @@ -4,11 +4,11 @@ SootopolisCity_House1_MapScripts:: SootopolisCity_House1_EventScript_BrickBreakBlackBelt:: lock faceplayer - goto_if_set FLAG_RECEIVED_TM31, SootopolisCity_House1_EventScript_ReceivedBrickBreak + goto_if_set FLAG_RECEIVED_TM_BRICK_BREAK, SootopolisCity_House1_EventScript_ReceivedBrickBreak msgbox SootopolisCity_House1_Text_DevelopedThisTM, MSGBOX_DEFAULT - giveitem ITEM_TM31 + giveitem ITEM_TM_BRICK_BREAK goto_if_eq VAR_RESULT, FALSE, Common_EventScript_ShowBagIsFull - setflag FLAG_RECEIVED_TM31 + setflag FLAG_RECEIVED_TM_BRICK_BREAK msgbox SootopolisCity_House1_Text_ExplainBrickBreak, MSGBOX_DEFAULT release end diff --git a/data/maps/VerdanturfTown_BattleTentLobby/scripts.inc b/data/maps/VerdanturfTown_BattleTentLobby/scripts.inc index a78a6a78ed..f70baac84f 100644 --- a/data/maps/VerdanturfTown_BattleTentLobby/scripts.inc +++ b/data/maps/VerdanturfTown_BattleTentLobby/scripts.inc @@ -15,11 +15,11 @@ VerdanturfTown_BattleTentLobby_EventScript_TurnPlayerNorth:: end VerdanturfTown_BattleTentLobby_OnFrame: - map_script_2 VAR_TEMP_0, 0, VerdanturfTown_BattleTentLobby_EventScript_GetChallengeStatus - map_script_2 VAR_TEMP_0, CHALLENGE_STATUS_SAVING, VerdanturfTown_BattleTentLobby_EventScript_QuitWithoutSaving - map_script_2 VAR_TEMP_0, CHALLENGE_STATUS_PAUSED, VerdanturfTown_BattleTentLobby_EventScript_ResumeChallenge - map_script_2 VAR_TEMP_0, CHALLENGE_STATUS_WON, VerdanturfTown_BattleTentLobby_EventScript_WonChallenge - map_script_2 VAR_TEMP_0, CHALLENGE_STATUS_LOST, VerdanturfTown_BattleTentLobby_EventScript_LostChallenge + map_script_2 VAR_TEMP_CHALLENGE_STATUS, 0, VerdanturfTown_BattleTentLobby_EventScript_GetChallengeStatus + map_script_2 VAR_TEMP_CHALLENGE_STATUS, CHALLENGE_STATUS_SAVING, VerdanturfTown_BattleTentLobby_EventScript_QuitWithoutSaving + map_script_2 VAR_TEMP_CHALLENGE_STATUS, CHALLENGE_STATUS_PAUSED, VerdanturfTown_BattleTentLobby_EventScript_ResumeChallenge + map_script_2 VAR_TEMP_CHALLENGE_STATUS, CHALLENGE_STATUS_WON, VerdanturfTown_BattleTentLobby_EventScript_WonChallenge + map_script_2 VAR_TEMP_CHALLENGE_STATUS, CHALLENGE_STATUS_LOST, VerdanturfTown_BattleTentLobby_EventScript_LostChallenge .2byte 0 VerdanturfTown_BattleTentLobby_EventScript_GetChallengeStatus:: @@ -31,7 +31,7 @@ VerdanturfTown_BattleTentLobby_EventScript_QuitWithoutSaving:: msgbox BattleFrontier_BattlePalaceLobby_Text_FailedToSaveBeforeEndingChallenge, MSGBOX_DEFAULT closemessage frontier_set FRONTIER_DATA_CHALLENGE_STATUS, 0 - setvar VAR_TEMP_0, 255 + setvar VAR_TEMP_CHALLENGE_STATUS, 255 frontier_set FRONTIER_DATA_LVL_MODE, FRONTIER_LVL_50 releaseall end @@ -59,7 +59,7 @@ VerdanturfTown_BattleTentLobby_EventScript_GivePrize:: waitfanfare msgbox VerdanturfTown_BattleTentLobby_Text_ReturnFortified, MSGBOX_DEFAULT closemessage - setvar VAR_TEMP_0, 255 + setvar VAR_TEMP_CHALLENGE_STATUS, 255 releaseall end @@ -67,7 +67,7 @@ VerdanturfTown_BattleTentLobby_EventScript_NoRoomForPrize:: msgbox BattleFrontier_BattlePalaceLobby_Text_NoSpaceForPrize, MSGBOX_DEFAULT waitmessage closemessage - setvar VAR_TEMP_0, 255 + setvar VAR_TEMP_CHALLENGE_STATUS, 255 releaseall end @@ -87,7 +87,7 @@ VerdanturfTown_BattleTentLobby_EventScript_LostChallenge:: waitse msgbox VerdanturfTown_BattleTentLobby_Text_ReturnFortified, MSGBOX_DEFAULT closemessage - setvar VAR_TEMP_0, 255 + setvar VAR_TEMP_CHALLENGE_STATUS, 255 releaseall end @@ -100,7 +100,7 @@ VerdanturfTown_BattleTentLobby_EventScript_ResumeChallenge:: playse SE_SAVE waitse frontier_set FRONTIER_DATA_PAUSED, FALSE - setvar VAR_TEMP_0, 255 + setvar VAR_TEMP_CHALLENGE_STATUS, 255 goto VerdanturfTown_BattleTentLobby_EventScript_EnterChallenge VerdanturfTown_BattleTentLobby_EventScript_Attendant:: @@ -141,7 +141,7 @@ VerdanturfTown_BattleTentLobby_EventScript_TryEnterChallenge:: case MULTI_B_PRESSED, VerdanturfTown_BattleTentLobby_EventScript_LoadPartyCancelChallenge VerdanturfTown_BattleTentLobby_EventScript_SaveBeforeChallenge:: - setvar VAR_TEMP_0, 0 + setvar VAR_TEMP_CHALLENGE_STATUS, 0 frontier_set FRONTIER_DATA_SELECTED_MON_ORDER verdanturftent_init frontier_set FRONTIER_DATA_CHALLENGE_STATUS, CHALLENGE_STATUS_SAVING @@ -150,7 +150,7 @@ VerdanturfTown_BattleTentLobby_EventScript_SaveBeforeChallenge:: closemessage delay 2 call Common_EventScript_SaveGame - setvar VAR_TEMP_0, 255 + setvar VAR_TEMP_CHALLENGE_STATUS, 255 goto_if_eq VAR_RESULT, 0, VerdanturfTown_BattleTentLobby_EventScript_CancelChallengeSaveFailed VerdanturfTown_BattleTentLobby_EventScript_EnterChallenge:: special SavePlayerParty @@ -159,7 +159,7 @@ VerdanturfTown_BattleTentLobby_EventScript_EnterChallenge:: closemessage call VerdanturfTown_BattleTentLobby_EventScript_WalkToDoor warp MAP_VERDANTURF_TOWN_BATTLE_TENT_CORRIDOR, 2, 7 - setvar VAR_TEMP_0, 0 + setvar VAR_TEMP_CHALLENGE_STATUS, 0 waitstate end @@ -225,11 +225,11 @@ VerdanturfTown_BattleTentLobby_Movement_PlayerEnterDoor: VerdanturfTown_BattleTentLobby_EventScript_AttractGiver:: lock faceplayer - goto_if_set FLAG_RECEIVED_TM45, VerdanturfTown_BattleTentLobby_EventScript_ReceivedAttract + goto_if_set FLAG_RECEIVED_TM_ATTRACT, VerdanturfTown_BattleTentLobby_EventScript_ReceivedAttract msgbox VerdanturfTown_BattleTentLobby_Text_AttractionRunsDeep, MSGBOX_DEFAULT - giveitem ITEM_TM45 + giveitem ITEM_TM_ATTRACT goto_if_eq VAR_RESULT, 0, Common_EventScript_ShowBagIsFull - setflag FLAG_RECEIVED_TM45 + setflag FLAG_RECEIVED_TM_ATTRACT msgbox VerdanturfTown_BattleTentLobby_Text_AttractionMutual, MSGBOX_DEFAULT release end diff --git a/data/maps/VictoryRoad_B1F/map.json b/data/maps/VictoryRoad_B1F/map.json index 6f339a1c25..c6033354ce 100644 --- a/data/maps/VictoryRoad_B1F/map.json +++ b/data/maps/VictoryRoad_B1F/map.json @@ -245,8 +245,8 @@ "movement_range_y": 1, "trainer_type": "TRAINER_TYPE_NONE", "trainer_sight_or_berry_tree_id": "0", - "script": "VictoryRoad_B1F_EventScript_ItemTM29", - "flag": "FLAG_ITEM_VICTORY_ROAD_B1F_TM29" + "script": "VictoryRoad_B1F_EventScript_ItemTMPsychic", + "flag": "FLAG_ITEM_VICTORY_ROAD_B1F_TM_PSYCHIC" }, { "graphics_id": "OBJ_EVENT_GFX_ITEM_BALL", diff --git a/data/scripts/cable_club.inc b/data/scripts/cable_club.inc index 0ab93c4037..e810e354a5 100644 --- a/data/scripts/cable_club.inc +++ b/data/scripts/cable_club.inc @@ -743,37 +743,36 @@ EventScript_TradeCenter_Chair3:: waitstate end -@ VAR_TEMP_1 for below scripts set by ReceiveGiftItem EventScript_RecordCenter_Spot0:: setvar VAR_0x8005, 0 special RecordMixingPlayerSpotTriggered waitstate - goto_if_ne VAR_TEMP_1, ITEM_NONE, RecordCorner_EventScript_ReceivedGiftItem + goto_if_ne VAR_TEMP_RECORD_MIX_GIFT_ITEM, ITEM_NONE, RecordCorner_EventScript_ReceivedGiftItem end EventScript_RecordCenter_Spot1:: setvar VAR_0x8005, 1 special RecordMixingPlayerSpotTriggered waitstate - goto_if_ne VAR_TEMP_1, ITEM_NONE, RecordCorner_EventScript_ReceivedGiftItem + goto_if_ne VAR_TEMP_RECORD_MIX_GIFT_ITEM, ITEM_NONE, RecordCorner_EventScript_ReceivedGiftItem end EventScript_RecordCenter_Spot2:: setvar VAR_0x8005, 2 special RecordMixingPlayerSpotTriggered waitstate - goto_if_ne VAR_TEMP_1, ITEM_NONE, RecordCorner_EventScript_ReceivedGiftItem + goto_if_ne VAR_TEMP_RECORD_MIX_GIFT_ITEM, ITEM_NONE, RecordCorner_EventScript_ReceivedGiftItem end EventScript_RecordCenter_Spot3:: setvar VAR_0x8005, 3 special RecordMixingPlayerSpotTriggered waitstate - goto_if_ne VAR_TEMP_1, ITEM_NONE, RecordCorner_EventScript_ReceivedGiftItem + goto_if_ne VAR_TEMP_RECORD_MIX_GIFT_ITEM, ITEM_NONE, RecordCorner_EventScript_ReceivedGiftItem end RecordCorner_EventScript_ReceivedGiftItem:: - bufferitemname STR_VAR_2, VAR_TEMP_1 + bufferitemname STR_VAR_2, VAR_TEMP_RECORD_MIX_GIFT_ITEM message RecordCorner_Text_PlayerSentOverOneX waitmessage waitbuttonpress @@ -814,7 +813,7 @@ TradeCenter_EventScript_Attendant:: end RecordCorner_EventScript_Attendant:: - goto_if_ne VAR_TEMP_0, 0, RecordCorner_EventScript_AlreadyMixed + goto_if_ne VAR_TEMP_MIXED_RECORDS, 0, RecordCorner_EventScript_AlreadyMixed special Script_FacePlayer message RecordCorner_Text_TakeSeatAndWait waitmessage diff --git a/data/scripts/gabby_and_ty.inc b/data/scripts/gabby_and_ty.inc index e3dbdfd665..260526c4b6 100644 --- a/data/scripts/gabby_and_ty.inc +++ b/data/scripts/gabby_and_ty.inc @@ -202,7 +202,7 @@ GabbyAndTy_EventScript_FirstInterview:: call_if_eq VAR_FACING, DIR_NORTH, GabbyAndTy_EventScript_FacePlayerNorth call_if_eq VAR_FACING, DIR_SOUTH, GabbyAndTy_EventScript_FacePlayerSouth call_if_eq VAR_FACING, DIR_EAST, GabbyAndTy_EventScript_FacePlayerEast - goto_if_set FLAG_TEMP_1, GabbyAndTy_EventScript_KeepingAnEyeOutForYou + goto_if_set FLAG_TEMP_SKIP_GABBY_INTERVIEW, GabbyAndTy_EventScript_KeepingAnEyeOutForYou msgbox GabbyAndTy_Text_WhoAreYouInterview, MSGBOX_YESNO goto GabbyAndTy_EventScript_Interview end @@ -230,7 +230,7 @@ GabbyAndTy_EventScript_RequestInterview:: call_if_eq VAR_FACING, DIR_NORTH, GabbyAndTy_EventScript_FacePlayerNorth call_if_eq VAR_FACING, DIR_SOUTH, GabbyAndTy_EventScript_FacePlayerSouth call_if_eq VAR_FACING, DIR_EAST, GabbyAndTy_EventScript_FacePlayerEast - goto_if_set FLAG_TEMP_1, GabbyAndTy_EventScript_KeepingAnEyeOutForYou + goto_if_set FLAG_TEMP_SKIP_GABBY_INTERVIEW, GabbyAndTy_EventScript_KeepingAnEyeOutForYou specialvar VAR_RESULT, GabbyAndTyGetLastQuote goto_if_eq VAR_RESULT, 0, GabbyAndTy_EventScript_DidntInterviewLastTime msgbox GabbyAndTy_Text_QuoteFromLastInterview, MSGBOX_DEFAULT @@ -295,13 +295,13 @@ GabbyAndTy_EventScript_Interview:: goto_if_eq VAR_RESULT, 0, GabbyAndTy_EventScript_DontGiveUpKeepingEyeOut msgbox GabbyAndTy_Text_PerfectWellBeSeeingYou, MSGBOX_DEFAULT special GabbyAndTyAfterInterview - setflag FLAG_TEMP_1 + setflag FLAG_TEMP_SKIP_GABBY_INTERVIEW release end GabbyAndTy_EventScript_DontGiveUpKeepingEyeOut:: msgbox GabbyAndTy_Text_DontGiveUpKeepingEyeOut, MSGBOX_DEFAULT - setflag FLAG_TEMP_1 + setflag FLAG_TEMP_SKIP_GABBY_INTERVIEW release end diff --git a/data/scripts/item_ball_scripts.inc b/data/scripts/item_ball_scripts.inc index 683c383df5..9b5a2eead3 100644 --- a/data/scripts/item_ball_scripts.inc +++ b/data/scripts/item_ball_scripts.inc @@ -58,8 +58,8 @@ Route110_EventScript_ItemElixir:: finditem ITEM_ELIXIR end -Route111_EventScript_ItemTM37:: - finditem ITEM_TM37 +Route111_EventScript_ItemTMSandstorm:: + finditem ITEM_TM_SANDSTORM end Route111_EventScript_ItemStardust:: @@ -106,8 +106,8 @@ Route115_EventScript_ItemSuperPotion:: finditem ITEM_SUPER_POTION end -Route115_EventScript_ItemTM01:: - finditem ITEM_TM01 +Route115_EventScript_ItemTMFocusPunch:: + finditem ITEM_TM_FOCUS_PUNCH end Route115_EventScript_ItemIron:: @@ -374,12 +374,12 @@ FieryPath_EventScript_ItemFireStone:: finditem ITEM_FIRE_STONE end -FieryPath_EventScript_ItemTM06:: - finditem ITEM_TM06 +FieryPath_EventScript_ItemTMToxic:: + finditem ITEM_TM_TOXIC end -MeteorFalls_1F_1R_EventScript_ItemTM23:: - finditem ITEM_TM23 +MeteorFalls_1F_1R_EventScript_ItemTMIronTail:: + finditem ITEM_TM_IRON_TAIL end MeteorFalls_1F_1R_EventScript_ItemFullHeal:: @@ -394,8 +394,8 @@ MeteorFalls_1F_1R_EventScript_ItemPPUP:: finditem ITEM_PP_UP end -MeteorFalls_B1F_2R_EventScript_ItemTM02:: - finditem ITEM_TM02 +MeteorFalls_B1F_2R_EventScript_ItemTMDragonClaw:: + finditem ITEM_TM_DRAGON_CLAW end NewMauville_Inside_EventScript_ItemUltraBall:: @@ -430,8 +430,8 @@ AbandonedShip_Rooms2_B1F_EventScript_ItemDiveBall:: finditem ITEM_DIVE_BALL end -AbandonedShip_Room_B1F_EventScript_ItemTM13:: - finditem ITEM_TM13 +AbandonedShip_Room_B1F_EventScript_ItemTMIceBeam:: + finditem ITEM_TM_ICE_BEAM end AbandonedShip_Rooms2_1F_EventScript_ItemRevive:: @@ -454,16 +454,16 @@ AbandonedShip_HiddenFloorRooms_EventScript_ItemWaterStone:: finditem ITEM_WATER_STONE end -AbandonedShip_HiddenFloorRooms_EventScript_ItemTM18:: - finditem ITEM_TM18 +AbandonedShip_HiddenFloorRooms_EventScript_ItemTMRainDance:: + finditem ITEM_TM_RAIN_DANCE end -ScorchedSlab_EventScript_ItemTM11:: - finditem ITEM_TM11 +ScorchedSlab_EventScript_ItemTMSunnyDay:: + finditem ITEM_TM_SUNNY_DAY end -SafariZone_Northwest_EventScript_ItemTM22:: - finditem ITEM_TM22 +SafariZone_Northwest_EventScript_ItemTMSolarBeam:: + finditem ITEM_TM_SOLAR_BEAM end SafariZone_North_EventScript_ItemCalcium:: @@ -498,16 +498,16 @@ MtPyre_5F_EventScript_ItemLaxIncense:: finditem ITEM_LAX_INCENSE end -MtPyre_6F_EventScript_ItemTM30:: - finditem ITEM_TM30 +MtPyre_6F_EventScript_ItemTMShadowBall:: + finditem ITEM_TM_SHADOW_BALL end MtPyre_Exterior_EventScript_ItemMaxPotion:: finditem ITEM_MAX_POTION end -MtPyre_Exterior_EventScript_ItemTM48:: - finditem ITEM_TM48 +MtPyre_Exterior_EventScript_ItemTMSkillSwap:: + finditem ITEM_TM_SKILL_SWAP end AquaHideout_B1F_EventScript_ItemMasterBall:: @@ -554,16 +554,16 @@ ShoalCave_LowTideStairsRoom_EventScript_ItemIceHeal:: finditem ITEM_ICE_HEAL end -ShoalCave_LowTideIceRoom_EventScript_ItemTM07:: - finditem ITEM_TM07 +ShoalCave_LowTideIceRoom_EventScript_ItemTMHail:: + finditem ITEM_TM_HAIL end ShoalCave_LowTideIceRoom_EventScript_ItemNeverMeltIce:: finditem ITEM_NEVER_MELT_ICE end -SeafloorCavern_Room9_EventScript_ItemTM26:: - finditem ITEM_TM26 +SeafloorCavern_Room9_EventScript_ItemTMEarthquake:: + finditem ITEM_TM_EARTHQUAKE end Route110_TrickHousePuzzle1_EventScript_ItemOrangeMail:: @@ -610,8 +610,8 @@ VictoryRoad_1F_EventScript_ItemPPUp:: finditem ITEM_PP_UP end -VictoryRoad_B1F_EventScript_ItemTM29:: - finditem ITEM_TM29 +VictoryRoad_B1F_EventScript_ItemTMPsychic:: + finditem ITEM_TM_PSYCHIC end VictoryRoad_B1F_EventScript_ItemFullRestore:: diff --git a/data/scripts/pc_transfer.inc b/data/scripts/pc_transfer.inc index 1204bece36..f279740caa 100644 --- a/data/scripts/pc_transfer.inc +++ b/data/scripts/pc_transfer.inc @@ -15,7 +15,7 @@ Common_EventScript_NameReceivedBoxMon:: Common_EventScript_TransferredToPC:: bufferboxname STR_VAR_1, VAR_PC_BOX_TO_SEND_MON - bufferspeciesname STR_VAR_2, VAR_TEMP_1 + bufferspeciesname STR_VAR_2, VAR_TEMP_TRANSFERRED_SPECIES call_if_unset FLAG_SYS_PC_LANETTE, EventScript_TransferredSomeonesPC call_if_set FLAG_SYS_PC_LANETTE, EventScript_TransferredLanettesPC return diff --git a/data/scripts/secret_power_tm.inc b/data/scripts/secret_power_tm.inc index 11a5d5b668..58ddc8ce55 100644 --- a/data/scripts/secret_power_tm.inc +++ b/data/scripts/secret_power_tm.inc @@ -43,7 +43,7 @@ Route111_EventScript_SecretPowerMan:: end Route111_EventScript_GiveSecretPower:: - giveitem ITEM_TM43 + giveitem ITEM_TM_SECRET_POWER goto_if_eq VAR_RESULT, FALSE, Route111_EventScript_NoRoomForSecretPower msgbox Route111_Text_ExplainSecretPower, MSGBOX_DEFAULT closemessage diff --git a/gflib/bg.c b/gflib/bg.c index 89f5038246..4ccb95eb6b 100644 --- a/gflib/bg.c +++ b/gflib/bg.c @@ -421,13 +421,11 @@ u16 Unused_LoadBgPalette(u8 bg, const void *src, u16 size, u16 destOffset) if (!IsInvalidBg32(bg)) { - u16 paletteOffset = (sGpuBgConfigs2[bg].basePalette * 0x20) + (destOffset * 2); + u16 paletteOffset = PLTT_OFFSET_4BPP(sGpuBgConfigs2[bg].basePalette) + (destOffset * 2); cursor = RequestDma3Copy(src, (void *)(paletteOffset + BG_PLTT), size, 0); if (cursor == -1) - { return -1; - } } else { diff --git a/gflib/sprite.c b/gflib/sprite.c index 637e15a22d..b02c4e45e3 100644 --- a/gflib/sprite.c +++ b/gflib/sprite.c @@ -1605,7 +1605,7 @@ u8 LoadSpritePalette(const struct SpritePalette *palette) for (i = 0; i < 16; i++) { debugPtr[i] = sSpritePaletteTags[i]; } - DoLoadSpritePalette(palette->data, index * 16); + DoLoadSpritePalette(palette->data, PLTT_ID(index)); return index; } } @@ -1757,7 +1757,7 @@ bool8 AddSubspritesToOamBuffer(struct Sprite *sprite, struct OamData *destOam, u destOam[i].y = baseY + y; destOam[i].tileNum = tileNum + subspriteTable->subsprites[i].tileOffset; - if (sprite->subspriteMode != SUBSPRITES_IGNORE_PRIORITY) + if (sprite->subspriteMode < SUBSPRITES_IGNORE_PRIORITY) destOam[i].priority = subspriteTable->subsprites[i].priority; } } diff --git a/graphics/battle_anims/masks/stat3.pal b/graphics/battle_anims/stat_change/accuracy.pal similarity index 100% rename from graphics/battle_anims/masks/stat3.pal rename to graphics/battle_anims/stat_change/accuracy.pal diff --git a/graphics/battle_anims/masks/stat2.pal b/graphics/battle_anims/stat_change/attack.pal similarity index 100% rename from graphics/battle_anims/masks/stat2.pal rename to graphics/battle_anims/stat_change/attack.pal diff --git a/graphics/battle_anims/masks/stat_tilemap_2.bin b/graphics/battle_anims/stat_change/decrease.bin similarity index 100% rename from graphics/battle_anims/masks/stat_tilemap_2.bin rename to graphics/battle_anims/stat_change/decrease.bin diff --git a/graphics/battle_anims/masks/stat1.pal b/graphics/battle_anims/stat_change/defense.pal similarity index 100% rename from graphics/battle_anims/masks/stat1.pal rename to graphics/battle_anims/stat_change/defense.pal diff --git a/graphics/battle_anims/masks/stat6.pal b/graphics/battle_anims/stat_change/evasion.pal similarity index 100% rename from graphics/battle_anims/masks/stat6.pal rename to graphics/battle_anims/stat_change/evasion.pal diff --git a/graphics/battle_anims/masks/stat_tilemap_1.bin b/graphics/battle_anims/stat_change/increase.bin similarity index 100% rename from graphics/battle_anims/masks/stat_tilemap_1.bin rename to graphics/battle_anims/stat_change/increase.bin diff --git a/graphics/battle_anims/masks/stat5.pal b/graphics/battle_anims/stat_change/multiple.pal similarity index 100% rename from graphics/battle_anims/masks/stat5.pal rename to graphics/battle_anims/stat_change/multiple.pal diff --git a/graphics/battle_anims/masks/stat7.pal b/graphics/battle_anims/stat_change/sp_attack.pal similarity index 100% rename from graphics/battle_anims/masks/stat7.pal rename to graphics/battle_anims/stat_change/sp_attack.pal diff --git a/graphics/battle_anims/masks/stat8.pal b/graphics/battle_anims/stat_change/sp_defense.pal similarity index 100% rename from graphics/battle_anims/masks/stat8.pal rename to graphics/battle_anims/stat_change/sp_defense.pal diff --git a/graphics/battle_anims/masks/stat4.pal b/graphics/battle_anims/stat_change/speed.pal similarity index 100% rename from graphics/battle_anims/masks/stat4.pal rename to graphics/battle_anims/stat_change/speed.pal diff --git a/graphics/battle_anims/masks/stat.png b/graphics/battle_anims/stat_change/tiles.png similarity index 100% rename from graphics/battle_anims/masks/stat.png rename to graphics/battle_anims/stat_change/tiles.png diff --git a/graphics/battle_frontier/factory_menu1.png b/graphics/battle_frontier/factory_menu1.png deleted file mode 100644 index 52f073ff30..0000000000 Binary files a/graphics/battle_frontier/factory_menu1.png and /dev/null differ diff --git a/graphics/battle_frontier/factory_menu2.png b/graphics/battle_frontier/factory_menu2.png deleted file mode 100644 index 0d103927e4..0000000000 Binary files a/graphics/battle_frontier/factory_menu2.png and /dev/null differ diff --git a/graphics/battle_frontier/factory_menu.bin b/graphics/battle_frontier/factory_screen/menu.bin similarity index 100% rename from graphics/battle_frontier/factory_menu.bin rename to graphics/battle_frontier/factory_screen/menu.bin diff --git a/graphics/battle_frontier/factory_screen/menu.png b/graphics/battle_frontier/factory_screen/menu.png new file mode 100644 index 0000000000..5271973b31 Binary files /dev/null and b/graphics/battle_frontier/factory_screen/menu.png differ diff --git a/graphics/battle_frontier/tourney.pal b/graphics/battle_frontier/tourney.pal deleted file mode 100644 index eec4c7d71a..0000000000 --- a/graphics/battle_frontier/tourney.pal +++ /dev/null @@ -1,259 +0,0 @@ -JASC-PAL -0100 -256 -0 0 0 -255 172 65 -255 255 131 -222 213 180 -255 255 255 -230 222 222 -197 197 197 -213 57 49 -230 230 213 -255 246 205 -255 82 49 -164 24 0 -0 0 0 -106 106 106 -0 0 0 -0 0 0 -0 0 0 -90 172 131 -106 156 123 -123 222 139 -246 255 255 -0 0 0 -246 255 246 -0 0 0 -0 0 0 -0 0 0 -230 238 246 -222 255 238 -189 238 197 -123 123 123 -115 197 156 -0 0 0 -0 0 0 -197 205 230 -32 115 139 -255 255 255 -222 238 222 -0 0 0 -131 197 139 -0 0 0 -139 156 197 -115 139 189 -0 90 82 -106 164 139 -57 115 90 -189 222 197 -0 0 0 -0 0 0 -0 0 0 -205 205 246 -230 238 230 -213 213 255 -156 156 222 -238 238 255 -189 189 238 -230 230 255 -222 222 255 -197 197 246 -189 189 238 -180 180 230 -172 172 230 -164 164 222 -156 156 222 -0 0 0 -0 0 0 -131 148 180 -213 230 246 -189 189 222 -90 98 115 -230 238 255 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -197 238 222 -255 205 205 -205 222 255 -222 255 255 -246 230 164 -0 0 0 -189 246 180 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -255 255 255 -0 0 0 -0 255 0 -164 180 180 -255 74 0 -246 255 246 -246 255 255 -0 0 0 -246 255 246 -0 0 0 -0 0 0 -0 0 0 -230 238 246 -0 0 0 -189 238 197 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -255 213 106 -255 74 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -246 255 255 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 diff --git a/graphics/battle_frontier/tourney_tree.png b/graphics/battle_frontier/tourney_tree.png index f60dd49d36..4dc8cecc13 100644 Binary files a/graphics/battle_frontier/tourney_tree.png and b/graphics/battle_frontier/tourney_tree.png differ diff --git a/graphics/battle_transitions/frontier_logo_center.bin b/graphics/battle_transitions/frontier_logo_center.bin index 7b9d2af284..5247913460 100644 Binary files a/graphics/battle_transitions/frontier_logo_center.bin and b/graphics/battle_transitions/frontier_logo_center.bin differ diff --git a/graphics/berry_fix/gba_small.bin b/graphics/berry_fix/gba_connect.bin similarity index 100% rename from graphics/berry_fix/gba_small.bin rename to graphics/berry_fix/gba_connect.bin diff --git a/graphics/berry_fix/gba_connect.png b/graphics/berry_fix/gba_connect.png new file mode 100644 index 0000000000..78e2925194 Binary files /dev/null and b/graphics/berry_fix/gba_connect.png differ diff --git a/graphics/berry_fix/gba_small.pal b/graphics/berry_fix/gba_small.pal deleted file mode 100644 index 0e177217f5..0000000000 --- a/graphics/berry_fix/gba_small.pal +++ /dev/null @@ -1,35 +0,0 @@ -JASC-PAL -0100 -32 -0 0 0 -255 255 255 -32 32 32 -172 172 172 -230 8 8 -255 189 115 -32 156 8 -148 246 148 -49 82 205 -164 197 246 -164 213 90 -238 230 197 -148 197 213 -32 57 98 -106 148 197 -90 106 156 -255 255 255 -164 213 90 -32 32 32 -123 123 205 -255 255 255 -74 74 115 -197 197 197 -98 98 189 -106 106 197 -98 123 57 -131 131 131 -222 41 0 -189 123 41 -180 180 222 -0 0 0 -0 0 0 diff --git a/graphics/berry_fix/gba_small.png b/graphics/berry_fix/gba_small.png deleted file mode 100644 index 3bf1f3e361..0000000000 Binary files a/graphics/berry_fix/gba_small.png and /dev/null differ diff --git a/graphics/berry_fix/gba_transfer.pal b/graphics/berry_fix/gba_transfer.pal deleted file mode 100644 index 0e177217f5..0000000000 --- a/graphics/berry_fix/gba_transfer.pal +++ /dev/null @@ -1,35 +0,0 @@ -JASC-PAL -0100 -32 -0 0 0 -255 255 255 -32 32 32 -172 172 172 -230 8 8 -255 189 115 -32 156 8 -148 246 148 -49 82 205 -164 197 246 -164 213 90 -238 230 197 -148 197 213 -32 57 98 -106 148 197 -90 106 156 -255 255 255 -164 213 90 -32 32 32 -123 123 205 -255 255 255 -74 74 115 -197 197 197 -98 98 189 -106 106 197 -98 123 57 -131 131 131 -222 41 0 -189 123 41 -180 180 222 -0 0 0 -0 0 0 diff --git a/graphics/berry_fix/gba_transfer.png b/graphics/berry_fix/gba_transfer.png index 9b7eb5571f..104227f8a7 100644 Binary files a/graphics/berry_fix/gba_transfer.png and b/graphics/berry_fix/gba_transfer.png differ diff --git a/graphics/berry_fix/gba_transfer_error.pal b/graphics/berry_fix/gba_transfer_error.pal deleted file mode 100644 index 0e177217f5..0000000000 --- a/graphics/berry_fix/gba_transfer_error.pal +++ /dev/null @@ -1,35 +0,0 @@ -JASC-PAL -0100 -32 -0 0 0 -255 255 255 -32 32 32 -172 172 172 -230 8 8 -255 189 115 -32 156 8 -148 246 148 -49 82 205 -164 197 246 -164 213 90 -238 230 197 -148 197 213 -32 57 98 -106 148 197 -90 106 156 -255 255 255 -164 213 90 -32 32 32 -123 123 205 -255 255 255 -74 74 115 -197 197 197 -98 98 189 -106 106 197 -98 123 57 -131 131 131 -222 41 0 -189 123 41 -180 180 222 -0 0 0 -0 0 0 diff --git a/graphics/berry_fix/gba_transfer_error.png b/graphics/berry_fix/gba_transfer_error.png index d8db4bfb95..2154b1c4d2 100644 Binary files a/graphics/berry_fix/gba_transfer_error.png and b/graphics/berry_fix/gba_transfer_error.png differ diff --git a/graphics/berry_fix/gba_transfer_highlight.pal b/graphics/berry_fix/gba_transfer_highlight.pal deleted file mode 100644 index 0e177217f5..0000000000 --- a/graphics/berry_fix/gba_transfer_highlight.pal +++ /dev/null @@ -1,35 +0,0 @@ -JASC-PAL -0100 -32 -0 0 0 -255 255 255 -32 32 32 -172 172 172 -230 8 8 -255 189 115 -32 156 8 -148 246 148 -49 82 205 -164 197 246 -164 213 90 -238 230 197 -148 197 213 -32 57 98 -106 148 197 -90 106 156 -255 255 255 -164 213 90 -32 32 32 -123 123 205 -255 255 255 -74 74 115 -197 197 197 -98 98 189 -106 106 197 -98 123 57 -131 131 131 -222 41 0 -189 123 41 -180 180 222 -0 0 0 -0 0 0 diff --git a/graphics/berry_fix/gba_transfer_highlight.png b/graphics/berry_fix/gba_transfer_highlight.png index 9fb9b6a48b..f1845bdafd 100644 Binary files a/graphics/berry_fix/gba_transfer_highlight.png and b/graphics/berry_fix/gba_transfer_highlight.png differ diff --git a/graphics/berry_fix/logo.pal b/graphics/berry_fix/logo.pal deleted file mode 100644 index 4c76f3f9a8..0000000000 --- a/graphics/berry_fix/logo.pal +++ /dev/null @@ -1,51 +0,0 @@ -JASC-PAL -0100 -48 -0 0 0 -255 255 255 -32 32 32 -172 172 172 -230 8 8 -255 189 115 -32 156 8 -148 246 148 -49 82 205 -164 197 246 -164 213 90 -238 230 197 -148 197 213 -32 57 98 -106 148 197 -90 106 156 -255 255 255 -164 213 90 -32 32 32 -123 123 205 -255 255 255 -74 74 115 -197 197 197 -98 98 189 -106 106 197 -98 123 57 -131 131 131 -222 41 0 -189 123 41 -180 180 222 -0 0 0 -0 0 0 -0 0 0 -255 255 255 -238 238 238 -222 222 230 -205 205 222 -197 197 205 -180 180 197 -164 164 189 -156 156 172 -139 139 164 -123 123 156 -115 115 139 -98 98 131 -82 82 123 -74 74 115 -32 32 32 diff --git a/graphics/berry_fix/logo.png b/graphics/berry_fix/logo.png index 29cda79b0a..189ca97802 100644 Binary files a/graphics/berry_fix/logo.png and b/graphics/berry_fix/logo.png differ diff --git a/graphics/berry_fix/text.pal b/graphics/berry_fix/text.pal new file mode 100644 index 0000000000..28675e904d --- /dev/null +++ b/graphics/berry_fix/text.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 255 255 +255 255 255 +99 99 99 +214 214 206 +230 8 8 +255 189 115 +32 156 8 +148 246 148 +49 82 205 +164 197 246 +255 255 255 +99 99 99 +214 214 206 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/berry_fix/window.pal b/graphics/berry_fix/window.pal deleted file mode 100644 index 0e177217f5..0000000000 --- a/graphics/berry_fix/window.pal +++ /dev/null @@ -1,35 +0,0 @@ -JASC-PAL -0100 -32 -0 0 0 -255 255 255 -32 32 32 -172 172 172 -230 8 8 -255 189 115 -32 156 8 -148 246 148 -49 82 205 -164 197 246 -164 213 90 -238 230 197 -148 197 213 -32 57 98 -106 148 197 -90 106 156 -255 255 255 -164 213 90 -32 32 32 -123 123 205 -255 255 255 -74 74 115 -197 197 197 -98 98 189 -106 106 197 -98 123 57 -131 131 131 -222 41 0 -189 123 41 -180 180 222 -0 0 0 -0 0 0 diff --git a/graphics/berry_fix/window.png b/graphics/berry_fix/window.png index 7b57701e35..dd9f3b6af0 100644 Binary files a/graphics/berry_fix/window.png and b/graphics/berry_fix/window.png differ diff --git a/graphics/dodrio_berry_picking/bg.pal b/graphics/dodrio_berry_picking/bg.pal deleted file mode 100644 index c06550002f..0000000000 --- a/graphics/dodrio_berry_picking/bg.pal +++ /dev/null @@ -1,19 +0,0 @@ -JASC-PAL -0100 -16 -230 246 255 -82 180 172 -82 205 189 -156 156 131 -106 156 148 -123 123 98 -189 172 98 -189 189 139 -74 172 156 -172 172 131 -74 156 123 -115 115 82 -139 139 106 -164 164 115 -197 197 148 -230 246 255 diff --git a/graphics/dodrio_berry_picking/tree_border.pal b/graphics/dodrio_berry_picking/tree_border.pal deleted file mode 100644 index be2b62cc98..0000000000 --- a/graphics/dodrio_berry_picking/tree_border.pal +++ /dev/null @@ -1,19 +0,0 @@ -JASC-PAL -0100 -16 -230 246 255 -246 246 222 -230 230 180 -139 238 139 -246 246 189 -197 246 164 -246 230 197 -230 246 255 -230 213 180 -205 197 164 -148 222 148 -222 238 255 -139 205 139 -213 238 246 -222 246 255 -213 205 164 diff --git a/graphics/pokeblock/use_screen/graph_data.bin b/graphics/pokeblock/use_screen/graph_data.bin index 5f8f364fc9..75581f46e2 100644 Binary files a/graphics/pokeblock/use_screen/graph_data.bin and b/graphics/pokeblock/use_screen/graph_data.bin differ diff --git a/graphics/pokeblock/use_screen/mon_frame.bin b/graphics/pokeblock/use_screen/mon_frame.bin index 4e7c2d4adc..130dcff29c 100644 Binary files a/graphics/pokeblock/use_screen/mon_frame.bin and b/graphics/pokeblock/use_screen/mon_frame.bin differ diff --git a/graphics/pokemon/abra/footprint.png b/graphics/pokemon/abra/footprint.png index 42b5e416f3..073c787191 100644 Binary files a/graphics/pokemon/abra/footprint.png and b/graphics/pokemon/abra/footprint.png differ diff --git a/graphics/pokemon/absol/footprint.png b/graphics/pokemon/absol/footprint.png index da4076f780..f6280e1be2 100644 Binary files a/graphics/pokemon/absol/footprint.png and b/graphics/pokemon/absol/footprint.png differ diff --git a/graphics/pokemon/aerodactyl/footprint.png b/graphics/pokemon/aerodactyl/footprint.png index 7c5d3e6c19..b127884a53 100644 Binary files a/graphics/pokemon/aerodactyl/footprint.png and b/graphics/pokemon/aerodactyl/footprint.png differ diff --git a/graphics/pokemon/aggron/footprint.png b/graphics/pokemon/aggron/footprint.png index 3ba6d480ba..7c9d7177c9 100644 Binary files a/graphics/pokemon/aggron/footprint.png and b/graphics/pokemon/aggron/footprint.png differ diff --git a/graphics/pokemon/aipom/footprint.png b/graphics/pokemon/aipom/footprint.png index 67f7f1188b..41d8a4a7cb 100644 Binary files a/graphics/pokemon/aipom/footprint.png and b/graphics/pokemon/aipom/footprint.png differ diff --git a/graphics/pokemon/alakazam/footprint.png b/graphics/pokemon/alakazam/footprint.png index e3c3795cf5..c6d8f6ebe6 100644 Binary files a/graphics/pokemon/alakazam/footprint.png and b/graphics/pokemon/alakazam/footprint.png differ diff --git a/graphics/pokemon/altaria/footprint.png b/graphics/pokemon/altaria/footprint.png index 6c65deae53..3310f5d0d2 100644 Binary files a/graphics/pokemon/altaria/footprint.png and b/graphics/pokemon/altaria/footprint.png differ diff --git a/graphics/pokemon/ampharos/footprint.png b/graphics/pokemon/ampharos/footprint.png index bfc2f80345..6f0cc20f08 100644 Binary files a/graphics/pokemon/ampharos/footprint.png and b/graphics/pokemon/ampharos/footprint.png differ diff --git a/graphics/pokemon/anorith/footprint.png b/graphics/pokemon/anorith/footprint.png index c7ccf57f37..2449369fd6 100644 Binary files a/graphics/pokemon/anorith/footprint.png and b/graphics/pokemon/anorith/footprint.png differ diff --git a/graphics/pokemon/arbok/footprint.png b/graphics/pokemon/arbok/footprint.png index c7ccf57f37..2449369fd6 100644 Binary files a/graphics/pokemon/arbok/footprint.png and b/graphics/pokemon/arbok/footprint.png differ diff --git a/graphics/pokemon/arcanine/footprint.png b/graphics/pokemon/arcanine/footprint.png index 96b7f93ae2..994cefce6f 100644 Binary files a/graphics/pokemon/arcanine/footprint.png and b/graphics/pokemon/arcanine/footprint.png differ diff --git a/graphics/pokemon/ariados/footprint.png b/graphics/pokemon/ariados/footprint.png index cee3b1ba5b..e766c18df2 100644 Binary files a/graphics/pokemon/ariados/footprint.png and b/graphics/pokemon/ariados/footprint.png differ diff --git a/graphics/pokemon/armaldo/footprint.png b/graphics/pokemon/armaldo/footprint.png index d12d2e42c0..b6c085f3df 100644 Binary files a/graphics/pokemon/armaldo/footprint.png and b/graphics/pokemon/armaldo/footprint.png differ diff --git a/graphics/pokemon/aron/footprint.png b/graphics/pokemon/aron/footprint.png index fe53cb5ebd..6a87f3c11b 100644 Binary files a/graphics/pokemon/aron/footprint.png and b/graphics/pokemon/aron/footprint.png differ diff --git a/graphics/pokemon/articuno/footprint.png b/graphics/pokemon/articuno/footprint.png index e6e4fa9ef3..b364b5211b 100644 Binary files a/graphics/pokemon/articuno/footprint.png and b/graphics/pokemon/articuno/footprint.png differ diff --git a/graphics/pokemon/azumarill/footprint.png b/graphics/pokemon/azumarill/footprint.png index 904bf941c7..8c47c84304 100644 Binary files a/graphics/pokemon/azumarill/footprint.png and b/graphics/pokemon/azumarill/footprint.png differ diff --git a/graphics/pokemon/azurill/footprint.png b/graphics/pokemon/azurill/footprint.png index 60db8e03b8..0839c9c089 100644 Binary files a/graphics/pokemon/azurill/footprint.png and b/graphics/pokemon/azurill/footprint.png differ diff --git a/graphics/pokemon/bagon/footprint.png b/graphics/pokemon/bagon/footprint.png index 9a93a7564e..aec25f6acb 100644 Binary files a/graphics/pokemon/bagon/footprint.png and b/graphics/pokemon/bagon/footprint.png differ diff --git a/graphics/pokemon/baltoy/footprint.png b/graphics/pokemon/baltoy/footprint.png index 6965dbe60f..a9b0e33c28 100644 Binary files a/graphics/pokemon/baltoy/footprint.png and b/graphics/pokemon/baltoy/footprint.png differ diff --git a/graphics/pokemon/banette/footprint.png b/graphics/pokemon/banette/footprint.png index a15814f2f0..20f6b642e3 100644 Binary files a/graphics/pokemon/banette/footprint.png and b/graphics/pokemon/banette/footprint.png differ diff --git a/graphics/pokemon/barboach/footprint.png b/graphics/pokemon/barboach/footprint.png index c7ccf57f37..2449369fd6 100644 Binary files a/graphics/pokemon/barboach/footprint.png and b/graphics/pokemon/barboach/footprint.png differ diff --git a/graphics/pokemon/bayleef/footprint.png b/graphics/pokemon/bayleef/footprint.png index 04b375a7a7..031cc59537 100644 Binary files a/graphics/pokemon/bayleef/footprint.png and b/graphics/pokemon/bayleef/footprint.png differ diff --git a/graphics/pokemon/beautifly/footprint.png b/graphics/pokemon/beautifly/footprint.png index 49175cb026..7111a8b703 100644 Binary files a/graphics/pokemon/beautifly/footprint.png and b/graphics/pokemon/beautifly/footprint.png differ diff --git a/graphics/pokemon/beedrill/footprint.png b/graphics/pokemon/beedrill/footprint.png index 5c3f21090f..475d5235a5 100644 Binary files a/graphics/pokemon/beedrill/footprint.png and b/graphics/pokemon/beedrill/footprint.png differ diff --git a/graphics/pokemon/beldum/footprint.png b/graphics/pokemon/beldum/footprint.png index 0554eedfe0..c4be8f0bfb 100644 Binary files a/graphics/pokemon/beldum/footprint.png and b/graphics/pokemon/beldum/footprint.png differ diff --git a/graphics/pokemon/bellossom/footprint.png b/graphics/pokemon/bellossom/footprint.png index c7ccf57f37..2449369fd6 100644 Binary files a/graphics/pokemon/bellossom/footprint.png and b/graphics/pokemon/bellossom/footprint.png differ diff --git a/graphics/pokemon/bellsprout/footprint.png b/graphics/pokemon/bellsprout/footprint.png index 8fcf4f4f49..6a5edfd619 100644 Binary files a/graphics/pokemon/bellsprout/footprint.png and b/graphics/pokemon/bellsprout/footprint.png differ diff --git a/graphics/pokemon/blastoise/footprint.png b/graphics/pokemon/blastoise/footprint.png index b881f92706..c2d01389b8 100644 Binary files a/graphics/pokemon/blastoise/footprint.png and b/graphics/pokemon/blastoise/footprint.png differ diff --git a/graphics/pokemon/blaziken/footprint.png b/graphics/pokemon/blaziken/footprint.png index cf18a353ab..371621ba45 100644 Binary files a/graphics/pokemon/blaziken/footprint.png and b/graphics/pokemon/blaziken/footprint.png differ diff --git a/graphics/pokemon/blissey/footprint.png b/graphics/pokemon/blissey/footprint.png index 3da3dbf938..ae7a7d533d 100644 Binary files a/graphics/pokemon/blissey/footprint.png and b/graphics/pokemon/blissey/footprint.png differ diff --git a/graphics/pokemon/breloom/footprint.png b/graphics/pokemon/breloom/footprint.png index 98d920669d..7e940a5d7f 100644 Binary files a/graphics/pokemon/breloom/footprint.png and b/graphics/pokemon/breloom/footprint.png differ diff --git a/graphics/pokemon/bulbasaur/footprint.png b/graphics/pokemon/bulbasaur/footprint.png index 8e9ab9c6bd..6dafa96e2b 100644 Binary files a/graphics/pokemon/bulbasaur/footprint.png and b/graphics/pokemon/bulbasaur/footprint.png differ diff --git a/graphics/pokemon/butterfree/footprint.png b/graphics/pokemon/butterfree/footprint.png index b2740e9ccc..c6b4750d30 100644 Binary files a/graphics/pokemon/butterfree/footprint.png and b/graphics/pokemon/butterfree/footprint.png differ diff --git a/graphics/pokemon/cacnea/footprint.png b/graphics/pokemon/cacnea/footprint.png index 00b6a8a7e3..92c2b235a0 100644 Binary files a/graphics/pokemon/cacnea/footprint.png and b/graphics/pokemon/cacnea/footprint.png differ diff --git a/graphics/pokemon/cacturne/footprint.png b/graphics/pokemon/cacturne/footprint.png index 5441f92d6b..a06f75fc9d 100644 Binary files a/graphics/pokemon/cacturne/footprint.png and b/graphics/pokemon/cacturne/footprint.png differ diff --git a/graphics/pokemon/camerupt/footprint.png b/graphics/pokemon/camerupt/footprint.png index 40708b8a1f..81ec621046 100644 Binary files a/graphics/pokemon/camerupt/footprint.png and b/graphics/pokemon/camerupt/footprint.png differ diff --git a/graphics/pokemon/carvanha/footprint.png b/graphics/pokemon/carvanha/footprint.png index c7ccf57f37..2449369fd6 100644 Binary files a/graphics/pokemon/carvanha/footprint.png and b/graphics/pokemon/carvanha/footprint.png differ diff --git a/graphics/pokemon/cascoon/footprint.png b/graphics/pokemon/cascoon/footprint.png index c7ccf57f37..2449369fd6 100644 Binary files a/graphics/pokemon/cascoon/footprint.png and b/graphics/pokemon/cascoon/footprint.png differ diff --git a/graphics/pokemon/castform/footprint.png b/graphics/pokemon/castform/footprint.png index c7ccf57f37..2449369fd6 100644 Binary files a/graphics/pokemon/castform/footprint.png and b/graphics/pokemon/castform/footprint.png differ diff --git a/graphics/pokemon/castform/anim_front_normal_form.png b/graphics/pokemon/castform/normal/anim_front.png similarity index 100% rename from graphics/pokemon/castform/anim_front_normal_form.png rename to graphics/pokemon/castform/normal/anim_front.png diff --git a/graphics/pokemon/castform/back_normal_form.png b/graphics/pokemon/castform/normal/back.png similarity index 100% rename from graphics/pokemon/castform/back_normal_form.png rename to graphics/pokemon/castform/normal/back.png diff --git a/graphics/pokemon/castform/front_normal_form.png b/graphics/pokemon/castform/normal/front.png similarity index 100% rename from graphics/pokemon/castform/front_normal_form.png rename to graphics/pokemon/castform/normal/front.png diff --git a/graphics/pokemon/castform/normal_normal_form.pal b/graphics/pokemon/castform/normal/normal.pal similarity index 100% rename from graphics/pokemon/castform/normal_normal_form.pal rename to graphics/pokemon/castform/normal/normal.pal diff --git a/graphics/pokemon/castform/shiny_normal_form.pal b/graphics/pokemon/castform/normal/shiny.pal similarity index 100% rename from graphics/pokemon/castform/shiny_normal_form.pal rename to graphics/pokemon/castform/normal/shiny.pal diff --git a/graphics/pokemon/castform/anim_front_rainy_form.png b/graphics/pokemon/castform/rainy/anim_front.png similarity index 100% rename from graphics/pokemon/castform/anim_front_rainy_form.png rename to graphics/pokemon/castform/rainy/anim_front.png diff --git a/graphics/pokemon/castform/back_rainy_form.png b/graphics/pokemon/castform/rainy/back.png similarity index 100% rename from graphics/pokemon/castform/back_rainy_form.png rename to graphics/pokemon/castform/rainy/back.png diff --git a/graphics/pokemon/castform/front_rainy_form.png b/graphics/pokemon/castform/rainy/front.png similarity index 100% rename from graphics/pokemon/castform/front_rainy_form.png rename to graphics/pokemon/castform/rainy/front.png diff --git a/graphics/pokemon/castform/normal_rainy_form.pal b/graphics/pokemon/castform/rainy/normal.pal similarity index 100% rename from graphics/pokemon/castform/normal_rainy_form.pal rename to graphics/pokemon/castform/rainy/normal.pal diff --git a/graphics/pokemon/castform/shiny_rainy_form.pal b/graphics/pokemon/castform/rainy/shiny.pal similarity index 100% rename from graphics/pokemon/castform/shiny_rainy_form.pal rename to graphics/pokemon/castform/rainy/shiny.pal diff --git a/graphics/pokemon/castform/anim_front_snowy_form.png b/graphics/pokemon/castform/snowy/anim_front.png similarity index 100% rename from graphics/pokemon/castform/anim_front_snowy_form.png rename to graphics/pokemon/castform/snowy/anim_front.png diff --git a/graphics/pokemon/castform/back_snowy_form.png b/graphics/pokemon/castform/snowy/back.png similarity index 100% rename from graphics/pokemon/castform/back_snowy_form.png rename to graphics/pokemon/castform/snowy/back.png diff --git a/graphics/pokemon/castform/front_snowy_form.png b/graphics/pokemon/castform/snowy/front.png similarity index 100% rename from graphics/pokemon/castform/front_snowy_form.png rename to graphics/pokemon/castform/snowy/front.png diff --git a/graphics/pokemon/castform/normal_snowy_form.pal b/graphics/pokemon/castform/snowy/normal.pal similarity index 100% rename from graphics/pokemon/castform/normal_snowy_form.pal rename to graphics/pokemon/castform/snowy/normal.pal diff --git a/graphics/pokemon/castform/shiny_snowy_form.pal b/graphics/pokemon/castform/snowy/shiny.pal similarity index 100% rename from graphics/pokemon/castform/shiny_snowy_form.pal rename to graphics/pokemon/castform/snowy/shiny.pal diff --git a/graphics/pokemon/castform/anim_front_sunny_form.png b/graphics/pokemon/castform/sunny/anim_front.png similarity index 100% rename from graphics/pokemon/castform/anim_front_sunny_form.png rename to graphics/pokemon/castform/sunny/anim_front.png diff --git a/graphics/pokemon/castform/back_sunny_form.png b/graphics/pokemon/castform/sunny/back.png similarity index 100% rename from graphics/pokemon/castform/back_sunny_form.png rename to graphics/pokemon/castform/sunny/back.png diff --git a/graphics/pokemon/castform/front_sunny_form.png b/graphics/pokemon/castform/sunny/front.png similarity index 100% rename from graphics/pokemon/castform/front_sunny_form.png rename to graphics/pokemon/castform/sunny/front.png diff --git a/graphics/pokemon/castform/normal_sunny_form.pal b/graphics/pokemon/castform/sunny/normal.pal similarity index 100% rename from graphics/pokemon/castform/normal_sunny_form.pal rename to graphics/pokemon/castform/sunny/normal.pal diff --git a/graphics/pokemon/castform/shiny_sunny_form.pal b/graphics/pokemon/castform/sunny/shiny.pal similarity index 100% rename from graphics/pokemon/castform/shiny_sunny_form.pal rename to graphics/pokemon/castform/sunny/shiny.pal diff --git a/graphics/pokemon/caterpie/footprint.png b/graphics/pokemon/caterpie/footprint.png index c1c0058e74..2a1c1f3dd1 100644 Binary files a/graphics/pokemon/caterpie/footprint.png and b/graphics/pokemon/caterpie/footprint.png differ diff --git a/graphics/pokemon/celebi/footprint.png b/graphics/pokemon/celebi/footprint.png index 11aa4301cc..2e75f67937 100644 Binary files a/graphics/pokemon/celebi/footprint.png and b/graphics/pokemon/celebi/footprint.png differ diff --git a/graphics/pokemon/chansey/footprint.png b/graphics/pokemon/chansey/footprint.png index 17893b9fb7..20028e8b74 100644 Binary files a/graphics/pokemon/chansey/footprint.png and b/graphics/pokemon/chansey/footprint.png differ diff --git a/graphics/pokemon/charizard/footprint.png b/graphics/pokemon/charizard/footprint.png index e69f383927..86218af32e 100644 Binary files a/graphics/pokemon/charizard/footprint.png and b/graphics/pokemon/charizard/footprint.png differ diff --git a/graphics/pokemon/charmander/footprint.png b/graphics/pokemon/charmander/footprint.png index 2f7723621e..9f0bcbdd91 100644 Binary files a/graphics/pokemon/charmander/footprint.png and b/graphics/pokemon/charmander/footprint.png differ diff --git a/graphics/pokemon/charmeleon/footprint.png b/graphics/pokemon/charmeleon/footprint.png index 6ec15ee204..87305df5be 100644 Binary files a/graphics/pokemon/charmeleon/footprint.png and b/graphics/pokemon/charmeleon/footprint.png differ diff --git a/graphics/pokemon/chikorita/footprint.png b/graphics/pokemon/chikorita/footprint.png index 3ac4abd9f7..bbb7102f66 100644 Binary files a/graphics/pokemon/chikorita/footprint.png and b/graphics/pokemon/chikorita/footprint.png differ diff --git a/graphics/pokemon/chimecho/footprint.png b/graphics/pokemon/chimecho/footprint.png index c7ccf57f37..2449369fd6 100644 Binary files a/graphics/pokemon/chimecho/footprint.png and b/graphics/pokemon/chimecho/footprint.png differ diff --git a/graphics/pokemon/chinchou/footprint.png b/graphics/pokemon/chinchou/footprint.png index c7ccf57f37..2449369fd6 100644 Binary files a/graphics/pokemon/chinchou/footprint.png and b/graphics/pokemon/chinchou/footprint.png differ diff --git a/graphics/pokemon/clamperl/footprint.png b/graphics/pokemon/clamperl/footprint.png index c7ccf57f37..2449369fd6 100644 Binary files a/graphics/pokemon/clamperl/footprint.png and b/graphics/pokemon/clamperl/footprint.png differ diff --git a/graphics/pokemon/claydol/footprint.png b/graphics/pokemon/claydol/footprint.png index 2f0bca1acc..ce84eba58d 100644 Binary files a/graphics/pokemon/claydol/footprint.png and b/graphics/pokemon/claydol/footprint.png differ diff --git a/graphics/pokemon/clefable/footprint.png b/graphics/pokemon/clefable/footprint.png index 5ff3e19a1d..2f3f60fbdf 100644 Binary files a/graphics/pokemon/clefable/footprint.png and b/graphics/pokemon/clefable/footprint.png differ diff --git a/graphics/pokemon/clefairy/footprint.png b/graphics/pokemon/clefairy/footprint.png index 85c25a5dcc..86276e6d0a 100644 Binary files a/graphics/pokemon/clefairy/footprint.png and b/graphics/pokemon/clefairy/footprint.png differ diff --git a/graphics/pokemon/cleffa/footprint.png b/graphics/pokemon/cleffa/footprint.png index 4bf9339ae5..e085ea10fe 100644 Binary files a/graphics/pokemon/cleffa/footprint.png and b/graphics/pokemon/cleffa/footprint.png differ diff --git a/graphics/pokemon/cloyster/footprint.png b/graphics/pokemon/cloyster/footprint.png index c7ccf57f37..2449369fd6 100644 Binary files a/graphics/pokemon/cloyster/footprint.png and b/graphics/pokemon/cloyster/footprint.png differ diff --git a/graphics/pokemon/combusken/footprint.png b/graphics/pokemon/combusken/footprint.png index 6b66429d8d..953e0e676a 100644 Binary files a/graphics/pokemon/combusken/footprint.png and b/graphics/pokemon/combusken/footprint.png differ diff --git a/graphics/pokemon/corphish/footprint.png b/graphics/pokemon/corphish/footprint.png index f624724c71..5717fd7f23 100644 Binary files a/graphics/pokemon/corphish/footprint.png and b/graphics/pokemon/corphish/footprint.png differ diff --git a/graphics/pokemon/corsola/footprint.png b/graphics/pokemon/corsola/footprint.png index bae0aaf92d..458777edeb 100644 Binary files a/graphics/pokemon/corsola/footprint.png and b/graphics/pokemon/corsola/footprint.png differ diff --git a/graphics/pokemon/cradily/footprint.png b/graphics/pokemon/cradily/footprint.png index 998229dc76..394b38da09 100644 Binary files a/graphics/pokemon/cradily/footprint.png and b/graphics/pokemon/cradily/footprint.png differ diff --git a/graphics/pokemon/crawdaunt/footprint.png b/graphics/pokemon/crawdaunt/footprint.png index 9169e28071..bedeeb01aa 100644 Binary files a/graphics/pokemon/crawdaunt/footprint.png and b/graphics/pokemon/crawdaunt/footprint.png differ diff --git a/graphics/pokemon/crobat/footprint.png b/graphics/pokemon/crobat/footprint.png index c7ccf57f37..2449369fd6 100644 Binary files a/graphics/pokemon/crobat/footprint.png and b/graphics/pokemon/crobat/footprint.png differ diff --git a/graphics/pokemon/croconaw/footprint.png b/graphics/pokemon/croconaw/footprint.png index 43da8e68e3..4dec2924f5 100644 Binary files a/graphics/pokemon/croconaw/footprint.png and b/graphics/pokemon/croconaw/footprint.png differ diff --git a/graphics/pokemon/cubone/footprint.png b/graphics/pokemon/cubone/footprint.png index 21deee1a6c..46a6a96595 100644 Binary files a/graphics/pokemon/cubone/footprint.png and b/graphics/pokemon/cubone/footprint.png differ diff --git a/graphics/pokemon/cyndaquil/footprint.png b/graphics/pokemon/cyndaquil/footprint.png index 6413cbaae4..ebdb4a2baa 100644 Binary files a/graphics/pokemon/cyndaquil/footprint.png and b/graphics/pokemon/cyndaquil/footprint.png differ diff --git a/graphics/pokemon/delcatty/footprint.png b/graphics/pokemon/delcatty/footprint.png index 5ff40e5a0d..58035e1ae5 100644 Binary files a/graphics/pokemon/delcatty/footprint.png and b/graphics/pokemon/delcatty/footprint.png differ diff --git a/graphics/pokemon/delibird/footprint.png b/graphics/pokemon/delibird/footprint.png index e7348586ec..56baaef90a 100644 Binary files a/graphics/pokemon/delibird/footprint.png and b/graphics/pokemon/delibird/footprint.png differ diff --git a/graphics/pokemon/deoxys/footprint.png b/graphics/pokemon/deoxys/footprint.png index ea97e4014c..31270c17c1 100644 Binary files a/graphics/pokemon/deoxys/footprint.png and b/graphics/pokemon/deoxys/footprint.png differ diff --git a/graphics/pokemon/dewgong/footprint.png b/graphics/pokemon/dewgong/footprint.png index c7ccf57f37..2449369fd6 100644 Binary files a/graphics/pokemon/dewgong/footprint.png and b/graphics/pokemon/dewgong/footprint.png differ diff --git a/graphics/pokemon/diglett/footprint.png b/graphics/pokemon/diglett/footprint.png index c7ccf57f37..2449369fd6 100644 Binary files a/graphics/pokemon/diglett/footprint.png and b/graphics/pokemon/diglett/footprint.png differ diff --git a/graphics/pokemon/ditto/footprint.png b/graphics/pokemon/ditto/footprint.png index c7ccf57f37..2449369fd6 100644 Binary files a/graphics/pokemon/ditto/footprint.png and b/graphics/pokemon/ditto/footprint.png differ diff --git a/graphics/pokemon/dodrio/footprint.png b/graphics/pokemon/dodrio/footprint.png index 34f85bfb39..045339f23e 100644 Binary files a/graphics/pokemon/dodrio/footprint.png and b/graphics/pokemon/dodrio/footprint.png differ diff --git a/graphics/pokemon/doduo/footprint.png b/graphics/pokemon/doduo/footprint.png index 0710eca523..21ca1be91c 100644 Binary files a/graphics/pokemon/doduo/footprint.png and b/graphics/pokemon/doduo/footprint.png differ diff --git a/graphics/pokemon/donphan/footprint.png b/graphics/pokemon/donphan/footprint.png index 394cf64570..0bb8543ed5 100644 Binary files a/graphics/pokemon/donphan/footprint.png and b/graphics/pokemon/donphan/footprint.png differ diff --git a/graphics/pokemon/dragonair/footprint.png b/graphics/pokemon/dragonair/footprint.png index c7ccf57f37..2449369fd6 100644 Binary files a/graphics/pokemon/dragonair/footprint.png and b/graphics/pokemon/dragonair/footprint.png differ diff --git a/graphics/pokemon/dragonite/footprint.png b/graphics/pokemon/dragonite/footprint.png index 1f41296b0b..d28f2a5295 100644 Binary files a/graphics/pokemon/dragonite/footprint.png and b/graphics/pokemon/dragonite/footprint.png differ diff --git a/graphics/pokemon/dratini/footprint.png b/graphics/pokemon/dratini/footprint.png index c7ccf57f37..2449369fd6 100644 Binary files a/graphics/pokemon/dratini/footprint.png and b/graphics/pokemon/dratini/footprint.png differ diff --git a/graphics/pokemon/drowzee/footprint.png b/graphics/pokemon/drowzee/footprint.png index 23293423e8..fcc93432e8 100644 Binary files a/graphics/pokemon/drowzee/footprint.png and b/graphics/pokemon/drowzee/footprint.png differ diff --git a/graphics/pokemon/dugtrio/footprint.png b/graphics/pokemon/dugtrio/footprint.png index c7ccf57f37..2449369fd6 100644 Binary files a/graphics/pokemon/dugtrio/footprint.png and b/graphics/pokemon/dugtrio/footprint.png differ diff --git a/graphics/pokemon/dunsparce/footprint.png b/graphics/pokemon/dunsparce/footprint.png index c7ccf57f37..2449369fd6 100644 Binary files a/graphics/pokemon/dunsparce/footprint.png and b/graphics/pokemon/dunsparce/footprint.png differ diff --git a/graphics/pokemon/dusclops/footprint.png b/graphics/pokemon/dusclops/footprint.png index 752ffa353c..86cb1fbc8f 100644 Binary files a/graphics/pokemon/dusclops/footprint.png and b/graphics/pokemon/dusclops/footprint.png differ diff --git a/graphics/pokemon/duskull/footprint.png b/graphics/pokemon/duskull/footprint.png index c7ccf57f37..2449369fd6 100644 Binary files a/graphics/pokemon/duskull/footprint.png and b/graphics/pokemon/duskull/footprint.png differ diff --git a/graphics/pokemon/dustox/footprint.png b/graphics/pokemon/dustox/footprint.png index f7cc85bf9c..ea2aae4e82 100644 Binary files a/graphics/pokemon/dustox/footprint.png and b/graphics/pokemon/dustox/footprint.png differ diff --git a/graphics/pokemon/eevee/footprint.png b/graphics/pokemon/eevee/footprint.png index 4e4c01c9f5..793daaba52 100644 Binary files a/graphics/pokemon/eevee/footprint.png and b/graphics/pokemon/eevee/footprint.png differ diff --git a/graphics/pokemon/ekans/footprint.png b/graphics/pokemon/ekans/footprint.png index c7ccf57f37..2449369fd6 100644 Binary files a/graphics/pokemon/ekans/footprint.png and b/graphics/pokemon/ekans/footprint.png differ diff --git a/graphics/pokemon/electabuzz/footprint.png b/graphics/pokemon/electabuzz/footprint.png index b2b4de625b..19608da7a2 100644 Binary files a/graphics/pokemon/electabuzz/footprint.png and b/graphics/pokemon/electabuzz/footprint.png differ diff --git a/graphics/pokemon/electrike/footprint.png b/graphics/pokemon/electrike/footprint.png index 8dd914b35c..03f78314da 100644 Binary files a/graphics/pokemon/electrike/footprint.png and b/graphics/pokemon/electrike/footprint.png differ diff --git a/graphics/pokemon/electrode/footprint.png b/graphics/pokemon/electrode/footprint.png index c7ccf57f37..2449369fd6 100644 Binary files a/graphics/pokemon/electrode/footprint.png and b/graphics/pokemon/electrode/footprint.png differ diff --git a/graphics/pokemon/elekid/footprint.png b/graphics/pokemon/elekid/footprint.png index 15547931cf..2b072fbaeb 100644 Binary files a/graphics/pokemon/elekid/footprint.png and b/graphics/pokemon/elekid/footprint.png differ diff --git a/graphics/pokemon/entei/footprint.png b/graphics/pokemon/entei/footprint.png index 7336df599d..50470342a1 100644 Binary files a/graphics/pokemon/entei/footprint.png and b/graphics/pokemon/entei/footprint.png differ diff --git a/graphics/pokemon/espeon/footprint.png b/graphics/pokemon/espeon/footprint.png index c7b17a4ad4..0d975c620a 100644 Binary files a/graphics/pokemon/espeon/footprint.png and b/graphics/pokemon/espeon/footprint.png differ diff --git a/graphics/pokemon/exeggcute/footprint.png b/graphics/pokemon/exeggcute/footprint.png index c7ccf57f37..2449369fd6 100644 Binary files a/graphics/pokemon/exeggcute/footprint.png and b/graphics/pokemon/exeggcute/footprint.png differ diff --git a/graphics/pokemon/exeggutor/footprint.png b/graphics/pokemon/exeggutor/footprint.png index 6df7122f84..706de0bf4e 100644 Binary files a/graphics/pokemon/exeggutor/footprint.png and b/graphics/pokemon/exeggutor/footprint.png differ diff --git a/graphics/pokemon/exploud/footprint.png b/graphics/pokemon/exploud/footprint.png index b27283a141..daecfd459d 100644 Binary files a/graphics/pokemon/exploud/footprint.png and b/graphics/pokemon/exploud/footprint.png differ diff --git a/graphics/pokemon/farfetchd/footprint.png b/graphics/pokemon/farfetchd/footprint.png index 2f08f732d5..cbfca034d5 100644 Binary files a/graphics/pokemon/farfetchd/footprint.png and b/graphics/pokemon/farfetchd/footprint.png differ diff --git a/graphics/pokemon/fearow/footprint.png b/graphics/pokemon/fearow/footprint.png index 04ea7924d5..82302a8043 100644 Binary files a/graphics/pokemon/fearow/footprint.png and b/graphics/pokemon/fearow/footprint.png differ diff --git a/graphics/pokemon/feebas/footprint.png b/graphics/pokemon/feebas/footprint.png index c7ccf57f37..2449369fd6 100644 Binary files a/graphics/pokemon/feebas/footprint.png and b/graphics/pokemon/feebas/footprint.png differ diff --git a/graphics/pokemon/feraligatr/footprint.png b/graphics/pokemon/feraligatr/footprint.png index efe894289c..d1c37d88de 100644 Binary files a/graphics/pokemon/feraligatr/footprint.png and b/graphics/pokemon/feraligatr/footprint.png differ diff --git a/graphics/pokemon/flaaffy/footprint.png b/graphics/pokemon/flaaffy/footprint.png index d1695ec805..6824d2bb9e 100644 Binary files a/graphics/pokemon/flaaffy/footprint.png and b/graphics/pokemon/flaaffy/footprint.png differ diff --git a/graphics/pokemon/flareon/footprint.png b/graphics/pokemon/flareon/footprint.png index db5d37ed46..aecf35c717 100644 Binary files a/graphics/pokemon/flareon/footprint.png and b/graphics/pokemon/flareon/footprint.png differ diff --git a/graphics/pokemon/flygon/footprint.png b/graphics/pokemon/flygon/footprint.png index 5af877878d..ef9f392cf1 100644 Binary files a/graphics/pokemon/flygon/footprint.png and b/graphics/pokemon/flygon/footprint.png differ diff --git a/graphics/pokemon/forretress/footprint.png b/graphics/pokemon/forretress/footprint.png index c7ccf57f37..2449369fd6 100644 Binary files a/graphics/pokemon/forretress/footprint.png and b/graphics/pokemon/forretress/footprint.png differ diff --git a/graphics/pokemon/furret/footprint.png b/graphics/pokemon/furret/footprint.png index 225445fb3d..cfbf001140 100644 Binary files a/graphics/pokemon/furret/footprint.png and b/graphics/pokemon/furret/footprint.png differ diff --git a/graphics/pokemon/gardevoir/footprint.png b/graphics/pokemon/gardevoir/footprint.png index fd9f4755bc..cf81cde173 100644 Binary files a/graphics/pokemon/gardevoir/footprint.png and b/graphics/pokemon/gardevoir/footprint.png differ diff --git a/graphics/pokemon/gastly/footprint.png b/graphics/pokemon/gastly/footprint.png index c7ccf57f37..2449369fd6 100644 Binary files a/graphics/pokemon/gastly/footprint.png and b/graphics/pokemon/gastly/footprint.png differ diff --git a/graphics/pokemon/gengar/footprint.png b/graphics/pokemon/gengar/footprint.png index 0eb8fcebfa..3f806b4007 100644 Binary files a/graphics/pokemon/gengar/footprint.png and b/graphics/pokemon/gengar/footprint.png differ diff --git a/graphics/pokemon/geodude/footprint.png b/graphics/pokemon/geodude/footprint.png index c7ccf57f37..2449369fd6 100644 Binary files a/graphics/pokemon/geodude/footprint.png and b/graphics/pokemon/geodude/footprint.png differ diff --git a/graphics/pokemon/girafarig/footprint.png b/graphics/pokemon/girafarig/footprint.png index f7af3f622d..86ebcfc5f3 100644 Binary files a/graphics/pokemon/girafarig/footprint.png and b/graphics/pokemon/girafarig/footprint.png differ diff --git a/graphics/pokemon/glalie/footprint.png b/graphics/pokemon/glalie/footprint.png index c7ccf57f37..2449369fd6 100644 Binary files a/graphics/pokemon/glalie/footprint.png and b/graphics/pokemon/glalie/footprint.png differ diff --git a/graphics/pokemon/gligar/footprint.png b/graphics/pokemon/gligar/footprint.png index 3ca9864f06..e873325878 100644 Binary files a/graphics/pokemon/gligar/footprint.png and b/graphics/pokemon/gligar/footprint.png differ diff --git a/graphics/pokemon/gloom/footprint.png b/graphics/pokemon/gloom/footprint.png index 7e9c265e81..13ca4ee71e 100644 Binary files a/graphics/pokemon/gloom/footprint.png and b/graphics/pokemon/gloom/footprint.png differ diff --git a/graphics/pokemon/golbat/footprint.png b/graphics/pokemon/golbat/footprint.png index 65c126fb3e..ebdf4cafa2 100644 Binary files a/graphics/pokemon/golbat/footprint.png and b/graphics/pokemon/golbat/footprint.png differ diff --git a/graphics/pokemon/goldeen/footprint.png b/graphics/pokemon/goldeen/footprint.png index c7ccf57f37..2449369fd6 100644 Binary files a/graphics/pokemon/goldeen/footprint.png and b/graphics/pokemon/goldeen/footprint.png differ diff --git a/graphics/pokemon/golduck/footprint.png b/graphics/pokemon/golduck/footprint.png index 63ba752e43..1835eb8678 100644 Binary files a/graphics/pokemon/golduck/footprint.png and b/graphics/pokemon/golduck/footprint.png differ diff --git a/graphics/pokemon/golem/footprint.png b/graphics/pokemon/golem/footprint.png index 8ddc6345cc..c9f6144429 100644 Binary files a/graphics/pokemon/golem/footprint.png and b/graphics/pokemon/golem/footprint.png differ diff --git a/graphics/pokemon/gorebyss/footprint.png b/graphics/pokemon/gorebyss/footprint.png index c7ccf57f37..2449369fd6 100644 Binary files a/graphics/pokemon/gorebyss/footprint.png and b/graphics/pokemon/gorebyss/footprint.png differ diff --git a/graphics/pokemon/granbull/footprint.png b/graphics/pokemon/granbull/footprint.png index 010b5fb67c..23e71ed4dc 100644 Binary files a/graphics/pokemon/granbull/footprint.png and b/graphics/pokemon/granbull/footprint.png differ diff --git a/graphics/pokemon/graveler/footprint.png b/graphics/pokemon/graveler/footprint.png index c836ad3f4d..c3aacfe36b 100644 Binary files a/graphics/pokemon/graveler/footprint.png and b/graphics/pokemon/graveler/footprint.png differ diff --git a/graphics/pokemon/grimer/footprint.png b/graphics/pokemon/grimer/footprint.png index c7ccf57f37..2449369fd6 100644 Binary files a/graphics/pokemon/grimer/footprint.png and b/graphics/pokemon/grimer/footprint.png differ diff --git a/graphics/pokemon/groudon/footprint.png b/graphics/pokemon/groudon/footprint.png index cb80ba48d5..a7eaa14c98 100644 Binary files a/graphics/pokemon/groudon/footprint.png and b/graphics/pokemon/groudon/footprint.png differ diff --git a/graphics/pokemon/grovyle/footprint.png b/graphics/pokemon/grovyle/footprint.png index c78ea507c9..149efec284 100644 Binary files a/graphics/pokemon/grovyle/footprint.png and b/graphics/pokemon/grovyle/footprint.png differ diff --git a/graphics/pokemon/growlithe/footprint.png b/graphics/pokemon/growlithe/footprint.png index 2517cdcbad..b9af4c119c 100644 Binary files a/graphics/pokemon/growlithe/footprint.png and b/graphics/pokemon/growlithe/footprint.png differ diff --git a/graphics/pokemon/grumpig/footprint.png b/graphics/pokemon/grumpig/footprint.png index ddff0e5001..deea604340 100644 Binary files a/graphics/pokemon/grumpig/footprint.png and b/graphics/pokemon/grumpig/footprint.png differ diff --git a/graphics/pokemon/gulpin/footprint.png b/graphics/pokemon/gulpin/footprint.png index c7ccf57f37..2449369fd6 100644 Binary files a/graphics/pokemon/gulpin/footprint.png and b/graphics/pokemon/gulpin/footprint.png differ diff --git a/graphics/pokemon/gyarados/footprint.png b/graphics/pokemon/gyarados/footprint.png index c7ccf57f37..2449369fd6 100644 Binary files a/graphics/pokemon/gyarados/footprint.png and b/graphics/pokemon/gyarados/footprint.png differ diff --git a/graphics/pokemon/hariyama/footprint.png b/graphics/pokemon/hariyama/footprint.png index ab5d9f3697..4c0cd23d31 100644 Binary files a/graphics/pokemon/hariyama/footprint.png and b/graphics/pokemon/hariyama/footprint.png differ diff --git a/graphics/pokemon/haunter/footprint.png b/graphics/pokemon/haunter/footprint.png index c7ccf57f37..2449369fd6 100644 Binary files a/graphics/pokemon/haunter/footprint.png and b/graphics/pokemon/haunter/footprint.png differ diff --git a/graphics/pokemon/heracross/footprint.png b/graphics/pokemon/heracross/footprint.png index a740a17c9f..42bc4e3a0c 100644 Binary files a/graphics/pokemon/heracross/footprint.png and b/graphics/pokemon/heracross/footprint.png differ diff --git a/graphics/pokemon/hitmonchan/footprint.png b/graphics/pokemon/hitmonchan/footprint.png index cfd1efd54a..4a185f878a 100644 Binary files a/graphics/pokemon/hitmonchan/footprint.png and b/graphics/pokemon/hitmonchan/footprint.png differ diff --git a/graphics/pokemon/hitmonlee/footprint.png b/graphics/pokemon/hitmonlee/footprint.png index 5051201107..466e6f81b4 100644 Binary files a/graphics/pokemon/hitmonlee/footprint.png and b/graphics/pokemon/hitmonlee/footprint.png differ diff --git a/graphics/pokemon/hitmontop/footprint.png b/graphics/pokemon/hitmontop/footprint.png index ba8c1cca2a..16e5173ce4 100644 Binary files a/graphics/pokemon/hitmontop/footprint.png and b/graphics/pokemon/hitmontop/footprint.png differ diff --git a/graphics/pokemon/ho_oh/footprint.png b/graphics/pokemon/ho_oh/footprint.png index adceb38787..a6cfc377d5 100644 Binary files a/graphics/pokemon/ho_oh/footprint.png and b/graphics/pokemon/ho_oh/footprint.png differ diff --git a/graphics/pokemon/hoothoot/footprint.png b/graphics/pokemon/hoothoot/footprint.png index 1eacf9116c..8be22e121f 100644 Binary files a/graphics/pokemon/hoothoot/footprint.png and b/graphics/pokemon/hoothoot/footprint.png differ diff --git a/graphics/pokemon/hoppip/footprint.png b/graphics/pokemon/hoppip/footprint.png index 0be22ed869..d482d69e5e 100644 Binary files a/graphics/pokemon/hoppip/footprint.png and b/graphics/pokemon/hoppip/footprint.png differ diff --git a/graphics/pokemon/horsea/footprint.png b/graphics/pokemon/horsea/footprint.png index c7ccf57f37..2449369fd6 100644 Binary files a/graphics/pokemon/horsea/footprint.png and b/graphics/pokemon/horsea/footprint.png differ diff --git a/graphics/pokemon/houndoom/footprint.png b/graphics/pokemon/houndoom/footprint.png index b1f2c80f42..f2ba4670a4 100644 Binary files a/graphics/pokemon/houndoom/footprint.png and b/graphics/pokemon/houndoom/footprint.png differ diff --git a/graphics/pokemon/houndour/footprint.png b/graphics/pokemon/houndour/footprint.png index 3f81614316..bbc1115d75 100644 Binary files a/graphics/pokemon/houndour/footprint.png and b/graphics/pokemon/houndour/footprint.png differ diff --git a/graphics/pokemon/huntail/footprint.png b/graphics/pokemon/huntail/footprint.png index c7ccf57f37..2449369fd6 100644 Binary files a/graphics/pokemon/huntail/footprint.png and b/graphics/pokemon/huntail/footprint.png differ diff --git a/graphics/pokemon/hypno/footprint.png b/graphics/pokemon/hypno/footprint.png index 51f7349738..173db7238f 100644 Binary files a/graphics/pokemon/hypno/footprint.png and b/graphics/pokemon/hypno/footprint.png differ diff --git a/graphics/pokemon/igglybuff/footprint.png b/graphics/pokemon/igglybuff/footprint.png index bbb7352a60..d24c1760df 100644 Binary files a/graphics/pokemon/igglybuff/footprint.png and b/graphics/pokemon/igglybuff/footprint.png differ diff --git a/graphics/pokemon/illumise/footprint.png b/graphics/pokemon/illumise/footprint.png index 451d532b2f..d39b4f0054 100644 Binary files a/graphics/pokemon/illumise/footprint.png and b/graphics/pokemon/illumise/footprint.png differ diff --git a/graphics/pokemon/ivysaur/footprint.png b/graphics/pokemon/ivysaur/footprint.png index 29206b935e..d837294f9d 100644 Binary files a/graphics/pokemon/ivysaur/footprint.png and b/graphics/pokemon/ivysaur/footprint.png differ diff --git a/graphics/pokemon/jigglypuff/footprint.png b/graphics/pokemon/jigglypuff/footprint.png index 59b5f1171b..b6d981b104 100644 Binary files a/graphics/pokemon/jigglypuff/footprint.png and b/graphics/pokemon/jigglypuff/footprint.png differ diff --git a/graphics/pokemon/jirachi/footprint.png b/graphics/pokemon/jirachi/footprint.png index 856bb5faaf..1153c76dfe 100644 Binary files a/graphics/pokemon/jirachi/footprint.png and b/graphics/pokemon/jirachi/footprint.png differ diff --git a/graphics/pokemon/jolteon/footprint.png b/graphics/pokemon/jolteon/footprint.png index d1e9477b3d..450c3c4953 100644 Binary files a/graphics/pokemon/jolteon/footprint.png and b/graphics/pokemon/jolteon/footprint.png differ diff --git a/graphics/pokemon/jumpluff/footprint.png b/graphics/pokemon/jumpluff/footprint.png index 9cd0f59383..5d01e97d69 100644 Binary files a/graphics/pokemon/jumpluff/footprint.png and b/graphics/pokemon/jumpluff/footprint.png differ diff --git a/graphics/pokemon/jynx/footprint.png b/graphics/pokemon/jynx/footprint.png index c7ccf57f37..2449369fd6 100644 Binary files a/graphics/pokemon/jynx/footprint.png and b/graphics/pokemon/jynx/footprint.png differ diff --git a/graphics/pokemon/kabuto/footprint.png b/graphics/pokemon/kabuto/footprint.png index 6965dbe60f..a9b0e33c28 100644 Binary files a/graphics/pokemon/kabuto/footprint.png and b/graphics/pokemon/kabuto/footprint.png differ diff --git a/graphics/pokemon/kabutops/footprint.png b/graphics/pokemon/kabutops/footprint.png index 127b741d82..54f193c502 100644 Binary files a/graphics/pokemon/kabutops/footprint.png and b/graphics/pokemon/kabutops/footprint.png differ diff --git a/graphics/pokemon/kadabra/footprint.png b/graphics/pokemon/kadabra/footprint.png index a699f29879..8cbac4eddc 100644 Binary files a/graphics/pokemon/kadabra/footprint.png and b/graphics/pokemon/kadabra/footprint.png differ diff --git a/graphics/pokemon/kakuna/footprint.png b/graphics/pokemon/kakuna/footprint.png index c7ccf57f37..2449369fd6 100644 Binary files a/graphics/pokemon/kakuna/footprint.png and b/graphics/pokemon/kakuna/footprint.png differ diff --git a/graphics/pokemon/kangaskhan/footprint.png b/graphics/pokemon/kangaskhan/footprint.png index 7753a4a71b..05b12acf93 100644 Binary files a/graphics/pokemon/kangaskhan/footprint.png and b/graphics/pokemon/kangaskhan/footprint.png differ diff --git a/graphics/pokemon/kecleon/footprint.png b/graphics/pokemon/kecleon/footprint.png index 3c69684379..986c726fa0 100644 Binary files a/graphics/pokemon/kecleon/footprint.png and b/graphics/pokemon/kecleon/footprint.png differ diff --git a/graphics/pokemon/kingdra/footprint.png b/graphics/pokemon/kingdra/footprint.png index c7ccf57f37..2449369fd6 100644 Binary files a/graphics/pokemon/kingdra/footprint.png and b/graphics/pokemon/kingdra/footprint.png differ diff --git a/graphics/pokemon/kingler/footprint.png b/graphics/pokemon/kingler/footprint.png index b75db30dc4..d1db4154e9 100644 Binary files a/graphics/pokemon/kingler/footprint.png and b/graphics/pokemon/kingler/footprint.png differ diff --git a/graphics/pokemon/kirlia/footprint.png b/graphics/pokemon/kirlia/footprint.png index c1c0058e74..2a1c1f3dd1 100644 Binary files a/graphics/pokemon/kirlia/footprint.png and b/graphics/pokemon/kirlia/footprint.png differ diff --git a/graphics/pokemon/koffing/footprint.png b/graphics/pokemon/koffing/footprint.png index c7ccf57f37..2449369fd6 100644 Binary files a/graphics/pokemon/koffing/footprint.png and b/graphics/pokemon/koffing/footprint.png differ diff --git a/graphics/pokemon/krabby/footprint.png b/graphics/pokemon/krabby/footprint.png index eae28fe5ee..1b70f1bdff 100644 Binary files a/graphics/pokemon/krabby/footprint.png and b/graphics/pokemon/krabby/footprint.png differ diff --git a/graphics/pokemon/kyogre/footprint.png b/graphics/pokemon/kyogre/footprint.png index 8d58ee4621..de1ea4d0d0 100644 Binary files a/graphics/pokemon/kyogre/footprint.png and b/graphics/pokemon/kyogre/footprint.png differ diff --git a/graphics/pokemon/lairon/footprint.png b/graphics/pokemon/lairon/footprint.png index 9a6527c1c9..e465f42d51 100644 Binary files a/graphics/pokemon/lairon/footprint.png and b/graphics/pokemon/lairon/footprint.png differ diff --git a/graphics/pokemon/lanturn/footprint.png b/graphics/pokemon/lanturn/footprint.png index c7ccf57f37..2449369fd6 100644 Binary files a/graphics/pokemon/lanturn/footprint.png and b/graphics/pokemon/lanturn/footprint.png differ diff --git a/graphics/pokemon/lapras/footprint.png b/graphics/pokemon/lapras/footprint.png index c7ccf57f37..2449369fd6 100644 Binary files a/graphics/pokemon/lapras/footprint.png and b/graphics/pokemon/lapras/footprint.png differ diff --git a/graphics/pokemon/larvitar/footprint.png b/graphics/pokemon/larvitar/footprint.png index a31e8d7f36..52d2eaab9c 100644 Binary files a/graphics/pokemon/larvitar/footprint.png and b/graphics/pokemon/larvitar/footprint.png differ diff --git a/graphics/pokemon/latias/footprint.png b/graphics/pokemon/latias/footprint.png index 0419630c15..f0f34c5004 100644 Binary files a/graphics/pokemon/latias/footprint.png and b/graphics/pokemon/latias/footprint.png differ diff --git a/graphics/pokemon/latios/footprint.png b/graphics/pokemon/latios/footprint.png index f77d0fa867..7c22956b66 100644 Binary files a/graphics/pokemon/latios/footprint.png and b/graphics/pokemon/latios/footprint.png differ diff --git a/graphics/pokemon/ledian/footprint.png b/graphics/pokemon/ledian/footprint.png index 5c2d6221f6..640bea34cf 100644 Binary files a/graphics/pokemon/ledian/footprint.png and b/graphics/pokemon/ledian/footprint.png differ diff --git a/graphics/pokemon/ledyba/footprint.png b/graphics/pokemon/ledyba/footprint.png index a52ed25606..1ec169c42f 100644 Binary files a/graphics/pokemon/ledyba/footprint.png and b/graphics/pokemon/ledyba/footprint.png differ diff --git a/graphics/pokemon/lickitung/footprint.png b/graphics/pokemon/lickitung/footprint.png index 1f88f23fc6..fb92001035 100644 Binary files a/graphics/pokemon/lickitung/footprint.png and b/graphics/pokemon/lickitung/footprint.png differ diff --git a/graphics/pokemon/lileep/footprint.png b/graphics/pokemon/lileep/footprint.png index ce6b2790e1..ee68853045 100644 Binary files a/graphics/pokemon/lileep/footprint.png and b/graphics/pokemon/lileep/footprint.png differ diff --git a/graphics/pokemon/linoone/footprint.png b/graphics/pokemon/linoone/footprint.png index 8d83166d3e..ff6019b7bc 100644 Binary files a/graphics/pokemon/linoone/footprint.png and b/graphics/pokemon/linoone/footprint.png differ diff --git a/graphics/pokemon/lombre/footprint.png b/graphics/pokemon/lombre/footprint.png index 051e5ab550..333b1c7b44 100644 Binary files a/graphics/pokemon/lombre/footprint.png and b/graphics/pokemon/lombre/footprint.png differ diff --git a/graphics/pokemon/lotad/footprint.png b/graphics/pokemon/lotad/footprint.png index caac6945f1..1e075c103b 100644 Binary files a/graphics/pokemon/lotad/footprint.png and b/graphics/pokemon/lotad/footprint.png differ diff --git a/graphics/pokemon/loudred/footprint.png b/graphics/pokemon/loudred/footprint.png index 604af90004..8468d3ea6c 100644 Binary files a/graphics/pokemon/loudred/footprint.png and b/graphics/pokemon/loudred/footprint.png differ diff --git a/graphics/pokemon/ludicolo/footprint.png b/graphics/pokemon/ludicolo/footprint.png index 23163f358c..e5aa759abc 100644 Binary files a/graphics/pokemon/ludicolo/footprint.png and b/graphics/pokemon/ludicolo/footprint.png differ diff --git a/graphics/pokemon/lugia/footprint.png b/graphics/pokemon/lugia/footprint.png index e6642ed07f..bb807c6dd5 100644 Binary files a/graphics/pokemon/lugia/footprint.png and b/graphics/pokemon/lugia/footprint.png differ diff --git a/graphics/pokemon/lunatone/footprint.png b/graphics/pokemon/lunatone/footprint.png index c7ccf57f37..2449369fd6 100644 Binary files a/graphics/pokemon/lunatone/footprint.png and b/graphics/pokemon/lunatone/footprint.png differ diff --git a/graphics/pokemon/luvdisc/footprint.png b/graphics/pokemon/luvdisc/footprint.png index c7ccf57f37..2449369fd6 100644 Binary files a/graphics/pokemon/luvdisc/footprint.png and b/graphics/pokemon/luvdisc/footprint.png differ diff --git a/graphics/pokemon/machamp/footprint.png b/graphics/pokemon/machamp/footprint.png index e562fd08cb..bfccf5bdb0 100644 Binary files a/graphics/pokemon/machamp/footprint.png and b/graphics/pokemon/machamp/footprint.png differ diff --git a/graphics/pokemon/machoke/footprint.png b/graphics/pokemon/machoke/footprint.png index d9009d3e19..5cde0083d5 100644 Binary files a/graphics/pokemon/machoke/footprint.png and b/graphics/pokemon/machoke/footprint.png differ diff --git a/graphics/pokemon/machop/footprint.png b/graphics/pokemon/machop/footprint.png index 8b2808553b..9bb3ae0633 100644 Binary files a/graphics/pokemon/machop/footprint.png and b/graphics/pokemon/machop/footprint.png differ diff --git a/graphics/pokemon/magby/footprint.png b/graphics/pokemon/magby/footprint.png index 655d0ca2b8..45e1a343e0 100644 Binary files a/graphics/pokemon/magby/footprint.png and b/graphics/pokemon/magby/footprint.png differ diff --git a/graphics/pokemon/magcargo/footprint.png b/graphics/pokemon/magcargo/footprint.png index c7ccf57f37..2449369fd6 100644 Binary files a/graphics/pokemon/magcargo/footprint.png and b/graphics/pokemon/magcargo/footprint.png differ diff --git a/graphics/pokemon/magikarp/footprint.png b/graphics/pokemon/magikarp/footprint.png index c7ccf57f37..2449369fd6 100644 Binary files a/graphics/pokemon/magikarp/footprint.png and b/graphics/pokemon/magikarp/footprint.png differ diff --git a/graphics/pokemon/magmar/footprint.png b/graphics/pokemon/magmar/footprint.png index 17de53a464..328f67d2ef 100644 Binary files a/graphics/pokemon/magmar/footprint.png and b/graphics/pokemon/magmar/footprint.png differ diff --git a/graphics/pokemon/magnemite/footprint.png b/graphics/pokemon/magnemite/footprint.png index f710e50283..3f8f930cbe 100644 Binary files a/graphics/pokemon/magnemite/footprint.png and b/graphics/pokemon/magnemite/footprint.png differ diff --git a/graphics/pokemon/magneton/footprint.png b/graphics/pokemon/magneton/footprint.png index 00b8b0ebf4..aa37675775 100644 Binary files a/graphics/pokemon/magneton/footprint.png and b/graphics/pokemon/magneton/footprint.png differ diff --git a/graphics/pokemon/makuhita/footprint.png b/graphics/pokemon/makuhita/footprint.png index 3da20ccb31..4f2aca69ec 100644 Binary files a/graphics/pokemon/makuhita/footprint.png and b/graphics/pokemon/makuhita/footprint.png differ diff --git a/graphics/pokemon/manectric/footprint.png b/graphics/pokemon/manectric/footprint.png index 4f4903bf94..a3ab1c56cb 100644 Binary files a/graphics/pokemon/manectric/footprint.png and b/graphics/pokemon/manectric/footprint.png differ diff --git a/graphics/pokemon/mankey/footprint.png b/graphics/pokemon/mankey/footprint.png index f02036af50..4881d17c33 100644 Binary files a/graphics/pokemon/mankey/footprint.png and b/graphics/pokemon/mankey/footprint.png differ diff --git a/graphics/pokemon/mantine/footprint.png b/graphics/pokemon/mantine/footprint.png index c7ccf57f37..2449369fd6 100644 Binary files a/graphics/pokemon/mantine/footprint.png and b/graphics/pokemon/mantine/footprint.png differ diff --git a/graphics/pokemon/mareep/footprint.png b/graphics/pokemon/mareep/footprint.png index 2913a4c484..8e89572b4a 100644 Binary files a/graphics/pokemon/mareep/footprint.png and b/graphics/pokemon/mareep/footprint.png differ diff --git a/graphics/pokemon/marill/footprint.png b/graphics/pokemon/marill/footprint.png index a09d8f2c01..f70b3ea55d 100644 Binary files a/graphics/pokemon/marill/footprint.png and b/graphics/pokemon/marill/footprint.png differ diff --git a/graphics/pokemon/marowak/footprint.png b/graphics/pokemon/marowak/footprint.png index fbde41d04b..e05d5d0005 100644 Binary files a/graphics/pokemon/marowak/footprint.png and b/graphics/pokemon/marowak/footprint.png differ diff --git a/graphics/pokemon/marshtomp/footprint.png b/graphics/pokemon/marshtomp/footprint.png index 3c232ccad8..6ea1827142 100644 Binary files a/graphics/pokemon/marshtomp/footprint.png and b/graphics/pokemon/marshtomp/footprint.png differ diff --git a/graphics/pokemon/masquerain/footprint.png b/graphics/pokemon/masquerain/footprint.png index c7ccf57f37..2449369fd6 100644 Binary files a/graphics/pokemon/masquerain/footprint.png and b/graphics/pokemon/masquerain/footprint.png differ diff --git a/graphics/pokemon/mawile/footprint.png b/graphics/pokemon/mawile/footprint.png index 5195fd4df2..8eeae6a81e 100644 Binary files a/graphics/pokemon/mawile/footprint.png and b/graphics/pokemon/mawile/footprint.png differ diff --git a/graphics/pokemon/medicham/footprint.png b/graphics/pokemon/medicham/footprint.png index 804e8c1d85..da5cdd23bd 100644 Binary files a/graphics/pokemon/medicham/footprint.png and b/graphics/pokemon/medicham/footprint.png differ diff --git a/graphics/pokemon/meditite/footprint.png b/graphics/pokemon/meditite/footprint.png index 034cb0df8d..4cf72d9aef 100644 Binary files a/graphics/pokemon/meditite/footprint.png and b/graphics/pokemon/meditite/footprint.png differ diff --git a/graphics/pokemon/meganium/footprint.png b/graphics/pokemon/meganium/footprint.png index 39303ac4fa..1592e145c0 100644 Binary files a/graphics/pokemon/meganium/footprint.png and b/graphics/pokemon/meganium/footprint.png differ diff --git a/graphics/pokemon/meowth/footprint.png b/graphics/pokemon/meowth/footprint.png index 7dc20ada78..d7283ba439 100644 Binary files a/graphics/pokemon/meowth/footprint.png and b/graphics/pokemon/meowth/footprint.png differ diff --git a/graphics/pokemon/metagross/footprint.png b/graphics/pokemon/metagross/footprint.png index 07f91d604f..fd7039efd3 100644 Binary files a/graphics/pokemon/metagross/footprint.png and b/graphics/pokemon/metagross/footprint.png differ diff --git a/graphics/pokemon/metang/footprint.png b/graphics/pokemon/metang/footprint.png index 5b0f8f5b05..a91a3d5329 100644 Binary files a/graphics/pokemon/metang/footprint.png and b/graphics/pokemon/metang/footprint.png differ diff --git a/graphics/pokemon/metapod/footprint.png b/graphics/pokemon/metapod/footprint.png index c7ccf57f37..2449369fd6 100644 Binary files a/graphics/pokemon/metapod/footprint.png and b/graphics/pokemon/metapod/footprint.png differ diff --git a/graphics/pokemon/mew/footprint.png b/graphics/pokemon/mew/footprint.png index afbba43acc..e380642b80 100644 Binary files a/graphics/pokemon/mew/footprint.png and b/graphics/pokemon/mew/footprint.png differ diff --git a/graphics/pokemon/mewtwo/footprint.png b/graphics/pokemon/mewtwo/footprint.png index 0f7573dd3b..bedffad65d 100644 Binary files a/graphics/pokemon/mewtwo/footprint.png and b/graphics/pokemon/mewtwo/footprint.png differ diff --git a/graphics/pokemon/mightyena/footprint.png b/graphics/pokemon/mightyena/footprint.png index b39af65bc0..f769364351 100644 Binary files a/graphics/pokemon/mightyena/footprint.png and b/graphics/pokemon/mightyena/footprint.png differ diff --git a/graphics/pokemon/milotic/footprint.png b/graphics/pokemon/milotic/footprint.png index c7ccf57f37..2449369fd6 100644 Binary files a/graphics/pokemon/milotic/footprint.png and b/graphics/pokemon/milotic/footprint.png differ diff --git a/graphics/pokemon/miltank/footprint.png b/graphics/pokemon/miltank/footprint.png index a7162cd211..4f3d0e6968 100644 Binary files a/graphics/pokemon/miltank/footprint.png and b/graphics/pokemon/miltank/footprint.png differ diff --git a/graphics/pokemon/minun/footprint.png b/graphics/pokemon/minun/footprint.png index 1071b8069e..3a2365e168 100644 Binary files a/graphics/pokemon/minun/footprint.png and b/graphics/pokemon/minun/footprint.png differ diff --git a/graphics/pokemon/misdreavus/footprint.png b/graphics/pokemon/misdreavus/footprint.png index c7ccf57f37..2449369fd6 100644 Binary files a/graphics/pokemon/misdreavus/footprint.png and b/graphics/pokemon/misdreavus/footprint.png differ diff --git a/graphics/pokemon/moltres/footprint.png b/graphics/pokemon/moltres/footprint.png index 3900403bd9..6c590ccda7 100644 Binary files a/graphics/pokemon/moltres/footprint.png and b/graphics/pokemon/moltres/footprint.png differ diff --git a/graphics/pokemon/mr_mime/footprint.png b/graphics/pokemon/mr_mime/footprint.png index cb0aff1a3b..6e8b15e7e6 100644 Binary files a/graphics/pokemon/mr_mime/footprint.png and b/graphics/pokemon/mr_mime/footprint.png differ diff --git a/graphics/pokemon/mudkip/footprint.png b/graphics/pokemon/mudkip/footprint.png index 490db6e257..f06163ae0a 100644 Binary files a/graphics/pokemon/mudkip/footprint.png and b/graphics/pokemon/mudkip/footprint.png differ diff --git a/graphics/pokemon/muk/footprint.png b/graphics/pokemon/muk/footprint.png index c7ccf57f37..2449369fd6 100644 Binary files a/graphics/pokemon/muk/footprint.png and b/graphics/pokemon/muk/footprint.png differ diff --git a/graphics/pokemon/murkrow/footprint.png b/graphics/pokemon/murkrow/footprint.png index 0f05668344..901413be8f 100644 Binary files a/graphics/pokemon/murkrow/footprint.png and b/graphics/pokemon/murkrow/footprint.png differ diff --git a/graphics/pokemon/natu/footprint.png b/graphics/pokemon/natu/footprint.png index f17821fc00..348068d1c5 100644 Binary files a/graphics/pokemon/natu/footprint.png and b/graphics/pokemon/natu/footprint.png differ diff --git a/graphics/pokemon/nidoking/footprint.png b/graphics/pokemon/nidoking/footprint.png index 577e14f302..c0e6690e10 100644 Binary files a/graphics/pokemon/nidoking/footprint.png and b/graphics/pokemon/nidoking/footprint.png differ diff --git a/graphics/pokemon/nidoqueen/footprint.png b/graphics/pokemon/nidoqueen/footprint.png index c3156e6215..a5b2555929 100644 Binary files a/graphics/pokemon/nidoqueen/footprint.png and b/graphics/pokemon/nidoqueen/footprint.png differ diff --git a/graphics/pokemon/nidoran_f/footprint.png b/graphics/pokemon/nidoran_f/footprint.png index f673df1128..d0111077b5 100644 Binary files a/graphics/pokemon/nidoran_f/footprint.png and b/graphics/pokemon/nidoran_f/footprint.png differ diff --git a/graphics/pokemon/nidoran_m/footprint.png b/graphics/pokemon/nidoran_m/footprint.png index 874c607817..a6b3e3b4ad 100644 Binary files a/graphics/pokemon/nidoran_m/footprint.png and b/graphics/pokemon/nidoran_m/footprint.png differ diff --git a/graphics/pokemon/nidorina/footprint.png b/graphics/pokemon/nidorina/footprint.png index 94553054a5..922ef8dbd1 100644 Binary files a/graphics/pokemon/nidorina/footprint.png and b/graphics/pokemon/nidorina/footprint.png differ diff --git a/graphics/pokemon/nidorino/footprint.png b/graphics/pokemon/nidorino/footprint.png index eaa67b3791..9ab80e766a 100644 Binary files a/graphics/pokemon/nidorino/footprint.png and b/graphics/pokemon/nidorino/footprint.png differ diff --git a/graphics/pokemon/nincada/footprint.png b/graphics/pokemon/nincada/footprint.png index deea05721e..69d2b0491d 100644 Binary files a/graphics/pokemon/nincada/footprint.png and b/graphics/pokemon/nincada/footprint.png differ diff --git a/graphics/pokemon/ninetales/footprint.png b/graphics/pokemon/ninetales/footprint.png index 3f1f0247e5..51eb9f83b8 100644 Binary files a/graphics/pokemon/ninetales/footprint.png and b/graphics/pokemon/ninetales/footprint.png differ diff --git a/graphics/pokemon/ninjask/footprint.png b/graphics/pokemon/ninjask/footprint.png index eacba16dc8..f582fcc058 100644 Binary files a/graphics/pokemon/ninjask/footprint.png and b/graphics/pokemon/ninjask/footprint.png differ diff --git a/graphics/pokemon/noctowl/footprint.png b/graphics/pokemon/noctowl/footprint.png index 89ed409e98..0386b465ac 100644 Binary files a/graphics/pokemon/noctowl/footprint.png and b/graphics/pokemon/noctowl/footprint.png differ diff --git a/graphics/pokemon/nosepass/footprint.png b/graphics/pokemon/nosepass/footprint.png index 9b9ad27082..ad8673add3 100644 Binary files a/graphics/pokemon/nosepass/footprint.png and b/graphics/pokemon/nosepass/footprint.png differ diff --git a/graphics/pokemon/numel/footprint.png b/graphics/pokemon/numel/footprint.png index 6238f94004..f01ad15927 100644 Binary files a/graphics/pokemon/numel/footprint.png and b/graphics/pokemon/numel/footprint.png differ diff --git a/graphics/pokemon/nuzleaf/footprint.png b/graphics/pokemon/nuzleaf/footprint.png index b35288e059..bd9be61709 100644 Binary files a/graphics/pokemon/nuzleaf/footprint.png and b/graphics/pokemon/nuzleaf/footprint.png differ diff --git a/graphics/pokemon/octillery/footprint.png b/graphics/pokemon/octillery/footprint.png index afa1f5433c..2306c5b0be 100644 Binary files a/graphics/pokemon/octillery/footprint.png and b/graphics/pokemon/octillery/footprint.png differ diff --git a/graphics/pokemon/oddish/footprint.png b/graphics/pokemon/oddish/footprint.png index d381752735..e5c7eed223 100644 Binary files a/graphics/pokemon/oddish/footprint.png and b/graphics/pokemon/oddish/footprint.png differ diff --git a/graphics/pokemon/omanyte/footprint.png b/graphics/pokemon/omanyte/footprint.png index f5eb9fdba0..ec2dde19c6 100644 Binary files a/graphics/pokemon/omanyte/footprint.png and b/graphics/pokemon/omanyte/footprint.png differ diff --git a/graphics/pokemon/omastar/footprint.png b/graphics/pokemon/omastar/footprint.png index fdd911ecf7..e587f45031 100644 Binary files a/graphics/pokemon/omastar/footprint.png and b/graphics/pokemon/omastar/footprint.png differ diff --git a/graphics/pokemon/onix/footprint.png b/graphics/pokemon/onix/footprint.png index c7ccf57f37..2449369fd6 100644 Binary files a/graphics/pokemon/onix/footprint.png and b/graphics/pokemon/onix/footprint.png differ diff --git a/graphics/pokemon/paras/footprint.png b/graphics/pokemon/paras/footprint.png index f8d7574d2e..01abc74f10 100644 Binary files a/graphics/pokemon/paras/footprint.png and b/graphics/pokemon/paras/footprint.png differ diff --git a/graphics/pokemon/parasect/footprint.png b/graphics/pokemon/parasect/footprint.png index e0f1715f2f..ed9221adef 100644 Binary files a/graphics/pokemon/parasect/footprint.png and b/graphics/pokemon/parasect/footprint.png differ diff --git a/graphics/pokemon/pelipper/footprint.png b/graphics/pokemon/pelipper/footprint.png index 54718d259e..bfb9703f55 100644 Binary files a/graphics/pokemon/pelipper/footprint.png and b/graphics/pokemon/pelipper/footprint.png differ diff --git a/graphics/pokemon/persian/footprint.png b/graphics/pokemon/persian/footprint.png index 33f25f0aa8..99a567fc1b 100644 Binary files a/graphics/pokemon/persian/footprint.png and b/graphics/pokemon/persian/footprint.png differ diff --git a/graphics/pokemon/phanpy/footprint.png b/graphics/pokemon/phanpy/footprint.png index 70498b18f6..61eb3ebac3 100644 Binary files a/graphics/pokemon/phanpy/footprint.png and b/graphics/pokemon/phanpy/footprint.png differ diff --git a/graphics/pokemon/pichu/footprint.png b/graphics/pokemon/pichu/footprint.png index 823c7e32d4..62d8245041 100644 Binary files a/graphics/pokemon/pichu/footprint.png and b/graphics/pokemon/pichu/footprint.png differ diff --git a/graphics/pokemon/pidgeot/footprint.png b/graphics/pokemon/pidgeot/footprint.png index 025341554c..ef4ad1a916 100644 Binary files a/graphics/pokemon/pidgeot/footprint.png and b/graphics/pokemon/pidgeot/footprint.png differ diff --git a/graphics/pokemon/pidgeotto/footprint.png b/graphics/pokemon/pidgeotto/footprint.png index c507f72b83..8d9cd78e0d 100644 Binary files a/graphics/pokemon/pidgeotto/footprint.png and b/graphics/pokemon/pidgeotto/footprint.png differ diff --git a/graphics/pokemon/pidgey/footprint.png b/graphics/pokemon/pidgey/footprint.png index 6fe6e42824..3422576bec 100644 Binary files a/graphics/pokemon/pidgey/footprint.png and b/graphics/pokemon/pidgey/footprint.png differ diff --git a/graphics/pokemon/pikachu/footprint.png b/graphics/pokemon/pikachu/footprint.png index a8ee2e4ac9..9145eff5b8 100644 Binary files a/graphics/pokemon/pikachu/footprint.png and b/graphics/pokemon/pikachu/footprint.png differ diff --git a/graphics/pokemon/piloswine/footprint.png b/graphics/pokemon/piloswine/footprint.png index 0b7405eceb..122f3e3529 100644 Binary files a/graphics/pokemon/piloswine/footprint.png and b/graphics/pokemon/piloswine/footprint.png differ diff --git a/graphics/pokemon/pineco/footprint.png b/graphics/pokemon/pineco/footprint.png index c7ccf57f37..2449369fd6 100644 Binary files a/graphics/pokemon/pineco/footprint.png and b/graphics/pokemon/pineco/footprint.png differ diff --git a/graphics/pokemon/pinsir/footprint.png b/graphics/pokemon/pinsir/footprint.png index ebd22101ee..58c6540633 100644 Binary files a/graphics/pokemon/pinsir/footprint.png and b/graphics/pokemon/pinsir/footprint.png differ diff --git a/graphics/pokemon/plusle/footprint.png b/graphics/pokemon/plusle/footprint.png index 1071b8069e..3a2365e168 100644 Binary files a/graphics/pokemon/plusle/footprint.png and b/graphics/pokemon/plusle/footprint.png differ diff --git a/graphics/pokemon/politoed/footprint.png b/graphics/pokemon/politoed/footprint.png index f97b789949..9499c60ecc 100644 Binary files a/graphics/pokemon/politoed/footprint.png and b/graphics/pokemon/politoed/footprint.png differ diff --git a/graphics/pokemon/poliwag/footprint.png b/graphics/pokemon/poliwag/footprint.png index 04e411726b..adf2d1a6c8 100644 Binary files a/graphics/pokemon/poliwag/footprint.png and b/graphics/pokemon/poliwag/footprint.png differ diff --git a/graphics/pokemon/poliwhirl/footprint.png b/graphics/pokemon/poliwhirl/footprint.png index 14f6c2ea91..e058bb601e 100644 Binary files a/graphics/pokemon/poliwhirl/footprint.png and b/graphics/pokemon/poliwhirl/footprint.png differ diff --git a/graphics/pokemon/poliwrath/footprint.png b/graphics/pokemon/poliwrath/footprint.png index 8f562fcef6..393f8191c8 100644 Binary files a/graphics/pokemon/poliwrath/footprint.png and b/graphics/pokemon/poliwrath/footprint.png differ diff --git a/graphics/pokemon/ponyta/footprint.png b/graphics/pokemon/ponyta/footprint.png index 906ee7a5b5..593b4eae81 100644 Binary files a/graphics/pokemon/ponyta/footprint.png and b/graphics/pokemon/ponyta/footprint.png differ diff --git a/graphics/pokemon/poochyena/footprint.png b/graphics/pokemon/poochyena/footprint.png index c4afe995f0..820645c7cd 100644 Binary files a/graphics/pokemon/poochyena/footprint.png and b/graphics/pokemon/poochyena/footprint.png differ diff --git a/graphics/pokemon/porygon/footprint.png b/graphics/pokemon/porygon/footprint.png index 02243e3bc4..39764c24a4 100644 Binary files a/graphics/pokemon/porygon/footprint.png and b/graphics/pokemon/porygon/footprint.png differ diff --git a/graphics/pokemon/porygon2/footprint.png b/graphics/pokemon/porygon2/footprint.png index f92224af35..40f947b463 100644 Binary files a/graphics/pokemon/porygon2/footprint.png and b/graphics/pokemon/porygon2/footprint.png differ diff --git a/graphics/pokemon/primeape/footprint.png b/graphics/pokemon/primeape/footprint.png index f4c90ee175..76f77d387e 100644 Binary files a/graphics/pokemon/primeape/footprint.png and b/graphics/pokemon/primeape/footprint.png differ diff --git a/graphics/pokemon/psyduck/footprint.png b/graphics/pokemon/psyduck/footprint.png index 4dff448005..fc06dcd4f6 100644 Binary files a/graphics/pokemon/psyduck/footprint.png and b/graphics/pokemon/psyduck/footprint.png differ diff --git a/graphics/pokemon/pupitar/footprint.png b/graphics/pokemon/pupitar/footprint.png index c7ccf57f37..2449369fd6 100644 Binary files a/graphics/pokemon/pupitar/footprint.png and b/graphics/pokemon/pupitar/footprint.png differ diff --git a/graphics/pokemon/quagsire/footprint.png b/graphics/pokemon/quagsire/footprint.png index d04039763d..5d84baf3d0 100644 Binary files a/graphics/pokemon/quagsire/footprint.png and b/graphics/pokemon/quagsire/footprint.png differ diff --git a/graphics/pokemon/question_mark/footprint.png b/graphics/pokemon/question_mark/footprint.png index 7c4f45eaad..8da752a46b 100644 Binary files a/graphics/pokemon/question_mark/footprint.png and b/graphics/pokemon/question_mark/footprint.png differ diff --git a/graphics/pokemon/quilava/footprint.png b/graphics/pokemon/quilava/footprint.png index 28324dd7c9..46c185bffe 100644 Binary files a/graphics/pokemon/quilava/footprint.png and b/graphics/pokemon/quilava/footprint.png differ diff --git a/graphics/pokemon/qwilfish/footprint.png b/graphics/pokemon/qwilfish/footprint.png index c7ccf57f37..2449369fd6 100644 Binary files a/graphics/pokemon/qwilfish/footprint.png and b/graphics/pokemon/qwilfish/footprint.png differ diff --git a/graphics/pokemon/raichu/footprint.png b/graphics/pokemon/raichu/footprint.png index 9f2ac3993e..3f631ab874 100644 Binary files a/graphics/pokemon/raichu/footprint.png and b/graphics/pokemon/raichu/footprint.png differ diff --git a/graphics/pokemon/raikou/footprint.png b/graphics/pokemon/raikou/footprint.png index b7081dcd35..b7cd9c7dbf 100644 Binary files a/graphics/pokemon/raikou/footprint.png and b/graphics/pokemon/raikou/footprint.png differ diff --git a/graphics/pokemon/ralts/footprint.png b/graphics/pokemon/ralts/footprint.png index 6965dbe60f..a9b0e33c28 100644 Binary files a/graphics/pokemon/ralts/footprint.png and b/graphics/pokemon/ralts/footprint.png differ diff --git a/graphics/pokemon/rapidash/footprint.png b/graphics/pokemon/rapidash/footprint.png index 3361489fd9..ffa2c80a9f 100644 Binary files a/graphics/pokemon/rapidash/footprint.png and b/graphics/pokemon/rapidash/footprint.png differ diff --git a/graphics/pokemon/raticate/footprint.png b/graphics/pokemon/raticate/footprint.png index 6628cfdd75..e1462e71a4 100644 Binary files a/graphics/pokemon/raticate/footprint.png and b/graphics/pokemon/raticate/footprint.png differ diff --git a/graphics/pokemon/rattata/footprint.png b/graphics/pokemon/rattata/footprint.png index 008b1ddc00..2f8e0312a5 100644 Binary files a/graphics/pokemon/rattata/footprint.png and b/graphics/pokemon/rattata/footprint.png differ diff --git a/graphics/pokemon/rayquaza/footprint.png b/graphics/pokemon/rayquaza/footprint.png index c7ccf57f37..2449369fd6 100644 Binary files a/graphics/pokemon/rayquaza/footprint.png and b/graphics/pokemon/rayquaza/footprint.png differ diff --git a/graphics/pokemon/regice/footprint.png b/graphics/pokemon/regice/footprint.png index 6965dbe60f..a9b0e33c28 100644 Binary files a/graphics/pokemon/regice/footprint.png and b/graphics/pokemon/regice/footprint.png differ diff --git a/graphics/pokemon/regirock/footprint.png b/graphics/pokemon/regirock/footprint.png index 44da2a57fd..d7a4380a77 100644 Binary files a/graphics/pokemon/regirock/footprint.png and b/graphics/pokemon/regirock/footprint.png differ diff --git a/graphics/pokemon/registeel/footprint.png b/graphics/pokemon/registeel/footprint.png index e191faabc8..7f4ee57970 100644 Binary files a/graphics/pokemon/registeel/footprint.png and b/graphics/pokemon/registeel/footprint.png differ diff --git a/graphics/pokemon/relicanth/footprint.png b/graphics/pokemon/relicanth/footprint.png index c7ccf57f37..2449369fd6 100644 Binary files a/graphics/pokemon/relicanth/footprint.png and b/graphics/pokemon/relicanth/footprint.png differ diff --git a/graphics/pokemon/remoraid/footprint.png b/graphics/pokemon/remoraid/footprint.png index c7ccf57f37..2449369fd6 100644 Binary files a/graphics/pokemon/remoraid/footprint.png and b/graphics/pokemon/remoraid/footprint.png differ diff --git a/graphics/pokemon/rhydon/footprint.png b/graphics/pokemon/rhydon/footprint.png index df6d8fced9..cd8a9952d8 100644 Binary files a/graphics/pokemon/rhydon/footprint.png and b/graphics/pokemon/rhydon/footprint.png differ diff --git a/graphics/pokemon/rhyhorn/footprint.png b/graphics/pokemon/rhyhorn/footprint.png index 632b753c24..84e88598c7 100644 Binary files a/graphics/pokemon/rhyhorn/footprint.png and b/graphics/pokemon/rhyhorn/footprint.png differ diff --git a/graphics/pokemon/roselia/footprint.png b/graphics/pokemon/roselia/footprint.png index bedf2ab695..6ea3494a03 100644 Binary files a/graphics/pokemon/roselia/footprint.png and b/graphics/pokemon/roselia/footprint.png differ diff --git a/graphics/pokemon/sableye/footprint.png b/graphics/pokemon/sableye/footprint.png index 204d8da54d..45f0e8bfe9 100644 Binary files a/graphics/pokemon/sableye/footprint.png and b/graphics/pokemon/sableye/footprint.png differ diff --git a/graphics/pokemon/salamence/footprint.png b/graphics/pokemon/salamence/footprint.png index 2440a370fd..b943d07653 100644 Binary files a/graphics/pokemon/salamence/footprint.png and b/graphics/pokemon/salamence/footprint.png differ diff --git a/graphics/pokemon/sandshrew/footprint.png b/graphics/pokemon/sandshrew/footprint.png index 481de0993e..030c4165d7 100644 Binary files a/graphics/pokemon/sandshrew/footprint.png and b/graphics/pokemon/sandshrew/footprint.png differ diff --git a/graphics/pokemon/sandslash/footprint.png b/graphics/pokemon/sandslash/footprint.png index 431ca99be6..231e78e9fa 100644 Binary files a/graphics/pokemon/sandslash/footprint.png and b/graphics/pokemon/sandslash/footprint.png differ diff --git a/graphics/pokemon/sceptile/footprint.png b/graphics/pokemon/sceptile/footprint.png index 1958a47780..fb829943fc 100644 Binary files a/graphics/pokemon/sceptile/footprint.png and b/graphics/pokemon/sceptile/footprint.png differ diff --git a/graphics/pokemon/scizor/footprint.png b/graphics/pokemon/scizor/footprint.png index 00824374ad..9ab66e47e3 100644 Binary files a/graphics/pokemon/scizor/footprint.png and b/graphics/pokemon/scizor/footprint.png differ diff --git a/graphics/pokemon/scyther/footprint.png b/graphics/pokemon/scyther/footprint.png index c6b7730285..e12c46d3c8 100644 Binary files a/graphics/pokemon/scyther/footprint.png and b/graphics/pokemon/scyther/footprint.png differ diff --git a/graphics/pokemon/seadra/footprint.png b/graphics/pokemon/seadra/footprint.png index c7ccf57f37..2449369fd6 100644 Binary files a/graphics/pokemon/seadra/footprint.png and b/graphics/pokemon/seadra/footprint.png differ diff --git a/graphics/pokemon/seaking/footprint.png b/graphics/pokemon/seaking/footprint.png index c7ccf57f37..2449369fd6 100644 Binary files a/graphics/pokemon/seaking/footprint.png and b/graphics/pokemon/seaking/footprint.png differ diff --git a/graphics/pokemon/sealeo/footprint.png b/graphics/pokemon/sealeo/footprint.png index c7ccf57f37..2449369fd6 100644 Binary files a/graphics/pokemon/sealeo/footprint.png and b/graphics/pokemon/sealeo/footprint.png differ diff --git a/graphics/pokemon/seedot/footprint.png b/graphics/pokemon/seedot/footprint.png index 9b41f13eda..ef9f52256b 100644 Binary files a/graphics/pokemon/seedot/footprint.png and b/graphics/pokemon/seedot/footprint.png differ diff --git a/graphics/pokemon/seel/footprint.png b/graphics/pokemon/seel/footprint.png index c7ccf57f37..2449369fd6 100644 Binary files a/graphics/pokemon/seel/footprint.png and b/graphics/pokemon/seel/footprint.png differ diff --git a/graphics/pokemon/sentret/footprint.png b/graphics/pokemon/sentret/footprint.png index 49ab94c0b5..398cdb4623 100644 Binary files a/graphics/pokemon/sentret/footprint.png and b/graphics/pokemon/sentret/footprint.png differ diff --git a/graphics/pokemon/seviper/footprint.png b/graphics/pokemon/seviper/footprint.png index c7ccf57f37..2449369fd6 100644 Binary files a/graphics/pokemon/seviper/footprint.png and b/graphics/pokemon/seviper/footprint.png differ diff --git a/graphics/pokemon/sharpedo/footprint.png b/graphics/pokemon/sharpedo/footprint.png index c7ccf57f37..2449369fd6 100644 Binary files a/graphics/pokemon/sharpedo/footprint.png and b/graphics/pokemon/sharpedo/footprint.png differ diff --git a/graphics/pokemon/shedinja/footprint.png b/graphics/pokemon/shedinja/footprint.png index d4118d5e6e..928f915e96 100644 Binary files a/graphics/pokemon/shedinja/footprint.png and b/graphics/pokemon/shedinja/footprint.png differ diff --git a/graphics/pokemon/shelgon/footprint.png b/graphics/pokemon/shelgon/footprint.png index e2d61b9bc8..5c7a6ab3f0 100644 Binary files a/graphics/pokemon/shelgon/footprint.png and b/graphics/pokemon/shelgon/footprint.png differ diff --git a/graphics/pokemon/shellder/footprint.png b/graphics/pokemon/shellder/footprint.png index c7ccf57f37..2449369fd6 100644 Binary files a/graphics/pokemon/shellder/footprint.png and b/graphics/pokemon/shellder/footprint.png differ diff --git a/graphics/pokemon/shiftry/footprint.png b/graphics/pokemon/shiftry/footprint.png index 3ea82a3dab..3b3a4f53d3 100644 Binary files a/graphics/pokemon/shiftry/footprint.png and b/graphics/pokemon/shiftry/footprint.png differ diff --git a/graphics/pokemon/shroomish/footprint.png b/graphics/pokemon/shroomish/footprint.png index d3a5986ce4..1187f2d5e7 100644 Binary files a/graphics/pokemon/shroomish/footprint.png and b/graphics/pokemon/shroomish/footprint.png differ diff --git a/graphics/pokemon/shuckle/footprint.png b/graphics/pokemon/shuckle/footprint.png index e26b60bcd3..169bb4cf5b 100644 Binary files a/graphics/pokemon/shuckle/footprint.png and b/graphics/pokemon/shuckle/footprint.png differ diff --git a/graphics/pokemon/shuppet/footprint.png b/graphics/pokemon/shuppet/footprint.png index c7ccf57f37..2449369fd6 100644 Binary files a/graphics/pokemon/shuppet/footprint.png and b/graphics/pokemon/shuppet/footprint.png differ diff --git a/graphics/pokemon/silcoon/footprint.png b/graphics/pokemon/silcoon/footprint.png index c7ccf57f37..2449369fd6 100644 Binary files a/graphics/pokemon/silcoon/footprint.png and b/graphics/pokemon/silcoon/footprint.png differ diff --git a/graphics/pokemon/skarmory/footprint.png b/graphics/pokemon/skarmory/footprint.png index 1134fec294..3f0b2d3119 100644 Binary files a/graphics/pokemon/skarmory/footprint.png and b/graphics/pokemon/skarmory/footprint.png differ diff --git a/graphics/pokemon/skiploom/footprint.png b/graphics/pokemon/skiploom/footprint.png index efa7f50342..544ef0ea6d 100644 Binary files a/graphics/pokemon/skiploom/footprint.png and b/graphics/pokemon/skiploom/footprint.png differ diff --git a/graphics/pokemon/skitty/footprint.png b/graphics/pokemon/skitty/footprint.png index 355153dcb5..2e78b5093e 100644 Binary files a/graphics/pokemon/skitty/footprint.png and b/graphics/pokemon/skitty/footprint.png differ diff --git a/graphics/pokemon/slaking/footprint.png b/graphics/pokemon/slaking/footprint.png index c2c20413ba..68e966d7d5 100644 Binary files a/graphics/pokemon/slaking/footprint.png and b/graphics/pokemon/slaking/footprint.png differ diff --git a/graphics/pokemon/slakoth/footprint.png b/graphics/pokemon/slakoth/footprint.png index ec258f41b0..8aedbd79ed 100644 Binary files a/graphics/pokemon/slakoth/footprint.png and b/graphics/pokemon/slakoth/footprint.png differ diff --git a/graphics/pokemon/slowbro/footprint.png b/graphics/pokemon/slowbro/footprint.png index c4f82e4058..0bcb0789c4 100644 Binary files a/graphics/pokemon/slowbro/footprint.png and b/graphics/pokemon/slowbro/footprint.png differ diff --git a/graphics/pokemon/slowking/footprint.png b/graphics/pokemon/slowking/footprint.png index 52593624a2..e85d1307c4 100644 Binary files a/graphics/pokemon/slowking/footprint.png and b/graphics/pokemon/slowking/footprint.png differ diff --git a/graphics/pokemon/slowpoke/footprint.png b/graphics/pokemon/slowpoke/footprint.png index a66ebbc32e..f3330b57f6 100644 Binary files a/graphics/pokemon/slowpoke/footprint.png and b/graphics/pokemon/slowpoke/footprint.png differ diff --git a/graphics/pokemon/slugma/footprint.png b/graphics/pokemon/slugma/footprint.png index c7ccf57f37..2449369fd6 100644 Binary files a/graphics/pokemon/slugma/footprint.png and b/graphics/pokemon/slugma/footprint.png differ diff --git a/graphics/pokemon/smeargle/footprint.png b/graphics/pokemon/smeargle/footprint.png index b946130cdf..8521b26fea 100644 Binary files a/graphics/pokemon/smeargle/footprint.png and b/graphics/pokemon/smeargle/footprint.png differ diff --git a/graphics/pokemon/smoochum/footprint.png b/graphics/pokemon/smoochum/footprint.png index e901d9334c..15461e49a3 100644 Binary files a/graphics/pokemon/smoochum/footprint.png and b/graphics/pokemon/smoochum/footprint.png differ diff --git a/graphics/pokemon/sneasel/footprint.png b/graphics/pokemon/sneasel/footprint.png index 2159ef3dcf..c3472d32a6 100644 Binary files a/graphics/pokemon/sneasel/footprint.png and b/graphics/pokemon/sneasel/footprint.png differ diff --git a/graphics/pokemon/snorlax/footprint.png b/graphics/pokemon/snorlax/footprint.png index d3d25c4bc8..d7f605b5e0 100644 Binary files a/graphics/pokemon/snorlax/footprint.png and b/graphics/pokemon/snorlax/footprint.png differ diff --git a/graphics/pokemon/snorunt/footprint.png b/graphics/pokemon/snorunt/footprint.png index 14277b5068..31a4ac394f 100644 Binary files a/graphics/pokemon/snorunt/footprint.png and b/graphics/pokemon/snorunt/footprint.png differ diff --git a/graphics/pokemon/snubbull/footprint.png b/graphics/pokemon/snubbull/footprint.png index 443847cdd4..b7eb2028c8 100644 Binary files a/graphics/pokemon/snubbull/footprint.png and b/graphics/pokemon/snubbull/footprint.png differ diff --git a/graphics/pokemon/solrock/footprint.png b/graphics/pokemon/solrock/footprint.png index c7ccf57f37..2449369fd6 100644 Binary files a/graphics/pokemon/solrock/footprint.png and b/graphics/pokemon/solrock/footprint.png differ diff --git a/graphics/pokemon/spearow/footprint.png b/graphics/pokemon/spearow/footprint.png index 6fe6e42824..3422576bec 100644 Binary files a/graphics/pokemon/spearow/footprint.png and b/graphics/pokemon/spearow/footprint.png differ diff --git a/graphics/pokemon/spheal/footprint.png b/graphics/pokemon/spheal/footprint.png index c7ccf57f37..2449369fd6 100644 Binary files a/graphics/pokemon/spheal/footprint.png and b/graphics/pokemon/spheal/footprint.png differ diff --git a/graphics/pokemon/spinarak/footprint.png b/graphics/pokemon/spinarak/footprint.png index 6965dbe60f..a9b0e33c28 100644 Binary files a/graphics/pokemon/spinarak/footprint.png and b/graphics/pokemon/spinarak/footprint.png differ diff --git a/graphics/pokemon/spinda/footprint.png b/graphics/pokemon/spinda/footprint.png index 7be943a892..688e1ec1e3 100644 Binary files a/graphics/pokemon/spinda/footprint.png and b/graphics/pokemon/spinda/footprint.png differ diff --git a/graphics/pokemon/spoink/footprint.png b/graphics/pokemon/spoink/footprint.png index c7ccf57f37..2449369fd6 100644 Binary files a/graphics/pokemon/spoink/footprint.png and b/graphics/pokemon/spoink/footprint.png differ diff --git a/graphics/pokemon/squirtle/footprint.png b/graphics/pokemon/squirtle/footprint.png index 696cd6d421..82e01756ce 100644 Binary files a/graphics/pokemon/squirtle/footprint.png and b/graphics/pokemon/squirtle/footprint.png differ diff --git a/graphics/pokemon/stantler/footprint.png b/graphics/pokemon/stantler/footprint.png index 7f2b0f5325..62e2eb062d 100644 Binary files a/graphics/pokemon/stantler/footprint.png and b/graphics/pokemon/stantler/footprint.png differ diff --git a/graphics/pokemon/starmie/footprint.png b/graphics/pokemon/starmie/footprint.png index c1c0058e74..2a1c1f3dd1 100644 Binary files a/graphics/pokemon/starmie/footprint.png and b/graphics/pokemon/starmie/footprint.png differ diff --git a/graphics/pokemon/staryu/footprint.png b/graphics/pokemon/staryu/footprint.png index c1c0058e74..2a1c1f3dd1 100644 Binary files a/graphics/pokemon/staryu/footprint.png and b/graphics/pokemon/staryu/footprint.png differ diff --git a/graphics/pokemon/steelix/footprint.png b/graphics/pokemon/steelix/footprint.png index c7ccf57f37..2449369fd6 100644 Binary files a/graphics/pokemon/steelix/footprint.png and b/graphics/pokemon/steelix/footprint.png differ diff --git a/graphics/pokemon/sudowoodo/footprint.png b/graphics/pokemon/sudowoodo/footprint.png index 4ed751a794..560ef5e60e 100644 Binary files a/graphics/pokemon/sudowoodo/footprint.png and b/graphics/pokemon/sudowoodo/footprint.png differ diff --git a/graphics/pokemon/suicune/footprint.png b/graphics/pokemon/suicune/footprint.png index 946c35dd0e..57258fb0c3 100644 Binary files a/graphics/pokemon/suicune/footprint.png and b/graphics/pokemon/suicune/footprint.png differ diff --git a/graphics/pokemon/sunflora/footprint.png b/graphics/pokemon/sunflora/footprint.png index f6de3ca9f5..fbc42e7a60 100644 Binary files a/graphics/pokemon/sunflora/footprint.png and b/graphics/pokemon/sunflora/footprint.png differ diff --git a/graphics/pokemon/sunkern/footprint.png b/graphics/pokemon/sunkern/footprint.png index c7ccf57f37..2449369fd6 100644 Binary files a/graphics/pokemon/sunkern/footprint.png and b/graphics/pokemon/sunkern/footprint.png differ diff --git a/graphics/pokemon/surskit/footprint.png b/graphics/pokemon/surskit/footprint.png index e4945976fc..bbaf5c68cd 100644 Binary files a/graphics/pokemon/surskit/footprint.png and b/graphics/pokemon/surskit/footprint.png differ diff --git a/graphics/pokemon/swablu/footprint.png b/graphics/pokemon/swablu/footprint.png index 7e71113c3a..747e2caaa8 100644 Binary files a/graphics/pokemon/swablu/footprint.png and b/graphics/pokemon/swablu/footprint.png differ diff --git a/graphics/pokemon/swalot/footprint.png b/graphics/pokemon/swalot/footprint.png index c7ccf57f37..2449369fd6 100644 Binary files a/graphics/pokemon/swalot/footprint.png and b/graphics/pokemon/swalot/footprint.png differ diff --git a/graphics/pokemon/swampert/footprint.png b/graphics/pokemon/swampert/footprint.png index ed223e641d..65f7d7e67c 100644 Binary files a/graphics/pokemon/swampert/footprint.png and b/graphics/pokemon/swampert/footprint.png differ diff --git a/graphics/pokemon/swellow/footprint.png b/graphics/pokemon/swellow/footprint.png index f44a71c29b..9757114c02 100644 Binary files a/graphics/pokemon/swellow/footprint.png and b/graphics/pokemon/swellow/footprint.png differ diff --git a/graphics/pokemon/swinub/footprint.png b/graphics/pokemon/swinub/footprint.png index fb56709ec6..c1573fe84a 100644 Binary files a/graphics/pokemon/swinub/footprint.png and b/graphics/pokemon/swinub/footprint.png differ diff --git a/graphics/pokemon/taillow/footprint.png b/graphics/pokemon/taillow/footprint.png index dbf5c5c6b4..a54a5c93fe 100644 Binary files a/graphics/pokemon/taillow/footprint.png and b/graphics/pokemon/taillow/footprint.png differ diff --git a/graphics/pokemon/tangela/footprint.png b/graphics/pokemon/tangela/footprint.png index c05d3b4375..2b0c03fa5f 100644 Binary files a/graphics/pokemon/tangela/footprint.png and b/graphics/pokemon/tangela/footprint.png differ diff --git a/graphics/pokemon/tauros/footprint.png b/graphics/pokemon/tauros/footprint.png index 602011c6d6..3ae3a980d1 100644 Binary files a/graphics/pokemon/tauros/footprint.png and b/graphics/pokemon/tauros/footprint.png differ diff --git a/graphics/pokemon/teddiursa/footprint.png b/graphics/pokemon/teddiursa/footprint.png index def88c3233..6e0bdfd171 100644 Binary files a/graphics/pokemon/teddiursa/footprint.png and b/graphics/pokemon/teddiursa/footprint.png differ diff --git a/graphics/pokemon/tentacool/footprint.png b/graphics/pokemon/tentacool/footprint.png index c7ccf57f37..2449369fd6 100644 Binary files a/graphics/pokemon/tentacool/footprint.png and b/graphics/pokemon/tentacool/footprint.png differ diff --git a/graphics/pokemon/tentacruel/footprint.png b/graphics/pokemon/tentacruel/footprint.png index c7ccf57f37..2449369fd6 100644 Binary files a/graphics/pokemon/tentacruel/footprint.png and b/graphics/pokemon/tentacruel/footprint.png differ diff --git a/graphics/pokemon/togepi/footprint.png b/graphics/pokemon/togepi/footprint.png index 84e75101b1..cf50fcd8fd 100644 Binary files a/graphics/pokemon/togepi/footprint.png and b/graphics/pokemon/togepi/footprint.png differ diff --git a/graphics/pokemon/togetic/footprint.png b/graphics/pokemon/togetic/footprint.png index b15913fa81..239f42d98d 100644 Binary files a/graphics/pokemon/togetic/footprint.png and b/graphics/pokemon/togetic/footprint.png differ diff --git a/graphics/pokemon/torchic/footprint.png b/graphics/pokemon/torchic/footprint.png index 955afa82ac..4149f9bb1f 100644 Binary files a/graphics/pokemon/torchic/footprint.png and b/graphics/pokemon/torchic/footprint.png differ diff --git a/graphics/pokemon/torkoal/footprint.png b/graphics/pokemon/torkoal/footprint.png index 208f3bb775..35facf20e4 100644 Binary files a/graphics/pokemon/torkoal/footprint.png and b/graphics/pokemon/torkoal/footprint.png differ diff --git a/graphics/pokemon/totodile/footprint.png b/graphics/pokemon/totodile/footprint.png index 2102602737..dd3fd2e209 100644 Binary files a/graphics/pokemon/totodile/footprint.png and b/graphics/pokemon/totodile/footprint.png differ diff --git a/graphics/pokemon/trapinch/footprint.png b/graphics/pokemon/trapinch/footprint.png index c3e6e785b2..be4eeb90ef 100644 Binary files a/graphics/pokemon/trapinch/footprint.png and b/graphics/pokemon/trapinch/footprint.png differ diff --git a/graphics/pokemon/treecko/footprint.png b/graphics/pokemon/treecko/footprint.png index ed3854702e..695c6a891d 100644 Binary files a/graphics/pokemon/treecko/footprint.png and b/graphics/pokemon/treecko/footprint.png differ diff --git a/graphics/pokemon/tropius/footprint.png b/graphics/pokemon/tropius/footprint.png index e6e7e8795a..3aaaaaf673 100644 Binary files a/graphics/pokemon/tropius/footprint.png and b/graphics/pokemon/tropius/footprint.png differ diff --git a/graphics/pokemon/typhlosion/footprint.png b/graphics/pokemon/typhlosion/footprint.png index 1d4492cf13..989b796e5e 100644 Binary files a/graphics/pokemon/typhlosion/footprint.png and b/graphics/pokemon/typhlosion/footprint.png differ diff --git a/graphics/pokemon/tyranitar/footprint.png b/graphics/pokemon/tyranitar/footprint.png index ea12c75b08..c5e6dfdd7f 100644 Binary files a/graphics/pokemon/tyranitar/footprint.png and b/graphics/pokemon/tyranitar/footprint.png differ diff --git a/graphics/pokemon/tyrogue/footprint.png b/graphics/pokemon/tyrogue/footprint.png index 0ef849eb89..66cbd80806 100644 Binary files a/graphics/pokemon/tyrogue/footprint.png and b/graphics/pokemon/tyrogue/footprint.png differ diff --git a/graphics/pokemon/umbreon/footprint.png b/graphics/pokemon/umbreon/footprint.png index a1d897dc37..97ce7db2bc 100644 Binary files a/graphics/pokemon/umbreon/footprint.png and b/graphics/pokemon/umbreon/footprint.png differ diff --git a/graphics/pokemon/unown/footprint.png b/graphics/pokemon/unown/footprint.png index c7ccf57f37..2449369fd6 100644 Binary files a/graphics/pokemon/unown/footprint.png and b/graphics/pokemon/unown/footprint.png differ diff --git a/graphics/pokemon/ursaring/footprint.png b/graphics/pokemon/ursaring/footprint.png index b1023bd3b7..c27c42e8c5 100644 Binary files a/graphics/pokemon/ursaring/footprint.png and b/graphics/pokemon/ursaring/footprint.png differ diff --git a/graphics/pokemon/vaporeon/footprint.png b/graphics/pokemon/vaporeon/footprint.png index 2b44d4b249..7e40d8198e 100644 Binary files a/graphics/pokemon/vaporeon/footprint.png and b/graphics/pokemon/vaporeon/footprint.png differ diff --git a/graphics/pokemon/venomoth/footprint.png b/graphics/pokemon/venomoth/footprint.png index 6965dbe60f..a9b0e33c28 100644 Binary files a/graphics/pokemon/venomoth/footprint.png and b/graphics/pokemon/venomoth/footprint.png differ diff --git a/graphics/pokemon/venonat/footprint.png b/graphics/pokemon/venonat/footprint.png index 3675945c92..f1f332f81d 100644 Binary files a/graphics/pokemon/venonat/footprint.png and b/graphics/pokemon/venonat/footprint.png differ diff --git a/graphics/pokemon/venusaur/footprint.png b/graphics/pokemon/venusaur/footprint.png index bdef2c818e..188dd96081 100644 Binary files a/graphics/pokemon/venusaur/footprint.png and b/graphics/pokemon/venusaur/footprint.png differ diff --git a/graphics/pokemon/vibrava/footprint.png b/graphics/pokemon/vibrava/footprint.png index fdf76f9f22..b935f853a3 100644 Binary files a/graphics/pokemon/vibrava/footprint.png and b/graphics/pokemon/vibrava/footprint.png differ diff --git a/graphics/pokemon/victreebel/footprint.png b/graphics/pokemon/victreebel/footprint.png index c7ccf57f37..2449369fd6 100644 Binary files a/graphics/pokemon/victreebel/footprint.png and b/graphics/pokemon/victreebel/footprint.png differ diff --git a/graphics/pokemon/vigoroth/footprint.png b/graphics/pokemon/vigoroth/footprint.png index bc10a72309..8a39db031e 100644 Binary files a/graphics/pokemon/vigoroth/footprint.png and b/graphics/pokemon/vigoroth/footprint.png differ diff --git a/graphics/pokemon/vileplume/footprint.png b/graphics/pokemon/vileplume/footprint.png index 8fd5bdf83d..ba0d3fca8e 100644 Binary files a/graphics/pokemon/vileplume/footprint.png and b/graphics/pokemon/vileplume/footprint.png differ diff --git a/graphics/pokemon/volbeat/footprint.png b/graphics/pokemon/volbeat/footprint.png index 916c59f606..f5df06fdc3 100644 Binary files a/graphics/pokemon/volbeat/footprint.png and b/graphics/pokemon/volbeat/footprint.png differ diff --git a/graphics/pokemon/voltorb/footprint.png b/graphics/pokemon/voltorb/footprint.png index c7ccf57f37..2449369fd6 100644 Binary files a/graphics/pokemon/voltorb/footprint.png and b/graphics/pokemon/voltorb/footprint.png differ diff --git a/graphics/pokemon/vulpix/footprint.png b/graphics/pokemon/vulpix/footprint.png index a0a655ca61..064b2bcf74 100644 Binary files a/graphics/pokemon/vulpix/footprint.png and b/graphics/pokemon/vulpix/footprint.png differ diff --git a/graphics/pokemon/wailmer/footprint.png b/graphics/pokemon/wailmer/footprint.png index c7ccf57f37..2449369fd6 100644 Binary files a/graphics/pokemon/wailmer/footprint.png and b/graphics/pokemon/wailmer/footprint.png differ diff --git a/graphics/pokemon/wailord/footprint.png b/graphics/pokemon/wailord/footprint.png index c7ccf57f37..2449369fd6 100644 Binary files a/graphics/pokemon/wailord/footprint.png and b/graphics/pokemon/wailord/footprint.png differ diff --git a/graphics/pokemon/walrein/footprint.png b/graphics/pokemon/walrein/footprint.png index c7ccf57f37..2449369fd6 100644 Binary files a/graphics/pokemon/walrein/footprint.png and b/graphics/pokemon/walrein/footprint.png differ diff --git a/graphics/pokemon/wartortle/footprint.png b/graphics/pokemon/wartortle/footprint.png index 4dd1264966..948a3c86a0 100644 Binary files a/graphics/pokemon/wartortle/footprint.png and b/graphics/pokemon/wartortle/footprint.png differ diff --git a/graphics/pokemon/weedle/footprint.png b/graphics/pokemon/weedle/footprint.png index c1c0058e74..2a1c1f3dd1 100644 Binary files a/graphics/pokemon/weedle/footprint.png and b/graphics/pokemon/weedle/footprint.png differ diff --git a/graphics/pokemon/weepinbell/footprint.png b/graphics/pokemon/weepinbell/footprint.png index c7ccf57f37..2449369fd6 100644 Binary files a/graphics/pokemon/weepinbell/footprint.png and b/graphics/pokemon/weepinbell/footprint.png differ diff --git a/graphics/pokemon/weezing/footprint.png b/graphics/pokemon/weezing/footprint.png index c7ccf57f37..2449369fd6 100644 Binary files a/graphics/pokemon/weezing/footprint.png and b/graphics/pokemon/weezing/footprint.png differ diff --git a/graphics/pokemon/whiscash/footprint.png b/graphics/pokemon/whiscash/footprint.png index c7ccf57f37..2449369fd6 100644 Binary files a/graphics/pokemon/whiscash/footprint.png and b/graphics/pokemon/whiscash/footprint.png differ diff --git a/graphics/pokemon/whismur/footprint.png b/graphics/pokemon/whismur/footprint.png index a2ad42b4ca..a3a49ad7c0 100644 Binary files a/graphics/pokemon/whismur/footprint.png and b/graphics/pokemon/whismur/footprint.png differ diff --git a/graphics/pokemon/wigglytuff/footprint.png b/graphics/pokemon/wigglytuff/footprint.png index 68ce8eda38..d563a24174 100644 Binary files a/graphics/pokemon/wigglytuff/footprint.png and b/graphics/pokemon/wigglytuff/footprint.png differ diff --git a/graphics/pokemon/wingull/footprint.png b/graphics/pokemon/wingull/footprint.png index 057b2cefad..26b410ad37 100644 Binary files a/graphics/pokemon/wingull/footprint.png and b/graphics/pokemon/wingull/footprint.png differ diff --git a/graphics/pokemon/wobbuffet/footprint.png b/graphics/pokemon/wobbuffet/footprint.png index 49fa6818d1..b7d2324d23 100644 Binary files a/graphics/pokemon/wobbuffet/footprint.png and b/graphics/pokemon/wobbuffet/footprint.png differ diff --git a/graphics/pokemon/wooper/footprint.png b/graphics/pokemon/wooper/footprint.png index 5e1ba56e61..22911aa46c 100644 Binary files a/graphics/pokemon/wooper/footprint.png and b/graphics/pokemon/wooper/footprint.png differ diff --git a/graphics/pokemon/wurmple/footprint.png b/graphics/pokemon/wurmple/footprint.png index 3ac4abd9f7..bbb7102f66 100644 Binary files a/graphics/pokemon/wurmple/footprint.png and b/graphics/pokemon/wurmple/footprint.png differ diff --git a/graphics/pokemon/wynaut/footprint.png b/graphics/pokemon/wynaut/footprint.png index 4fe4832c08..6b0daca37a 100644 Binary files a/graphics/pokemon/wynaut/footprint.png and b/graphics/pokemon/wynaut/footprint.png differ diff --git a/graphics/pokemon/xatu/footprint.png b/graphics/pokemon/xatu/footprint.png index 44fcad1e3e..52be000084 100644 Binary files a/graphics/pokemon/xatu/footprint.png and b/graphics/pokemon/xatu/footprint.png differ diff --git a/graphics/pokemon/yanma/footprint.png b/graphics/pokemon/yanma/footprint.png index 20b4a00b06..fc45b68cf4 100644 Binary files a/graphics/pokemon/yanma/footprint.png and b/graphics/pokemon/yanma/footprint.png differ diff --git a/graphics/pokemon/zangoose/footprint.png b/graphics/pokemon/zangoose/footprint.png index e07e58ceec..cc43fe9176 100644 Binary files a/graphics/pokemon/zangoose/footprint.png and b/graphics/pokemon/zangoose/footprint.png differ diff --git a/graphics/pokemon/zapdos/footprint.png b/graphics/pokemon/zapdos/footprint.png index 480063a88b..80b07a5b0a 100644 Binary files a/graphics/pokemon/zapdos/footprint.png and b/graphics/pokemon/zapdos/footprint.png differ diff --git a/graphics/pokemon/zigzagoon/footprint.png b/graphics/pokemon/zigzagoon/footprint.png index d7373e0641..421b25991e 100644 Binary files a/graphics/pokemon/zigzagoon/footprint.png and b/graphics/pokemon/zigzagoon/footprint.png differ diff --git a/graphics/pokemon/zubat/footprint.png b/graphics/pokemon/zubat/footprint.png index c7ccf57f37..2449369fd6 100644 Binary files a/graphics/pokemon/zubat/footprint.png and b/graphics/pokemon/zubat/footprint.png differ diff --git a/graphics/spinda_spots/spot_0.bin b/graphics/spinda_spots/spot_0.bin deleted file mode 100644 index 938d1d5923..0000000000 Binary files a/graphics/spinda_spots/spot_0.bin and /dev/null differ diff --git a/graphics/spinda_spots/spot_0.png b/graphics/spinda_spots/spot_0.png new file mode 100644 index 0000000000..e0a515d77d Binary files /dev/null and b/graphics/spinda_spots/spot_0.png differ diff --git a/graphics/spinda_spots/spot_1.bin b/graphics/spinda_spots/spot_1.bin deleted file mode 100644 index db46b5de4d..0000000000 Binary files a/graphics/spinda_spots/spot_1.bin and /dev/null differ diff --git a/graphics/spinda_spots/spot_1.png b/graphics/spinda_spots/spot_1.png new file mode 100644 index 0000000000..0e7fbd399a Binary files /dev/null and b/graphics/spinda_spots/spot_1.png differ diff --git a/graphics/spinda_spots/spot_2.bin b/graphics/spinda_spots/spot_2.bin deleted file mode 100644 index 3b1bf72143..0000000000 Binary files a/graphics/spinda_spots/spot_2.bin and /dev/null differ diff --git a/graphics/spinda_spots/spot_2.png b/graphics/spinda_spots/spot_2.png new file mode 100644 index 0000000000..9bf72bd8c8 Binary files /dev/null and b/graphics/spinda_spots/spot_2.png differ diff --git a/graphics/spinda_spots/spot_3.bin b/graphics/spinda_spots/spot_3.bin deleted file mode 100644 index 10c73f9bad..0000000000 Binary files a/graphics/spinda_spots/spot_3.bin and /dev/null differ diff --git a/graphics/spinda_spots/spot_3.png b/graphics/spinda_spots/spot_3.png new file mode 100644 index 0000000000..cf4a96f7d3 Binary files /dev/null and b/graphics/spinda_spots/spot_3.png differ diff --git a/graphics_file_rules.mk b/graphics_file_rules.mk index 69fc398d8c..090620ebe8 100644 --- a/graphics_file_rules.mk +++ b/graphics_file_rules.mk @@ -21,6 +21,7 @@ JPCONTESTGFXDIR := graphics/contest/japanese POKEDEXGFXDIR := graphics/pokedex STARTERGFXDIR := graphics/starter_choose NAMINGGFXDIR := graphics/naming_screen +SPINDAGFXDIR := graphics/spinda_spots types := normal fight flying poison ground rock bug ghost steel mystery fire water grass electric psychic ice dragon dark contest_types := cool beauty cute smart tough @@ -29,34 +30,34 @@ contest_types := cool beauty cute smart tough ### Castform ### -$(CASTFORMGFXDIR)/front.4bpp: $(CASTFORMGFXDIR)/front_normal_form.4bpp \ - $(CASTFORMGFXDIR)/front_sunny_form.4bpp \ - $(CASTFORMGFXDIR)/front_rainy_form.4bpp \ - $(CASTFORMGFXDIR)/front_snowy_form.4bpp +$(CASTFORMGFXDIR)/front.4bpp: $(CASTFORMGFXDIR)/normal/front.4bpp \ + $(CASTFORMGFXDIR)/sunny/front.4bpp \ + $(CASTFORMGFXDIR)/rainy/front.4bpp \ + $(CASTFORMGFXDIR)/snowy/front.4bpp @cat $^ >$@ -$(CASTFORMGFXDIR)/back.4bpp: $(CASTFORMGFXDIR)/back_normal_form.4bpp \ - $(CASTFORMGFXDIR)/back_sunny_form.4bpp \ - $(CASTFORMGFXDIR)/back_rainy_form.4bpp \ - $(CASTFORMGFXDIR)/back_snowy_form.4bpp +$(CASTFORMGFXDIR)/back.4bpp: $(CASTFORMGFXDIR)/normal/back.4bpp \ + $(CASTFORMGFXDIR)/sunny/back.4bpp \ + $(CASTFORMGFXDIR)/rainy/back.4bpp \ + $(CASTFORMGFXDIR)/snowy/back.4bpp @cat $^ >$@ -$(CASTFORMGFXDIR)/anim_front.4bpp: $(CASTFORMGFXDIR)/anim_front_normal_form.4bpp \ - $(CASTFORMGFXDIR)/anim_front_sunny_form.4bpp \ - $(CASTFORMGFXDIR)/anim_front_rainy_form.4bpp \ - $(CASTFORMGFXDIR)/anim_front_snowy_form.4bpp +$(CASTFORMGFXDIR)/anim_front.4bpp: $(CASTFORMGFXDIR)/normal/anim_front.4bpp \ + $(CASTFORMGFXDIR)/sunny/anim_front.4bpp \ + $(CASTFORMGFXDIR)/rainy/anim_front.4bpp \ + $(CASTFORMGFXDIR)/snowy/anim_front.4bpp @cat $^ >$@ -$(CASTFORMGFXDIR)/normal.gbapal: $(CASTFORMGFXDIR)/normal_normal_form.gbapal \ - $(CASTFORMGFXDIR)/normal_sunny_form.gbapal \ - $(CASTFORMGFXDIR)/normal_rainy_form.gbapal \ - $(CASTFORMGFXDIR)/normal_snowy_form.gbapal +$(CASTFORMGFXDIR)/normal.gbapal: $(CASTFORMGFXDIR)/normal/normal.gbapal \ + $(CASTFORMGFXDIR)/sunny/normal.gbapal \ + $(CASTFORMGFXDIR)/rainy/normal.gbapal \ + $(CASTFORMGFXDIR)/snowy/normal.gbapal @cat $^ >$@ -$(CASTFORMGFXDIR)/shiny.gbapal: $(CASTFORMGFXDIR)/shiny_normal_form.gbapal \ - $(CASTFORMGFXDIR)/shiny_sunny_form.gbapal \ - $(CASTFORMGFXDIR)/shiny_rainy_form.gbapal \ - $(CASTFORMGFXDIR)/shiny_snowy_form.gbapal +$(CASTFORMGFXDIR)/shiny.gbapal: $(CASTFORMGFXDIR)/normal/shiny.gbapal \ + $(CASTFORMGFXDIR)/sunny/shiny.gbapal \ + $(CASTFORMGFXDIR)/rainy/shiny.gbapal \ + $(CASTFORMGFXDIR)/snowy/shiny.gbapal @cat $^ >$@ @@ -680,3 +681,15 @@ $(NAMINGGFXDIR)/cursor_squished.4bpp: %.4bpp: %.png $(NAMINGGFXDIR)/cursor_filled.4bpp: %.4bpp: %.png $(GFX) $< $@ -num_tiles 5 -Wnum_tiles + +$(SPINDAGFXDIR)/spot_0.1bpp: %.1bpp: %.png + $(GFX) $< $@ -plain -data_width 2 + +$(SPINDAGFXDIR)/spot_1.1bpp: %.1bpp: %.png + $(GFX) $< $@ -plain -data_width 2 + +$(SPINDAGFXDIR)/spot_2.1bpp: %.1bpp: %.png + $(GFX) $< $@ -plain -data_width 2 + +$(SPINDAGFXDIR)/spot_3.1bpp: %.1bpp: %.png + $(GFX) $< $@ -plain -data_width 2 diff --git a/include/battle.h b/include/battle.h index 118d560984..bb0e42fb83 100644 --- a/include/battle.h +++ b/include/battle.h @@ -392,7 +392,7 @@ struct BattleStruct u8 expGetterBattlerId; u8 unused_5; u8 absentBattlerFlags; - u8 palaceFlags; // First 4 bits are "is < 50% HP and not asleep" for each battler, last 4 bits are selected moves to pass to AI + u8 palaceFlags; // First 4 bits are "is <= 50% HP and not asleep" for each battler, last 4 bits are selected moves to pass to AI u8 field_93; // related to choosing pokemon? u8 wallyBattleState; u8 wallyMovesState; @@ -440,6 +440,11 @@ struct BattleStruct u8 alreadyStatusedMoveAttempt; // As bits for battlers; For example when using Thunder Wave on an already paralyzed pokemon. }; +// The palaceFlags member of struct BattleStruct contains 1 flag per move to indicate which moves the AI should consider, +// and 1 flag per battler to indicate whether the battler is awake and at <= 50% HP (which affects move choice). +// The assert below is to ensure palaceFlags is large enough to store these flags without overlap. +STATIC_ASSERT(sizeof(((struct BattleStruct *)0)->palaceFlags) * 8 >= MAX_BATTLERS_COUNT + MAX_MON_MOVES, PalaceFlagsTooSmall) + #define F_DYNAMIC_TYPE_1 (1 << 6) #define F_DYNAMIC_TYPE_2 (1 << 7) #define DYNAMIC_TYPE_MASK (F_DYNAMIC_TYPE_1 - 1) diff --git a/include/battle_anim.h b/include/battle_anim.h index f99af9059b..455bf5f4cd 100644 --- a/include/battle_anim.h +++ b/include/battle_anim.h @@ -192,14 +192,26 @@ u8 GetBattlerSpriteDefault_Y(u8 battlerId); u8 GetSubstituteSpriteDefault_Y(u8 battlerId); // battle_anim_status_effects.c -#define STAT_ANIM_PLUS1 15 -#define STAT_ANIM_PLUS2 39 -#define STAT_ANIM_MINUS1 22 -#define STAT_ANIM_MINUS2 46 +#define STAT_ANIM_PLUS1 14 +#define STAT_ANIM_PLUS2 38 +#define STAT_ANIM_MINUS1 21 +#define STAT_ANIM_MINUS2 45 #define STAT_ANIM_MULTIPLE_PLUS1 55 #define STAT_ANIM_MULTIPLE_PLUS2 56 #define STAT_ANIM_MULTIPLE_MINUS1 57 #define STAT_ANIM_MULTIPLE_MINUS2 58 + +enum { + STAT_ANIM_PAL_ATK, + STAT_ANIM_PAL_DEF, + STAT_ANIM_PAL_ACC, + STAT_ANIM_PAL_SPEED, + STAT_ANIM_PAL_EVASION, + STAT_ANIM_PAL_SPATK, + STAT_ANIM_PAL_SPDEF, + STAT_ANIM_PAL_MULTIPLE = 0xFF +}; + void LaunchStatusAnimation(u8 battlerId, u8 statusAnimId); // battle_anim_ground.c diff --git a/include/battle_message.h b/include/battle_message.h index d34d2125a2..d62c260049 100644 --- a/include/battle_message.h +++ b/include/battle_message.h @@ -1,7 +1,11 @@ #ifndef GUARD_BATTLE_MESSAGE_H #define GUARD_BATTLE_MESSAGE_H -#define TEXT_BUFF_ARRAY_COUNT 16 +// This buffer can hold many different things. Some of the things it can hold +// that have explicit sizes are listed below to ensure it can contain them. +#define TEXT_BUFF_ARRAY_COUNT max(16, \ + max(MOVE_NAME_LENGTH + 2, /* +2 to hold the "!" and EOS. */ \ + POKEMON_NAME_LENGTH + 1)) // for 0xFD #define B_TXT_BUFF1 0x0 diff --git a/include/constants/contest.h b/include/constants/contest.h index 775dcbe62b..905306203a 100644 --- a/include/constants/contest.h +++ b/include/constants/contest.h @@ -6,6 +6,8 @@ #define CONTEST_LAST_APPEAL (CONTEST_NUM_APPEALS - 1) #define MAX_CONTEST_MOVE_HEARTS 8 +#define CONTESTANT_NONE 0xFF + #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) diff --git a/include/constants/event_objects.h b/include/constants/event_objects.h index 29d3b020fc..3c8a7f50be 100644 --- a/include/constants/event_objects.h +++ b/include/constants/event_objects.h @@ -287,6 +287,11 @@ // during their idle & walking animations #define OW_MON_BOBBING TRUE +// If true, adds a small amount of overhead +// to OW code so that large (48x48, 64x64) OWs +// will display correctly under bridges, etc. +#define LARGE_OW_SUPPORT TRUE + #define SHADOW_SIZE_S 0 #define SHADOW_SIZE_M 1 #define SHADOW_SIZE_L 2 diff --git a/include/constants/flags.h b/include/constants/flags.h index 55dfc4c2b9..f0d80c5498 100644 --- a/include/constants/flags.h +++ b/include/constants/flags.h @@ -40,6 +40,7 @@ #define FLAG_TEMP_1E (TEMP_FLAGS_START + 0x1E) #define FLAG_TEMP_1F (TEMP_FLAGS_START + 0x1F) #define TEMP_FLAGS_END FLAG_TEMP_1F +#define NUM_TEMP_FLAGS (TEMP_FLAGS_END - TEMP_FLAGS_START + 1) #define FLAG_UNUSED_0x020 0x20 // Unused Flag #define FLAG_UNUSED_0x021 0x21 // Unused Flag @@ -121,11 +122,11 @@ #define FLAG_UNUSED_0x068 0x68 // Unused Flag #define FLAG_OCEANIC_MUSEUM_MET_REPORTER 0x69 -#define FLAG_RECEIVED_HM04 0x6A -#define FLAG_RECEIVED_HM06 0x6B +#define FLAG_RECEIVED_HM_STRENGTH 0x6A +#define FLAG_RECEIVED_HM_ROCK_SMASH 0x6B #define FLAG_WHITEOUT_TO_LAVARIDGE 0x6C // Set after defeating Flannery, so the player cant white out from poison before receiving Go Goggles -#define FLAG_RECEIVED_HM05 0x6D -#define FLAG_RECEIVED_HM02 0x6E +#define FLAG_RECEIVED_HM_FLASH 0x6D +#define FLAG_RECEIVED_HM_FLY 0x6E #define FLAG_GROUDON_AWAKENED_MAGMA_HIDEOUT 0x6F #define FLAG_TEAM_AQUA_ESCAPED_IN_SUBMARINE 0x70 #define FLAG_UNUSED_RS_LEGENDARY_BATTLE_DONE 0x71 // Unused Flag. Used in R/S to indicate whether player defeated or caught Groudon/Kyogre in Cave of Origin. @@ -138,9 +139,9 @@ #define FLAG_CANCEL_BATTLE_ROOM_CHALLENGE 0x77 #define FLAG_LANDMARK_MIRAGE_TOWER 0x78 -#define FLAG_RECEIVED_TM31 0x79 -#define FLAG_RECEIVED_HM03 0x7A -#define FLAG_RECEIVED_HM08 0x7B +#define FLAG_RECEIVED_TM_BRICK_BREAK 0x79 +#define FLAG_RECEIVED_HM_SURF 0x7A +#define FLAG_RECEIVED_HM_DIVE 0x7B #define FLAG_REGISTER_RIVAL_POKENAV 0x7C #define FLAG_DEFEATED_RIVAL_ROUTE_104 0x7D #define FLAG_DEFEATED_WALLY_VICTORY_ROAD 0x7E @@ -154,7 +155,7 @@ #define FLAG_PENDING_DAYCARE_EGG 0x86 #define FLAG_THANKED_FOR_PLAYING_WITH_WALLY 0x87 #define FLAG_ENABLE_FIRST_WALLY_POKENAV_CALL 0x88 // Set after defeating Wally outside Mauville Gym. Will activate a call later to register Wally. -#define FLAG_RECEIVED_HM01 0x89 +#define FLAG_RECEIVED_HM_CUT 0x89 #define FLAG_SCOTT_CALL_FORTREE_GYM 0x8A // Triggers call from Scott after defeating Winona #define FLAG_DEFEATED_EVIL_TEAM_MT_CHIMNEY 0x8B #define FLAG_RECEIVED_6_SODA_POP 0x8C @@ -182,14 +183,14 @@ #define FLAG_CUTE_PAINTING_MADE 0xA2 #define FLAG_SMART_PAINTING_MADE 0xA3 #define FLAG_TOUGH_PAINTING_MADE 0xA4 -#define FLAG_RECEIVED_TM39 0xA5 -#define FLAG_RECEIVED_TM08 0xA6 -#define FLAG_RECEIVED_TM34 0xA7 -#define FLAG_RECEIVED_TM50 0xA8 -#define FLAG_RECEIVED_TM42 0xA9 -#define FLAG_RECEIVED_TM40 0xAA -#define FLAG_RECEIVED_TM04 0xAB -#define FLAG_RECEIVED_TM03 0xAC +#define FLAG_RECEIVED_TM_ROCK_TOMB 0xA5 +#define FLAG_RECEIVED_TM_BULK_UP 0xA6 +#define FLAG_RECEIVED_TM_SHOCK_WAVE 0xA7 +#define FLAG_RECEIVED_TM_OVERHEAT 0xA8 +#define FLAG_RECEIVED_TM_FACADE 0xA9 +#define FLAG_RECEIVED_TM_AERIAL_ACE 0xAA +#define FLAG_RECEIVED_TM_CALM_MIND 0xAB +#define FLAG_RECEIVED_TM_WATER_PULSE 0xAC #define FLAG_HIDE_SECRET_BASE_TRAINER 0xAD #define FLAG_DECORATION_1 0xAE #define FLAG_DECORATION_2 0xAF @@ -226,7 +227,7 @@ #define FLAG_ENCOUNTERED_LATIAS_OR_LATIOS 0xCE #define FLAG_MET_ARCHIE_METEOR_FALLS 0xCF #define FLAG_GOT_BASEMENT_KEY_FROM_WATTSON 0xD0 -#define FLAG_GOT_TM24_FROM_WATTSON 0xD1 +#define FLAG_GOT_TM_THUNDERBOLT_FROM_WATTSON 0xD1 #define FLAG_FAN_CLUB_STRENGTH_SHARED 0xD2 // Set when you rate the strength of another trainer in Lilycove's Trainer Fan Club. #define FLAG_DEFEATED_RIVAL_RUSTBORO 0xD3 #define FLAG_RECEIVED_RED_OR_BLUE_ORB 0xD4 @@ -248,15 +249,15 @@ #define FLAG_RECEIVED_STARTER_DOLL 0xE2 #define FLAG_RECEIVED_GOOD_ROD 0xE3 #define FLAG_REGI_DOORS_OPENED 0xE4 -#define FLAG_RECEIVED_TM27 0xE5 -#define FLAG_RECEIVED_TM36 0xE6 -#define FLAG_RECEIVED_TM05 0xE7 -#define FLAG_RECEIVED_TM19 0xE8 +#define FLAG_RECEIVED_TM_RETURN 0xE5 +#define FLAG_RECEIVED_TM_SLUDGE_BOMB 0xE6 +#define FLAG_RECEIVED_TM_ROAR 0xE7 +#define FLAG_RECEIVED_TM_GIGA_DRAIN 0xE8 #define FLAG_UNUSED_0x0E9 0xE9 // Unused Flag -#define FLAG_RECEIVED_TM44 0xEA -#define FLAG_RECEIVED_TM45 0xEB +#define FLAG_RECEIVED_TM_REST 0xEA +#define FLAG_RECEIVED_TM_ATTRACT 0xEB #define FLAG_RECEIVED_GLASS_ORNAMENT 0xEC #define FLAG_RECEIVED_SILVER_SHIELD 0xED #define FLAG_RECEIVED_GOLD_SHIELD 0xEE @@ -281,16 +282,16 @@ #define FLAG_RECEIVED_OLD_ROD 0x101 #define FLAG_RECEIVED_COIN_CASE 0x102 #define FLAG_RETURNED_RED_OR_BLUE_ORB 0x103 -#define FLAG_RECEIVED_TM49 0x104 -#define FLAG_RECEIVED_TM28 0x105 -#define FLAG_RECEIVED_TM09 0x106 +#define FLAG_RECEIVED_TM_SNATCH 0x104 +#define FLAG_RECEIVED_TM_DIG 0x105 +#define FLAG_RECEIVED_TM_BULLET_SEED 0x106 #define FLAG_ENTERED_ELITE_FOUR 0x107 -#define FLAG_RECEIVED_TM10 0x108 -#define FLAG_RECEIVED_TM41 0x109 +#define FLAG_RECEIVED_TM_HIDDEN_POWER 0x108 +#define FLAG_RECEIVED_TM_TORMENT 0x109 #define FLAG_RECEIVED_LAVARIDGE_EGG 0x10A #define FLAG_RECEIVED_REVIVED_FOSSIL_MON 0x10B #define FLAG_SECRET_BASE_REGISTRY_ENABLED 0x10C -#define FLAG_RECEIVED_TM46 0x10D +#define FLAG_RECEIVED_TM_THIEF 0x10D #define FLAG_CONTEST_SKETCH_CREATED 0x10E // Set but never read #define FLAG_EVIL_TEAM_ESCAPED_STERN_SPOKE 0x10F #define FLAG_RECEIVED_EXP_SHARE 0x110 @@ -333,7 +334,7 @@ #define FLAG_MET_MAXIE_SOOTOPOLIS 0x135 #define FLAG_MET_SCOTT_RUSTBORO 0x136 #define FLAG_WALLACE_GOES_TO_SKY_PILLAR 0x137 // Set after speaking to Wallace within the Cave of Origin. -#define FLAG_RECEIVED_HM07 0x138 +#define FLAG_RECEIVED_HM_WATERFALL 0x138 #define FLAG_BEAT_MAGMA_GRUNT_JAGGED_PASS 0x139 #define FLAG_RECEIVED_AURORA_TICKET 0x13A #define FLAG_RECEIVED_MYSTIC_TICKET 0x13B @@ -568,7 +569,7 @@ #define FLAG_HIDDEN_ITEM_LILYCOVE_CITY_HEART_SCALE (FLAG_HIDDEN_ITEMS_START + 0x1B) #define FLAG_HIDDEN_ITEM_FALLARBOR_TOWN_NUGGET (FLAG_HIDDEN_ITEMS_START + 0x1C) #define FLAG_HIDDEN_ITEM_MT_PYRE_EXTERIOR_ULTRA_BALL (FLAG_HIDDEN_ITEMS_START + 0x1D) -#define FLAG_HIDDEN_ITEM_ROUTE_113_TM32 (FLAG_HIDDEN_ITEMS_START + 0x1E) +#define FLAG_HIDDEN_ITEM_ROUTE_113_TM_DOUBLE_TEAM (FLAG_HIDDEN_ITEMS_START + 0x1E) #define FLAG_HIDDEN_ITEM_ABANDONED_SHIP_RM_1_KEY (FLAG_HIDDEN_ITEMS_START + 0x1F) #define FLAG_HIDDEN_ITEM_ABANDONED_SHIP_RM_2_KEY (FLAG_HIDDEN_ITEMS_START + 0x20) #define FLAG_HIDDEN_ITEM_ABANDONED_SHIP_RM_4_KEY (FLAG_HIDDEN_ITEMS_START + 0x21) @@ -1053,7 +1054,7 @@ #define FLAG_ITEM_ROUTE_109_PP_UP 0x3ED #define FLAG_ITEM_ROUTE_110_RARE_CANDY 0x3EE #define FLAG_ITEM_ROUTE_110_DIRE_HIT 0x3EF -#define FLAG_ITEM_ROUTE_111_TM37 0x3F0 +#define FLAG_ITEM_ROUTE_111_TM_SANDSTORM 0x3F0 #define FLAG_ITEM_ROUTE_111_STARDUST 0x3F1 #define FLAG_ITEM_ROUTE_111_HP_UP 0x3F2 #define FLAG_ITEM_ROUTE_112_NUGGET 0x3F3 @@ -1062,7 +1063,7 @@ #define FLAG_ITEM_ROUTE_114_RARE_CANDY 0x3F6 #define FLAG_ITEM_ROUTE_114_PROTEIN 0x3F7 #define FLAG_ITEM_ROUTE_115_SUPER_POTION 0x3F8 -#define FLAG_ITEM_ROUTE_115_TM01 0x3F9 +#define FLAG_ITEM_ROUTE_115_TM_FOCUS_PUNCH 0x3F9 #define FLAG_ITEM_ROUTE_115_IRON 0x3FA #define FLAG_ITEM_ROUTE_116_ETHER 0x3FB #define FLAG_ITEM_ROUTE_116_REPEL 0x3FC @@ -1089,7 +1090,7 @@ #define FLAG_ITEM_RUSTBORO_CITY_X_DEFEND 0x411 #define FLAG_ITEM_LILYCOVE_CITY_MAX_REPEL 0x412 #define FLAG_ITEM_MOSSDEEP_CITY_NET_BALL 0x413 -#define FLAG_ITEM_METEOR_FALLS_1F_1R_TM23 0x414 +#define FLAG_ITEM_METEOR_FALLS_1F_1R_TM_IRON_TAIL 0x414 #define FLAG_ITEM_METEOR_FALLS_1F_1R_FULL_HEAL 0x415 #define FLAG_ITEM_METEOR_FALLS_1F_1R_MOON_STONE 0x416 #define FLAG_ITEM_METEOR_FALLS_1F_1R_PP_UP 0x417 @@ -1119,35 +1120,35 @@ #define FLAG_ITEM_AQUA_HIDEOUT_B1F_MAX_ELIXIR 0x42F #define FLAG_ITEM_AQUA_HIDEOUT_B2F_NEST_BALL 0x430 #define FLAG_ITEM_MT_PYRE_EXTERIOR_MAX_POTION 0x431 -#define FLAG_ITEM_MT_PYRE_EXTERIOR_TM48 0x432 +#define FLAG_ITEM_MT_PYRE_EXTERIOR_TM_SKILL_SWAP 0x432 #define FLAG_ITEM_NEW_MAUVILLE_ULTRA_BALL 0x433 #define FLAG_ITEM_NEW_MAUVILLE_ESCAPE_ROPE 0x434 #define FLAG_ITEM_ABANDONED_SHIP_HIDDEN_FLOOR_ROOM_6_LUXURY_BALL 0x435 #define FLAG_ITEM_ABANDONED_SHIP_HIDDEN_FLOOR_ROOM_2_SCANNER 0x436 -#define FLAG_ITEM_SCORCHED_SLAB_TM11 0x437 -#define FLAG_ITEM_METEOR_FALLS_B1F_2R_TM02 0x438 +#define FLAG_ITEM_SCORCHED_SLAB_TM_SUNNY_DAY 0x437 +#define FLAG_ITEM_METEOR_FALLS_B1F_2R_TM_DRAGON_CLAW 0x438 #define FLAG_ITEM_SHOAL_CAVE_ENTRANCE_BIG_PEARL 0x439 #define FLAG_ITEM_SHOAL_CAVE_INNER_ROOM_RARE_CANDY 0x43A #define FLAG_ITEM_SHOAL_CAVE_STAIRS_ROOM_ICE_HEAL 0x43B #define FLAG_ITEM_VICTORY_ROAD_1F_MAX_ELIXIR 0x43C #define FLAG_ITEM_VICTORY_ROAD_1F_PP_UP 0x43D -#define FLAG_ITEM_VICTORY_ROAD_B1F_TM29 0x43E +#define FLAG_ITEM_VICTORY_ROAD_B1F_TM_PSYCHIC 0x43E #define FLAG_ITEM_VICTORY_ROAD_B1F_FULL_RESTORE 0x43F #define FLAG_ITEM_VICTORY_ROAD_B2F_FULL_HEAL 0x440 -#define FLAG_ITEM_MT_PYRE_6F_TM30 0x441 -#define FLAG_ITEM_SEAFLOOR_CAVERN_ROOM_9_TM26 0x442 -#define FLAG_ITEM_FIERY_PATH_TM06 0x443 +#define FLAG_ITEM_MT_PYRE_6F_TM_SHADOW_BALL 0x441 +#define FLAG_ITEM_SEAFLOOR_CAVERN_ROOM_9_TM_EARTHQUAKE 0x442 +#define FLAG_ITEM_FIERY_PATH_TM_TOXIC 0x443 #define FLAG_ITEM_ROUTE_124_RED_SHARD 0x444 #define FLAG_ITEM_ROUTE_124_BLUE_SHARD 0x445 -#define FLAG_ITEM_SAFARI_ZONE_NORTH_WEST_TM22 0x446 +#define FLAG_ITEM_SAFARI_ZONE_NORTH_WEST_TM_SOLAR_BEAM 0x446 #define FLAG_ITEM_ABANDONED_SHIP_ROOMS_1F_HARBOR_MAIL 0x447 #define FLAG_ITEM_ABANDONED_SHIP_ROOMS_B1F_ESCAPE_ROPE 0x448 #define FLAG_ITEM_ABANDONED_SHIP_ROOMS_2_B1F_DIVE_BALL 0x449 -#define FLAG_ITEM_ABANDONED_SHIP_ROOMS_B1F_TM13 0x44A +#define FLAG_ITEM_ABANDONED_SHIP_ROOMS_B1F_TM_ICE_BEAM 0x44A #define FLAG_ITEM_ABANDONED_SHIP_ROOMS_2_1F_REVIVE 0x44B #define FLAG_ITEM_ABANDONED_SHIP_CAPTAINS_OFFICE_STORAGE_KEY 0x44C #define FLAG_ITEM_ABANDONED_SHIP_HIDDEN_FLOOR_ROOM_3_WATER_STONE 0x44D -#define FLAG_ITEM_ABANDONED_SHIP_HIDDEN_FLOOR_ROOM_1_TM18 0x44E +#define FLAG_ITEM_ABANDONED_SHIP_HIDDEN_FLOOR_ROOM_1_TM_RAIN_DANCE 0x44E #define FLAG_ITEM_ROUTE_121_CARBOS 0x44F #define FLAG_ITEM_ROUTE_123_ULTRA_BALL 0x450 #define FLAG_ITEM_ROUTE_126_GREEN_SHARD 0x451 @@ -1157,7 +1158,7 @@ #define FLAG_ITEM_ROUTE_123_ELIXIR 0x455 #define FLAG_ITEM_NEW_MAUVILLE_THUNDER_STONE 0x456 #define FLAG_ITEM_FIERY_PATH_FIRE_STONE 0x457 -#define FLAG_ITEM_SHOAL_CAVE_ICE_ROOM_TM07 0x458 +#define FLAG_ITEM_SHOAL_CAVE_ICE_ROOM_TM_HAIL 0x458 #define FLAG_ITEM_SHOAL_CAVE_ICE_ROOM_NEVER_MELT_ICE 0x459 #define FLAG_ITEM_ROUTE_103_GUARD_SPEC 0x45A #define FLAG_ITEM_ROUTE_104_X_ACCURACY 0x45B @@ -1631,6 +1632,7 @@ #define FLAG_UNUSED_0x95E (DAILY_FLAGS_START + 0x3E) // Unused Flag #define FLAG_UNUSED_0x95F (DAILY_FLAGS_START + 0x3F) // Unused Flag #define DAILY_FLAGS_END (FLAG_UNUSED_0x95F + (7 - FLAG_UNUSED_0x95F % 8)) +#define NUM_DAILY_FLAGS (DAILY_FLAGS_END - DAILY_FLAGS_START + 1) #define FLAGS_COUNT (DAILY_FLAGS_END + 1) @@ -1644,5 +1646,12 @@ #define FLAG_SAFE_FOLLOWER_MOVEMENT (SPECIAL_FLAGS_START + 0x5) // When set, applymovement does not put the follower inside a pokeball // FLAG_SPECIAL_FLAG_0x4005 - 0x407F also exist and are unused #define SPECIAL_FLAGS_END (SPECIAL_FLAGS_START + 0x7F) +#define NUM_SPECIAL_FLAGS (SPECIAL_FLAGS_END - SPECIAL_FLAGS_START + 1) + +// Temp flag aliases +#define FLAG_TEMP_SKIP_GABBY_INTERVIEW FLAG_TEMP_1 +#define FLAG_TEMP_REGICE_PUZZLE_STARTED FLAG_TEMP_2 +#define FLAG_TEMP_REGICE_PUZZLE_FAILED FLAG_TEMP_3 +#define FLAG_TEMP_HIDE_MIRAGE_ISLAND_BERRY_TREE FLAG_TEMP_11 #endif // GUARD_CONSTANTS_FLAGS_H diff --git a/include/constants/game_stat.h b/include/constants/game_stat.h index 053e4a8f9e..5796afbaec 100644 --- a/include/constants/game_stat.h +++ b/include/constants/game_stat.h @@ -13,7 +13,7 @@ #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_FISHING_ENCOUNTERS 12 #define GAME_STAT_HATCHED_EGGS 13 #define GAME_STAT_EVOLVED_POKEMON 14 #define GAME_STAT_USED_POKECENTER 15 diff --git a/include/constants/global.h b/include/constants/global.h index 04f1d548c4..2b70378ff5 100644 --- a/include/constants/global.h +++ b/include/constants/global.h @@ -80,6 +80,7 @@ #define TRAINER_ID_LENGTH 4 #define MAX_MON_MOVES 4 +#define ALL_MOVES_MASK ((1 << MAX_MON_MOVES) - 1) #define CONTESTANT_COUNT 4 #define CONTEST_CATEGORY_COOL 0 @@ -92,6 +93,7 @@ // string lengths #define ITEM_NAME_LENGTH 14 #define POKEMON_NAME_LENGTH 10 +#define POKEMON_NAME_BUFFER_SIZE max(20, POKEMON_NAME_LENGTH + 1) // Frequently used buffer size. Larger than necessary #define PLAYER_NAME_LENGTH 7 #define MAIL_WORDS_COUNT 9 #define EASY_CHAT_BATTLE_WORDS_COUNT 6 diff --git a/include/constants/items.h b/include/constants/items.h index daf129c76f..63cbfe6b97 100644 --- a/include/constants/items.h +++ b/include/constants/items.h @@ -381,65 +381,6 @@ #define ITEM_HM07 345 #define ITEM_HM08 346 -#define ITEM_TM01_FOCUS_PUNCH ITEM_TM01 -#define ITEM_TM02_DRAGON_CLAW ITEM_TM02 -#define ITEM_TM03_WATER_PULSE ITEM_TM03 -#define ITEM_TM04_CALM_MIND ITEM_TM04 -#define ITEM_TM05_ROAR ITEM_TM05 -#define ITEM_TM06_TOXIC ITEM_TM06 -#define ITEM_TM07_HAIL ITEM_TM07 -#define ITEM_TM08_BULK_UP ITEM_TM08 -#define ITEM_TM09_BULLET_SEED ITEM_TM09 -#define ITEM_TM10_HIDDEN_POWER ITEM_TM10 -#define ITEM_TM11_SUNNY_DAY ITEM_TM11 -#define ITEM_TM12_TAUNT ITEM_TM12 -#define ITEM_TM13_ICE_BEAM ITEM_TM13 -#define ITEM_TM14_BLIZZARD ITEM_TM14 -#define ITEM_TM15_HYPER_BEAM ITEM_TM15 -#define ITEM_TM16_LIGHT_SCREEN ITEM_TM16 -#define ITEM_TM17_PROTECT ITEM_TM17 -#define ITEM_TM18_RAIN_DANCE ITEM_TM18 -#define ITEM_TM19_GIGA_DRAIN ITEM_TM19 -#define ITEM_TM20_SAFEGUARD ITEM_TM20 -#define ITEM_TM21_FRUSTRATION ITEM_TM21 -#define ITEM_TM22_SOLAR_BEAM ITEM_TM22 -#define ITEM_TM23_IRON_TAIL ITEM_TM23 -#define ITEM_TM24_THUNDERBOLT ITEM_TM24 -#define ITEM_TM25_THUNDER ITEM_TM25 -#define ITEM_TM26_EARTHQUAKE ITEM_TM26 -#define ITEM_TM27_RETURN ITEM_TM27 -#define ITEM_TM28_DIG ITEM_TM28 -#define ITEM_TM29_PSYCHIC ITEM_TM29 -#define ITEM_TM30_SHADOW_BALL ITEM_TM30 -#define ITEM_TM31_BRICK_BREAK ITEM_TM31 -#define ITEM_TM32_DOUBLE_TEAM ITEM_TM32 -#define ITEM_TM33_REFLECT ITEM_TM33 -#define ITEM_TM34_SHOCK_WAVE ITEM_TM34 -#define ITEM_TM35_FLAMETHROWER ITEM_TM35 -#define ITEM_TM36_SLUDGE_BOMB ITEM_TM36 -#define ITEM_TM37_SANDSTORM ITEM_TM37 -#define ITEM_TM38_FIRE_BLAST ITEM_TM38 -#define ITEM_TM39_ROCK_TOMB ITEM_TM39 -#define ITEM_TM40_AERIAL_ACE ITEM_TM40 -#define ITEM_TM41_TORMENT ITEM_TM41 -#define ITEM_TM42_FACADE ITEM_TM42 -#define ITEM_TM43_SECRET_POWER ITEM_TM43 -#define ITEM_TM44_REST ITEM_TM44 -#define ITEM_TM45_ATTRACT ITEM_TM45 -#define ITEM_TM46_THIEF ITEM_TM46 -#define ITEM_TM47_STEEL_WING ITEM_TM47 -#define ITEM_TM48_SKILL_SWAP ITEM_TM48 -#define ITEM_TM49_SNATCH ITEM_TM49 -#define ITEM_TM50_OVERHEAT ITEM_TM50 -#define ITEM_HM01_CUT ITEM_HM01 -#define ITEM_HM02_FLY ITEM_HM02 -#define ITEM_HM03_SURF ITEM_HM03 -#define ITEM_HM04_STRENGTH ITEM_HM04 -#define ITEM_HM05_FLASH ITEM_HM05 -#define ITEM_HM06_ROCK_SMASH ITEM_HM06 -#define ITEM_HM07_WATERFALL ITEM_HM07 -#define ITEM_HM08_DIVE ITEM_HM08 - // Unknown #define ITEM_15B 347 #define ITEM_15C 348 diff --git a/include/constants/tms_hms.h b/include/constants/tms_hms.h new file mode 100644 index 0000000000..03fb934139 --- /dev/null +++ b/include/constants/tms_hms.h @@ -0,0 +1,70 @@ +#ifndef GUARD_CONSTANTS_TMS_HMS_H +#define GUARD_CONSTANTS_TMS_HMS_H + +#define FOREACH_TM(F) \ + F(FOCUS_PUNCH) \ + F(DRAGON_CLAW) \ + F(WATER_PULSE) \ + F(CALM_MIND) \ + F(ROAR) \ + F(TOXIC) \ + F(HAIL) \ + F(BULK_UP) \ + F(BULLET_SEED) \ + F(HIDDEN_POWER) \ + F(SUNNY_DAY) \ + F(TAUNT) \ + F(ICE_BEAM) \ + F(BLIZZARD) \ + F(HYPER_BEAM) \ + F(LIGHT_SCREEN) \ + F(PROTECT) \ + F(RAIN_DANCE) \ + F(GIGA_DRAIN) \ + F(SAFEGUARD) \ + F(FRUSTRATION) \ + F(SOLAR_BEAM) \ + F(IRON_TAIL) \ + F(THUNDERBOLT) \ + F(THUNDER) \ + F(EARTHQUAKE) \ + F(RETURN) \ + F(DIG) \ + F(PSYCHIC) \ + F(SHADOW_BALL) \ + F(BRICK_BREAK) \ + F(DOUBLE_TEAM) \ + F(REFLECT) \ + F(SHOCK_WAVE) \ + F(FLAMETHROWER) \ + F(SLUDGE_BOMB) \ + F(SANDSTORM) \ + F(FIRE_BLAST) \ + F(ROCK_TOMB) \ + F(AERIAL_ACE) \ + F(TORMENT) \ + F(FACADE) \ + F(SECRET_POWER) \ + F(REST) \ + F(ATTRACT) \ + F(THIEF) \ + F(STEEL_WING) \ + F(SKILL_SWAP) \ + F(SNATCH) \ + F(OVERHEAT) + +#define FOREACH_HM(F) \ + F(CUT) \ + F(FLY) \ + F(SURF) \ + F(STRENGTH) \ + F(FLASH) \ + F(ROCK_SMASH) \ + F(WATERFALL) \ + F(DIVE) + +#define FOREACH_TMHM(F) \ + FOREACH_TM(F) \ + FOREACH_HM(F) + +#endif diff --git a/include/constants/trainer_hill.h b/include/constants/trainer_hill.h index e0f660b6f0..610cb81c68 100644 --- a/include/constants/trainer_hill.h +++ b/include/constants/trainer_hill.h @@ -55,7 +55,7 @@ #define TRAINER_HILL_OTID 0x10000000 // The full map of each Trainer Hill floor is 16x21. -// The first 5x21 at the top is the entrance/exit area, +// The first 16x5 at the top is the entrance/exit area, // and the remaining 16x16 is the randomized portion of // the room where the trainers are. #define HILL_FLOOR_WIDTH 16 diff --git a/include/constants/vars.h b/include/constants/vars.h index e0b08f4475..e79919c329 100644 --- a/include/constants/vars.h +++ b/include/constants/vars.h @@ -9,7 +9,7 @@ #define VAR_TEMP_0 (TEMP_VARS_START + 0x0) #define VAR_TEMP_1 (TEMP_VARS_START + 0x1) #define VAR_TEMP_2 (TEMP_VARS_START + 0x2) -#define VAR_TEMP_3 (TEMP_VARS_START + 0x3) +#define VAR_TEMP_3 (TEMP_VARS_START + 0x3) // Note: Used when the player checks a TV #define VAR_TEMP_4 (TEMP_VARS_START + 0x4) #define VAR_TEMP_5 (TEMP_VARS_START + 0x5) #define VAR_TEMP_6 (TEMP_VARS_START + 0x6) @@ -23,6 +23,7 @@ #define VAR_TEMP_E (TEMP_VARS_START + 0xE) #define VAR_TEMP_F (TEMP_VARS_START + 0xF) #define TEMP_VARS_END VAR_TEMP_F +#define NUM_TEMP_VARS (TEMP_VARS_END - TEMP_VARS_START + 1) // object gfx id vars // These 0x10 vars are used to dynamically control a map object's sprite. @@ -310,4 +311,17 @@ // cutscenes nor call a wait command. Used for weather effects in vanilla. #define TRIGGER_RUN_IMMEDIATELY 0 +// Temp var aliases +#define VAR_TEMP_CHALLENGE_STATUS VAR_TEMP_0 + +#define VAR_TEMP_MIXED_RECORDS VAR_TEMP_0 +#define VAR_TEMP_RECORD_MIX_GIFT_ITEM VAR_TEMP_1 + +#define VAR_TEMP_PLAYING_PYRAMID_MUSIC VAR_TEMP_E + +#define VAR_TEMP_FRONTIER_TUTOR_SELECTION VAR_TEMP_D +#define VAR_TEMP_FRONTIER_TUTOR_ID VAR_TEMP_E + +#define VAR_TEMP_TRANSFERRED_SPECIES VAR_TEMP_1 + #endif // GUARD_CONSTANTS_VARS_H diff --git a/include/credits.h b/include/credits.h index 2e8c7e0c3c..43f26c3744 100644 --- a/include/credits.h +++ b/include/credits.h @@ -1,7 +1,7 @@ #ifndef GUARD_CREDITS_H #define GUARD_CREDITS_H -extern EWRAM_DATA bool8 gHasHallOfFameRecords; +extern bool8 gHasHallOfFameRecords; void CB2_StartCreditsSequence(void); diff --git a/include/decompress.h b/include/decompress.h index 5e33665b72..18340d54b2 100644 --- a/include/decompress.h +++ b/include/decompress.h @@ -3,7 +3,7 @@ #include "sprite.h" -extern u8 gDecompressionBuffer[0x4000]; +extern u8 ALIGNED(4) gDecompressionBuffer[0x4000]; void LZDecompressWram(const u32 *src, void *dest); void LZDecompressVram(const u32 *src, void *dest); diff --git a/include/decoration.h b/include/decoration.h index b00dd42f12..db0f337f4d 100644 --- a/include/decoration.h +++ b/include/decoration.h @@ -53,8 +53,8 @@ struct Decoration }; extern const struct Decoration gDecorations[]; -extern EWRAM_DATA u8 *gCurDecorationItems; -extern EWRAM_DATA u8 gCurDecorationIndex; +extern u8 *gCurDecorationItems; +extern u8 gCurDecorationIndex; void InitDecorationContextItems(void); void DoSecretBaseDecorationMenu(u8 taskId); diff --git a/include/event_object_movement.h b/include/event_object_movement.h index 9249cc6a94..2c800fd97a 100644 --- a/include/event_object_movement.h +++ b/include/event_object_movement.h @@ -205,7 +205,7 @@ void UpdateObjectEventsForCameraUpdate(s16 x, s16 y); u8 GetWalkSlowMovementAction(u32); u8 GetJumpMovementAction(u32); u8 ElevationToPriority(u8 elevation); -void ObjectEventUpdateElevation(struct ObjectEvent *objEvent); +void ObjectEventUpdateElevation(struct ObjectEvent *objEvent, struct Sprite *); void SetObjectSubpriorityByElevation(u8 elevation, struct Sprite *, u8 subpriority); void UnfreezeObjectEvent(struct ObjectEvent *); u8 FindLockedObjectEventIndex(struct ObjectEvent *); diff --git a/include/gba/defines.h b/include/gba/defines.h index 82caf56e68..fa3a30fd6e 100644 --- a/include/gba/defines.h +++ b/include/gba/defines.h @@ -27,14 +27,12 @@ #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 PLTT 0x5000000 +#define BG_PLTT PLTT +#define BG_PLTT_SIZE 0x200 +#define OBJ_PLTT (PLTT + BG_PLTT_SIZE) #define OBJ_PLTT_SIZE 0x200 +#define PLTT_SIZE (BG_PLTT_SIZE + OBJ_PLTT_SIZE) #define VRAM 0x6000000 #define VRAM_SIZE 0x18000 @@ -64,14 +62,23 @@ #define ROM_HEADER_SIZE 0xC0 +// Dimensions of a tile in pixels +#define TILE_WIDTH 8 +#define TILE_HEIGHT 8 + +// Dimensions of the GBA screen in pixels #define DISPLAY_WIDTH 240 #define DISPLAY_HEIGHT 160 -#define DISPLAY_TILE_WIDTH (DISPLAY_WIDTH / 8) -#define DISPLAY_TILE_HEIGHT (DISPLAY_HEIGHT / 8) +// Dimensions of the GBA screen in tiles +#define DISPLAY_TILE_WIDTH (DISPLAY_WIDTH / TILE_WIDTH) +#define DISPLAY_TILE_HEIGHT (DISPLAY_HEIGHT / TILE_HEIGHT) -#define TILE_SIZE_4BPP 32 -#define TILE_SIZE_8BPP 64 +// Size of different tile formats in bytes +#define TILE_SIZE(bpp)((bpp) * TILE_WIDTH * TILE_HEIGHT / 8) +#define TILE_SIZE_1BPP TILE_SIZE(1) // 8 +#define TILE_SIZE_4BPP TILE_SIZE(4) // 32 +#define TILE_SIZE_8BPP TILE_SIZE(8) // 64 #define TILE_OFFSET_4BPP(n) ((n) * TILE_SIZE_4BPP) #define TILE_OFFSET_8BPP(n) ((n) * TILE_SIZE_8BPP) diff --git a/include/gba/io_reg.h b/include/gba/io_reg.h index 148ce31db4..53021185e3 100644 --- a/include/gba/io_reg.h +++ b/include/gba/io_reg.h @@ -707,7 +707,7 @@ #define R_BUTTON 0x0100 #define L_BUTTON 0x0200 #define KEYS_MASK 0x03FF -#define KEY_INTR_ENABLE 0x0400 +#define KEY_INTR_ENABLE 0x4000 #define KEY_OR_INTR 0x0000 #define KEY_AND_INTR 0x8000 #define DPAD_ANY ((DPAD_RIGHT | DPAD_LEFT | DPAD_UP | DPAD_DOWN)) diff --git a/include/gba/m4a_internal.h b/include/gba/m4a_internal.h index 40a25ba059..fc8205efd9 100644 --- a/include/gba/m4a_internal.h +++ b/include/gba/m4a_internal.h @@ -213,7 +213,7 @@ struct SoundInfo ExtVolPitFunc ExtVolPit; u8 gap2[16]; struct SoundChannel chans[MAX_DIRECTSOUND_CHANNELS]; - s8 pcmBuffer[PCM_DMA_BUF_SIZE * 2]; + s8 ALIGNED(4) pcmBuffer[PCM_DMA_BUF_SIZE * 2]; }; struct SongHeader diff --git a/include/gba/macro.h b/include/gba/macro.h index 3b35a19464..5239cd4c87 100644 --- a/include/gba/macro.h +++ b/include/gba/macro.h @@ -1,7 +1,7 @@ #ifndef GUARD_GBA_MACRO_H #define GUARD_GBA_MACRO_H -#define CPU_FILL(value, dest, size, bit) \ +#define CPU_FILL_UNCHECKED(value, dest, size, bit) \ { \ vu##bit tmp = (vu##bit)(value); \ CpuSet((void *)&tmp, \ @@ -9,10 +9,33 @@ CPU_SET_##bit##BIT | CPU_SET_SRC_FIXED | ((size)/(bit/8) & 0x1FFFFF)); \ } +#if MODERN +#define CPU_FILL(value, dest, size, bit) \ + do \ + { \ + _Static_assert(_Alignof(dest) >= (bit / 8), "destination potentially unaligned"); \ + CPU_FILL_UNCHECKED(value, dest, size, bit); \ + } while (0) +#else +#define CPU_FILL(value, dest, size, bit) CPU_FILL_UNCHECKED(value, dest, size, bit) +#endif + #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 CPU_COPY_UNCHECKED(src, dest, size, bit) CpuSet(src, dest, CPU_SET_##bit##BIT | ((size)/(bit/8) & 0x1FFFFF)) + +#if MODERN +#define CPU_COPY(src, dest, size, bit) \ + do \ + { \ + _Static_assert(_Alignof(src) >= (bit / 8), "source potentially unaligned"); \ + _Static_assert(_Alignof(dest) >= (bit / 8), "destination potentially unaligned"); \ + CPU_COPY_UNCHECKED(src, dest, size, bit); \ + } while (0) +#else +#define CPU_COPY(src, dest, size, bit) CPU_COPY_UNCHECKED(src, dest, size, bit) +#endif #define CpuCopy16(src, dest, size) CPU_COPY(src, dest, size, 16) #define CpuCopy32(src, dest, size) CPU_COPY(src, dest, size, 32) @@ -31,7 +54,7 @@ #define CpuFastCopy(src, dest, size) CpuFastSet(src, dest, ((size)/(32/8) & 0x1FFFFF)) -#define DmaSet(dmaNum, src, dest, control) \ +#define DmaSetUnchecked(dmaNum, src, dest, control) \ { \ vu32 *dmaRegs = (vu32 *)REG_ADDR_DMA##dmaNum; \ dmaRegs[0] = (vu32)(src); \ @@ -40,7 +63,21 @@ dmaRegs[2]; \ } -#define DMA_FILL(dmaNum, value, dest, size, bit) \ +#if MODERN +// NOTE: Assumes 16-bit DMAs. +#define DmaSet(dmaNum, src, dest, control) \ + do \ + { \ + _Static_assert(_Alignof(src) >= __builtin_choose_expr(__builtin_constant_p(control), ((control) & (DMA_32BIT << 16)) ? 4 : 2, 2), "source potentially unaligned"); \ + _Static_assert(_Alignof(dest) >= __builtin_choose_expr(__builtin_constant_p(control), ((control) & (DMA_32BIT << 16)) ? 4 : 2, 2), "destination potentially unaligned"); \ + DmaSetUnchecked(dmaNum, src, dest, control); \ + } while (0) +#else +#define DmaSet(dmaNum, src, dest, control) \ + DmaSetUnchecked(dmaNum, src, dest, control) +#endif + +#define DMA_FILL_UNCHECKED(dmaNum, value, dest, size, bit) \ { \ vu##bit tmp = (vu##bit)(value); \ DmaSet(dmaNum, \ @@ -50,6 +87,17 @@ | ((size)/(bit/8))); \ } +#if MODERN +#define DMA_FILL(dmaNum, value, dest, size, bit) \ + do \ + { \ + _Static_assert(_Alignof(dest) >= (bit / 8), "destination potentially unaligned"); \ + DMA_FILL_UNCHECKED(dmaNum, value, dest, size, bit); \ + } while (0) +#else +#define DMA_FILL(dmaNum, value, dest, size, bit) DMA_FILL_UNCHECKED(dmaNum, value, dest, size, bit) +#endif + #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) @@ -58,23 +106,46 @@ // 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) \ +#define DMA_CLEAR_UNCHECKED(dmaNum, dest, size, bit) \ { \ vu##bit *_dest = (vu##bit *)(dest); \ u32 _size = size; \ DmaFill##bit(dmaNum, 0, _dest, _size); \ } +#if MODERN +#define DMA_CLEAR(dmaNum, dest, size, bit) \ + do \ + { \ + _Static_assert(_Alignof(dest) >= (bit / 8), "destination potentially unaligned"); \ + DMA_CLEAR_UNCHECKED(dmaNum, dest, size, bit); \ + } while (0) +#else +#define DMA_CLEAR(dmaNum, dest, size, bit) DMA_CLEAR_UNCHECKED(dmaNum, dest, size, bit) +#endif + #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) \ +#define DMA_COPY_UNCHECKED(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))) +#if MODERN +#define DMA_COPY(dmaNum, src, dest, size, bit) \ + do \ + { \ + _Static_assert(_Alignof(src) >= (bit / 8), "source potentially unaligned"); \ + _Static_assert(_Alignof(dest) >= (bit / 8), "destination potentially unaligned"); \ + DMA_COPY_UNCHECKED(dmaNum, src, dest, size, bit); \ + } while (0) +#else +#define DMA_COPY(dmaNum, src, dest, size, bit) DMA_COPY_UNCHECKED(dmaNum, src, dest, size, bit) +#endif + #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) diff --git a/include/gba/syscall.h b/include/gba/syscall.h index 56cd4ba587..c922084d5f 100644 --- a/include/gba/syscall.h +++ b/include/gba/syscall.h @@ -27,10 +27,32 @@ u16 ArcTan2(s16 x, s16 y); void CpuSet(const void *src, void *dest, u32 control); +#if MODERN +// NOTE: Assumes 16-bit CpuSets unless control is a constant and has +// CPU_SET_32BIT set. +#define CpuSet(src, dest, control) \ + do \ + { \ + _Static_assert(_Alignof(src) >= __builtin_choose_expr(__builtin_constant_p(control), ((control) & CPU_SET_32BIT) ? 4 : 2, 2), "source potentially unaligned"); \ + _Static_assert(_Alignof(dest) >= __builtin_choose_expr(__builtin_constant_p(control), ((control) & CPU_SET_32BIT) ? 4 : 2, 2), "destination potentially unaligned"); \ + CpuSet(src, dest, control); \ + } while (0) +#endif + #define CPU_FAST_SET_SRC_FIXED 0x01000000 void CpuFastSet(const void *src, void *dest, u32 control); +#if MODERN +#define CpuFastSet(src, dest, control) \ + do \ + { \ + _Static_assert(_Alignof(src) >= 4, "source potentially unaligned"); \ + _Static_assert(_Alignof(dest) >= 4, "destination potentially unaligned"); \ + CpuFastSet(src, dest, control); \ + } while (0) +#endif + void BgAffineSet(struct BgAffineSrcData *src, struct BgAffineDstData *dest, s32 count); void ObjAffineSet(struct ObjAffineSrcData *src, void *dest, s32 count, s32 offset); diff --git a/include/global.h b/include/global.h index b5c56ec92e..26c86cf2f1 100644 --- a/include/global.h +++ b/include/global.h @@ -20,7 +20,6 @@ #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") #define NAKED __attribute__((naked)) @@ -86,6 +85,12 @@ #define SAFE_DIV(a, b) ((a) / (b)) #endif +// The below macro does a%n, but (to match) will switch to a&(n-1) if n is a power of 2. +// There are cases where GF does a&(n-1) where we would really like to have a%n, because +// if n is changed to a value that isn't a power of 2 then a&(n-1) is unlikely to work as +// intended, and a%n for powers of 2 isn't always optimized to use &. +#define MOD(a, n)(((n) & ((n)-1)) ? ((a) % (n)) : ((a) & ((n)-1))) + // Extracts the upper 16 bits of a 32-bit number #define HIHALF(n) (((n) & 0xFFFF0000) >> 16) @@ -135,6 +140,13 @@ #define NUM_FLAG_BYTES ROUND_BITS_TO_BYTES(FLAGS_COUNT) #define NUM_TRENDY_SAYING_BYTES ROUND_BITS_TO_BYTES(NUM_TRENDY_SAYINGS) +// This returns the number of arguments passed to it (up to 8). +#define NARG_8(...) NARG_8_(_, ##__VA_ARGS__, 8, 7, 6, 5, 4, 3, 2, 1, 0) +#define NARG_8_(_, a, b, c, d, e, f, g, h, N, ...) N + +#define CAT(a, b) CAT_(a, b) +#define CAT_(a, b) a ## b + // This produces an error at compile-time if expr is zero. // It looks like file.c:line: size of array `id' is negative #define STATIC_ASSERT(expr, id) typedef char id[(expr) ? 1 : -1]; @@ -841,7 +853,7 @@ struct WaldaPhrase struct TrainerNameRecord { u32 trainerId; - u8 trainerName[PLAYER_NAME_LENGTH + 1]; + u8 ALIGNED(2) trainerName[PLAYER_NAME_LENGTH + 1]; }; struct TrainerHillSave diff --git a/include/global.tv.h b/include/global.tv.h index 3729562cd6..9c3902e7cc 100644 --- a/include/global.tv.h +++ b/include/global.tv.h @@ -113,17 +113,17 @@ typedef union // size = 0x24 struct { /*0x00*/ u8 kind; /*0x01*/ bool8 active; - /*0x02*/ u8 trainerName[PLAYER_NAME_LENGTH + 1]; + /*0x02*/ u8 playerName[PLAYER_NAME_LENGTH + 1]; /*0x0A*/ u16 species; - /*0x0C*/ u8 pokemonName[8]; + /*0x0C*/ u8 opponentName[PLAYER_NAME_LENGTH + 1]; /*0x14*/ u16 defeatedSpecies; /*0x16*/ u16 numFights; /*0x18*/ u16 words[1]; /*0x1A*/ u8 btLevel; /*0x1B*/ u8 interviewResponse; /*0x1C*/ bool8 wonTheChallenge; - /*0x1D*/ u8 language; - /*0x1E*/ u8 pokemonNameLanguage; + /*0x1D*/ u8 playerLanguage; + /*0x1E*/ u8 opponentLanguage; /*0x1F*/ //u8 padding; } bravoTrainerTower; diff --git a/include/graphics.h b/include/graphics.h index 135eaa95e3..9fab084f27 100644 --- a/include/graphics.h +++ b/include/graphics.h @@ -3186,9 +3186,9 @@ extern const u16 gWallClockFemale_Pal[]; extern const u32 gWallClockStart_Tilemap[]; extern const u32 gWallClockView_Tilemap[]; -extern const u32 gBerryFixGameboy_Gfx[]; -extern const u32 gBerryFixGameboy_Tilemap[]; -extern const u16 gBerryFixGameboy_Pal[]; +extern const u32 gBerryFixGbaConnect_Gfx[]; +extern const u32 gBerryFixGbaConnect_Tilemap[]; +extern const u16 gBerryFixGbaConnect_Pal[]; extern const u32 gBerryFixGameboyLogo_Gfx[]; extern const u32 gBerryFixGameboyLogo_Tilemap[]; extern const u16 gBerryFixGameboyLogo_Pal[]; @@ -3893,7 +3893,7 @@ extern const u32 gIntroGroudon_Gfx[]; extern const u32 gIntroGroudon_Tilemap[]; extern const u32 gIntroLegendBg_Gfx[]; extern const u32 gIntroGroudonBg_Tilemap[]; -extern const u8 gIntro3Bg_Pal[0x200]; +extern const u8 ALIGNED(2) gIntro3Bg_Pal[0x200]; extern const u32 gIntroKyogre_Gfx[]; extern const u32 gIntroKyogre_Tilemap[]; extern const u32 gIntroKyogreBg_Tilemap[]; @@ -4769,17 +4769,18 @@ extern const u32 gMetalShineTilemap[]; extern const u32 gBattleAnimMaskImage_Curse[]; extern const u32 gBattleAnimMaskTilemap_Curse[]; -extern const u32 gBattleStatMask_Gfx[]; -extern const u32 gBattleStatMask1_Tilemap[]; -extern const u32 gBattleStatMask2_Tilemap[]; -extern const u32 gBattleStatMask1_Pal[]; -extern const u32 gBattleStatMask2_Pal[]; -extern const u32 gBattleStatMask3_Pal[]; -extern const u32 gBattleStatMask4_Pal[]; -extern const u32 gBattleStatMask5_Pal[]; -extern const u32 gBattleStatMask6_Pal[]; -extern const u32 gBattleStatMask7_Pal[]; -extern const u32 gBattleStatMask8_Pal[]; + +extern const u32 gStatAnim_Gfx[]; +extern const u32 gStatAnim_Increase_Tilemap[]; +extern const u32 gStatAnim_Decrease_Tilemap[]; +extern const u32 gStatAnim_Defense_Pal[]; +extern const u32 gStatAnim_Attack_Pal[]; +extern const u32 gStatAnim_Accuracy_Pal[]; +extern const u32 gStatAnim_Speed_Pal[]; +extern const u32 gStatAnim_Multiple_Pal[]; +extern const u32 gStatAnim_Evasion_Pal[]; +extern const u32 gStatAnim_SpAttack_Pal[]; +extern const u32 gStatAnim_SpDefense_Pal[]; extern const u32 gContestInterfaceGfx[]; extern const u32 gContestAudienceGfx[]; @@ -5018,9 +5019,9 @@ extern const u32 gPokenavOptions_Gfx[]; extern const u16 gPokenavOptions_Pal[]; // Battle Factory Screen -extern const u8 gFrontierFactorySelectMenu_Gfx[]; -extern const u8 gFrontierFactorySelectMenu_Tilemap[]; -extern const u16 gFrontierFactorySelectMenu_Pal[]; +extern const u16 gFrontierFactoryMenu_Gfx[34 * TILE_SIZE_4BPP / 2]; +extern const u16 gFrontierFactoryMenu_Tilemap[]; +extern const u16 gFrontierFactoryMenu_Pal[]; // Object event pals extern const u16 gObjectEventPal_Brendan[]; diff --git a/include/item.h b/include/item.h index c964e7628a..af8ff8b9d0 100644 --- a/include/item.h +++ b/include/item.h @@ -2,6 +2,8 @@ #define GUARD_ITEM_H #include "constants/item.h" +#include "constants/items.h" +#include "constants/tms_hms.h" typedef void (*ItemUseFunc)(u8); @@ -74,4 +76,25 @@ u8 ItemId_GetBattleUsage(u16 itemId); ItemUseFunc ItemId_GetBattleFunc(u16 itemId); u8 ItemId_GetSecondaryId(u16 itemId); +/* Expands to: + * enum + * { + * ITEM_TM_FOCUS_PUNCH, + * ... + * ITEM_HM_CUT, + * ... + * }; */ +#define ENUM_TM(id) CAT(ITEM_TM_, id), +#define ENUM_HM(id) CAT(ITEM_HM_, id), +enum +{ + ENUM_TM_START_ = ITEM_TM01 - 1, + FOREACH_TM(ENUM_TM) + + ENUM_HM_START_ = ITEM_HM01 - 1, + FOREACH_HM(ENUM_HM) +}; +#undef ENUM_TM +#undef ENUM_HM + #endif // GUARD_ITEM_H diff --git a/include/item_menu.h b/include/item_menu.h index ce03cdacb8..09ddd729c4 100644 --- a/include/item_menu.h +++ b/include/item_menu.h @@ -78,7 +78,7 @@ struct BagMenu u8 numShownItems[POCKETS_COUNT]; s16 graphicsLoadState; u8 unused2[14]; - u8 pocketNameBuffer[32][32]; + u8 ALIGNED(4) pocketNameBuffer[32][32]; u8 unused3[4]; }; diff --git a/include/librfu.h b/include/librfu.h index 0026adecea..6b0bd97c71 100644 --- a/include/librfu.h +++ b/include/librfu.h @@ -329,7 +329,7 @@ struct RfuIntrStruct { union RfuPacket rxPacketAlloc; union RfuPacket txPacketAlloc; - u8 block1[0x960]; // size of librfu_intr.s binary + u8 ALIGNED(2) block1[0x960]; // size of librfu_intr.s binary struct STWIStatus block2; }; diff --git a/include/link.h b/include/link.h index f27cddc620..66dd5fecd2 100644 --- a/include/link.h +++ b/include/link.h @@ -238,7 +238,7 @@ struct BlockRequest }; extern struct Link gLink; -extern u16 gRecvCmds[MAX_RFU_PLAYERS][CMD_LENGTH]; +extern u16 ALIGNED(4) gRecvCmds[MAX_RFU_PLAYERS][CMD_LENGTH]; extern u8 gBlockSendBuffer[BLOCK_BUFFER_SIZE]; extern u16 gLinkType; extern u32 gLinkStatus; diff --git a/include/mon_markings.h b/include/mon_markings.h index fda7ad5630..dbb53f8e82 100644 --- a/include/mon_markings.h +++ b/include/mon_markings.h @@ -18,7 +18,7 @@ struct MonMarkingsMenu struct Sprite *textSprite; const u8 *frameTiles; const u16 *framePalette; - u8 windowSpriteTiles[0x1000]; + u8 ALIGNED(2) windowSpriteTiles[0x1000]; u8 unused[0x80]; u8 tileLoadState; }; diff --git a/include/palette.h b/include/palette.h index 29723ef6c8..15c92cc2a7 100644 --- a/include/palette.h +++ b/include/palette.h @@ -6,8 +6,7 @@ #define gPaletteFade_delay (gPaletteFade.multipurpose2) // normal and hardware fade #define gPaletteFade_submode (gPaletteFade.multipurpose2) // fast fade -#define PLTT_BUFFER_SIZE 0x200 -#define PLTT_DECOMP_BUFFER_SIZE (PLTT_BUFFER_SIZE * 2) +#define PLTT_BUFFER_SIZE (PLTT_SIZE / sizeof(u16)) #define PALETTE_FADE_STATUS_DELAY 2 #define PALETTE_FADE_STATUS_ACTIVE 1 @@ -55,9 +54,9 @@ struct PaletteFadeControl extern struct PaletteFadeControl gPaletteFade; extern u32 gPlttBufferTransferPending; -extern u8 gPaletteDecompressionBuffer[]; -extern u16 gPlttBufferUnfaded[PLTT_BUFFER_SIZE]; -extern u16 gPlttBufferFaded[PLTT_BUFFER_SIZE]; +extern u8 ALIGNED(4) gPaletteDecompressionBuffer[]; +extern u16 ALIGNED(4) gPlttBufferUnfaded[PLTT_BUFFER_SIZE]; +extern u16 ALIGNED(4) gPlttBufferFaded[PLTT_BUFFER_SIZE]; void LoadCompressedPalette(const u32 *src, u16 offset, u16 size); void LoadPalette(const void *src, u16 offset, u16 size); diff --git a/include/pokeball.h b/include/pokeball.h index 3dbd80527f..9124948aa0 100644 --- a/include/pokeball.h +++ b/include/pokeball.h @@ -35,7 +35,7 @@ extern const struct SpriteTemplate gBallSpriteTemplates[]; #define POKEBALL_PLAYER_SLIDEIN 0xFD u8 DoPokeballSendOutAnimation(s16 pan, u8 kindOfThrow); -void CreatePokeballSpriteToReleaseMon(u8 monSpriteId, u8 monPalNum, u8 x, u8 y, u8 oamPriority, u8 subpriortiy, u8 delay, u32 fadePalettes, u16 species); +void CreatePokeballSpriteToReleaseMon(u8 monSpriteId, u8 monPalNum, u8 x, u8 y, u8 oamPriority, u8 subpriority, u8 delay, u32 fadePalettes, u16 species); u8 CreateTradePokeballSprite(u8 monSpriteId, u8 monPalNum, u8 x, u8 y, u8 oamPriority, u8 subPriority, u8 delay, u32 fadePalettes); void StartHealthboxSlideIn(u8 battler); void DoHitAnimHealthboxEffect(u8 battler); diff --git a/include/pokemon.h b/include/pokemon.h index 057f964287..587e731bff 100644 --- a/include/pokemon.h +++ b/include/pokemon.h @@ -437,12 +437,17 @@ void SetMultiuseSpriteTemplateToPokemon(u16 speciesTag, u8 battlerPosition); void SetMultiuseSpriteTemplateToTrainerBack(u16 trainerSpriteId, u8 battlerPosition); void SetMultiuseSpriteTemplateToTrainerFront(u16 trainerPicId, u8 battlerPosition); -// These are full type signatures for GetMonData() and GetBoxMonData(), -// but they are not used since some code erroneously omits the third arg. -// u32 GetMonData(struct Pokemon *mon, s32 field, u8 *data); -// u32 GetBoxMonData(struct BoxPokemon *boxMon, s32 field, u8 *data); -u32 GetMonData(); -u32 GetBoxMonData(); +/* GameFreak called Get(Box)MonData with either 2 or 3 arguments, for + * type safety we have a Get(Box)MonData macro which dispatches to + * either Get(Box)MonData2 or Get(Box)MonData3 based on the number of + * arguments. The two functions are aliases of each other, but they + * differ for matching purposes in the caller's codegen. */ +#define GetMonData(...) CAT(GetMonData, NARG_8(__VA_ARGS__))(__VA_ARGS__) +#define GetBoxMonData(...) CAT(GetBoxMonData, NARG_8(__VA_ARGS__))(__VA_ARGS__) +u32 GetMonData3(struct Pokemon *mon, s32 field, u8 *data); +u32 GetMonData2(struct Pokemon *mon, s32 field); +u32 GetBoxMonData3(struct BoxPokemon *boxMon, s32 field, u8 *data); +u32 GetBoxMonData2(struct BoxPokemon *boxMon, s32 field); void SetMonData(struct Pokemon *mon, s32 field, const void *dataArg); void SetBoxMonData(struct BoxPokemon *boxMon, s32 field, const void *dataArg); diff --git a/include/scanline_effect.h b/include/scanline_effect.h index ae534d9699..80d9df764d 100644 --- a/include/scanline_effect.h +++ b/include/scanline_effect.h @@ -37,7 +37,7 @@ struct ScanlineEffect extern struct ScanlineEffect gScanlineEffect; -extern u16 gScanlineEffectRegBuffers[2][0x3C0]; +extern u16 ALIGNED(4) gScanlineEffectRegBuffers[2][0x3C0]; void ScanlineEffect_Stop(void); void ScanlineEffect_Clear(void); diff --git a/include/script_menu.h b/include/script_menu.h index 36b66bf987..734c717cff 100644 --- a/include/script_menu.h +++ b/include/script_menu.h @@ -1,6 +1,8 @@ #ifndef GUARD_SCRIPT_MENU_H #define GUARD_SCRIPT_MENU_H +#include "constants/script_menu.h" + extern const u8 *const gStdStrings[]; bool8 ScriptMenu_Multichoice(u8 left, u8 top, u8 multichoiceId, bool8 ignoreBPress); diff --git a/include/shop.h b/include/shop.h index 7fd7669ea5..6644ba0aa0 100644 --- a/include/shop.h +++ b/include/shop.h @@ -1,7 +1,7 @@ #ifndef GUARD_SHOP_H #define GUARD_SHOP_H -extern EWRAM_DATA struct ItemSlot gMartPurchaseHistory[3]; +extern struct ItemSlot gMartPurchaseHistory[3]; void CreatePokemartMenu(const u16 *); void CreateDecorationShop1Menu(const u16 *); diff --git a/ld_script.txt b/ld_script.txt index 572ce3ac4e..5f1a3e4ed1 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -17,8 +17,8 @@ SECTIONS { . = 0x1C000; INCLUDE "sym_ewram.ld" - src/*.o(.ewram_data); - gflib/*.o(.ewram_data); + src/*.o(ewram_data); + gflib/*.o(ewram_data); *libc.a:impure.o(.data); *libc.a:locale.o(.data); diff --git a/src/apprentice.c b/src/apprentice.c index 89017de33a..9ce5ec0dc2 100644 --- a/src/apprentice.c +++ b/src/apprentice.c @@ -346,11 +346,10 @@ static u16 GetRandomAlternateMove(u8 monId) learnset = gLevelUpLearnsets[species]; j = 0; - // Despite being open level, level up moves are only read up to level 60 if (PLAYER_APPRENTICE.lvlMode == APPRENTICE_LVL_MODE_50) - level = 50; + level = FRONTIER_MAX_LEVEL_50; else // == APPRENTICE_LVL_MODE_OPEN - level = 60; + level = 60; // Despite being open level, level up moves are only read up to level 60 for (j = 0; learnset[j] != LEVEL_UP_END; j++) { @@ -464,7 +463,7 @@ static void GetLatestLearnedMoves(u16 species, u16 *moves) const u16 *learnset; if (PLAYER_APPRENTICE.lvlMode == APPRENTICE_LVL_MODE_50) - level = 50; + level = FRONTIER_MAX_LEVEL_50; else // == APPRENTICE_LVL_MODE_OPEN level = 60; @@ -666,11 +665,12 @@ static void Task_ChooseAnswer(u8 taskId) case MENU_NOTHING_CHOSEN: return; case MENU_B_PRESSED: + // Only ever true. Answering Apprentice questions is required. if (tNoBButton) return; PlaySE(SE_SELECT); - gSpecialVar_Result = 0x7F; + gSpecialVar_Result = MULTI_B_PRESSED; break; default: gSpecialVar_Result = input; diff --git a/src/battle_ai_script_commands.c b/src/battle_ai_script_commands.c index 2152be374a..aa34f46ec7 100644 --- a/src/battle_ai_script_commands.c +++ b/src/battle_ai_script_commands.c @@ -13,16 +13,13 @@ #include "constants/abilities.h" #include "constants/battle_ai.h" #include "constants/battle_move_effects.h" +#include "constants/items.h" #include "constants/moves.h" -#define AI_ACTION_DONE 0x0001 -#define AI_ACTION_FLEE 0x0002 -#define AI_ACTION_WATCH 0x0004 -#define AI_ACTION_DO_NOT_ATTACK 0x0008 -#define AI_ACTION_UNK5 0x0010 -#define AI_ACTION_UNK6 0x0020 -#define AI_ACTION_UNK7 0x0040 -#define AI_ACTION_UNK8 0x0080 +#define AI_ACTION_DONE (1 << 0) +#define AI_ACTION_FLEE (1 << 1) +#define AI_ACTION_WATCH (1 << 2) +#define AI_ACTION_DO_NOT_ATTACK (1 << 3) #define AI_THINKING_STRUCT ((struct AI_ThinkingStruct *)(gBattleResources->ai)) #define BATTLE_HISTORY ((struct BattleHistory *)(gBattleResources->battleHistory)) @@ -283,7 +280,6 @@ static const u16 sIgnoredPowerfulMoveEffects[] = IGNORED_MOVES_END }; -// code void BattleAI_HandleItemUseBeforeAISetup(u8 defaultScoreMoves) { s32 i; @@ -302,7 +298,7 @@ void BattleAI_HandleItemUseBeforeAISetup(u8 defaultScoreMoves) { for (i = 0; i < MAX_TRAINER_ITEMS; i++) { - if (gTrainers[gTrainerBattleOpponent_A].items[i] != 0) + if (gTrainers[gTrainerBattleOpponent_A].items[i] != ITEM_NONE) { BATTLE_HISTORY->trainerItems[BATTLE_HISTORY->itemsNo] = gTrainers[gTrainerBattleOpponent_A].items[i]; BATTLE_HISTORY->itemsNo++; @@ -482,9 +478,9 @@ static u8 ChooseMoveOrAction_Doubles(void) else { if (gBattleTypeFlags & BATTLE_TYPE_PALACE) - BattleAI_SetupAIData(gBattleStruct->palaceFlags >> 4); + BattleAI_SetupAIData(gBattleStruct->palaceFlags >> MAX_BATTLERS_COUNT); else - BattleAI_SetupAIData((1 << MAX_MON_MOVES) - 1); + BattleAI_SetupAIData(ALL_MOVES_MASK); gBattlerTarget = i; diff --git a/src/battle_ai_switch_items.c b/src/battle_ai_switch_items.c index 5789a3ff6f..06cdd6c82f 100644 --- a/src/battle_ai_switch_items.c +++ b/src/battle_ai_switch_items.c @@ -687,7 +687,7 @@ u8 GetMostSuitableMonToSwitchInto(void) invalidMons = 0; - while (invalidMons != 0x3F) // All mons are invalid. + while (invalidMons != (1 << PARTY_SIZE) - 1) // All mons are invalid. { bestDmg = TYPE_MUL_NO_EFFECT; bestMonId = PARTY_SIZE; @@ -741,7 +741,7 @@ u8 GetMostSuitableMonToSwitchInto(void) } else { - invalidMons = 0x3F; // No viable mon to switch. + invalidMons = (1 << PARTY_SIZE) - 1; // No viable mon to switch. } } @@ -862,7 +862,7 @@ static bool8 ShouldUseItem(void) shouldUse = TRUE; break; case AI_ITEM_HEAL_HP: - paramOffset = GetItemEffectParamOffset(item, 4, 4); + paramOffset = GetItemEffectParamOffset(item, 4, ITEM4_HEAL_HP); if (paramOffset == 0) break; if (gBattleMons[gActiveBattler].hp == 0) @@ -935,7 +935,7 @@ static bool8 ShouldUseItem(void) { BtlController_EmitTwoReturnValues(BUFFER_B, B_ACTION_USE_ITEM, 0); *(gBattleStruct->chosenItem + (gActiveBattler / 2) * 2) = item; - gBattleResources->battleHistory->trainerItems[i] = 0; + gBattleResources->battleHistory->trainerItems[i] = ITEM_NONE; return shouldUse; } } diff --git a/src/battle_anim.c b/src/battle_anim.c index 2f5d515c02..e6e049c370 100644 --- a/src/battle_anim.c +++ b/src/battle_anim.c @@ -824,27 +824,15 @@ static void Task_UpdateMonBg(u8 taskId) if (!gTasks[taskId].t2_InBg2) { - u16 *src; - u16 *dst; - gBattle_BG1_X = x + gTasks[taskId].t2_BgX; gBattle_BG1_Y = y + gTasks[taskId].t2_BgY; - - src = &gPlttBufferFaded[0x100 + battlerId * 16]; - dst = &gPlttBufferFaded[0x100 + animBg.paletteId * 16 - 256]; - CpuCopy32(src, dst, 32); + CpuCopy32(&gPlttBufferFaded[OBJ_PLTT_ID(battlerId)], &gPlttBufferFaded[BG_PLTT_ID(animBg.paletteId)], PLTT_SIZE_4BPP); } else { - u16 *src; - u16 *dst; - gBattle_BG2_X = x + gTasks[taskId].t2_BgX; gBattle_BG2_Y = y + gTasks[taskId].t2_BgY; - - src = &gPlttBufferFaded[0x100 + battlerId * 16]; - dst = &gPlttBufferFaded[0x100 - 112]; - CpuCopy32(src, dst, 32); + CpuCopy32(&gPlttBufferFaded[OBJ_PLTT_ID(battlerId)], &gPlttBufferFaded[BG_PLTT_ID(9)], PLTT_SIZE_4BPP); } } diff --git a/src/battle_anim_effects_1.c b/src/battle_anim_effects_1.c index 0ee894085e..c0ad548f17 100644 --- a/src/battle_anim_effects_1.c +++ b/src/battle_anim_effects_1.c @@ -1045,10 +1045,10 @@ const struct SpriteTemplate gSilverWindSmallSparkSpriteTemplate = const u16 gMagicalLeafBlendColors[] = { - RGB(31, 0, 0), + RGB_RED, RGB(31, 19, 0), - RGB(31, 31, 0), - RGB(0, 31, 0), + RGB_YELLOW, + RGB_GREEN, RGB(5, 14, 31), RGB(22, 10, 31), RGB(22, 21, 31), @@ -1971,10 +1971,10 @@ const struct SpriteTemplate gWavyMusicNotesSpriteTemplate = const u16 gParticlesColorBlendTable[][6] = { - {ANIM_TAG_MUSIC_NOTES, RGB(31, 31, 31), RGB(31, 26, 28), RGB(31, 22, 26), RGB(31, 17, 24), RGB(31, 13, 22)}, - {ANIM_TAG_BENT_SPOON, RGB(31, 31, 31), RGB(25, 31, 26), RGB(20, 31, 21), RGB(15, 31, 16), RGB(10, 31, 12)}, - {ANIM_TAG_SPHERE_TO_CUBE, RGB(31, 31, 31), RGB(31, 31, 24), RGB(31, 31, 17), RGB(31, 31, 10), RGB(31, 31, 3)}, - {ANIM_TAG_LARGE_FRESH_EGG, RGB(31, 31, 31), RGB(26, 28, 31), RGB(21, 26, 31), RGB(16, 24, 31), RGB(12, 22, 31)}, + {ANIM_TAG_MUSIC_NOTES, RGB_WHITE, RGB(31, 26, 28), RGB(31, 22, 26), RGB(31, 17, 24), RGB(31, 13, 22)}, + {ANIM_TAG_BENT_SPOON, RGB_WHITE, RGB(25, 31, 26), RGB(20, 31, 21), RGB(15, 31, 16), RGB(10, 31, 12)}, + {ANIM_TAG_SPHERE_TO_CUBE, RGB_WHITE, RGB(31, 31, 24), RGB(31, 31, 17), RGB(31, 31, 10), RGB(31, 31, 3)}, + {ANIM_TAG_LARGE_FRESH_EGG, RGB_WHITE, RGB(26, 28, 31), RGB(21, 26, 31), RGB(16, 24, 31), RGB(12, 22, 31)}, }; const struct SpriteTemplate gFastFlyingMusicNotesSpriteTemplate = @@ -3578,13 +3578,13 @@ static void AnimFlyingParticle(struct Sprite *sprite) { sprite->data[4] = 0; sprite->data[2] = gBattleAnimArgs[3]; - sprite->x = 0xFFF0; + sprite->x = -16; } else { sprite->data[4] = 1; sprite->data[2] = -gBattleAnimArgs[3]; - sprite->x = 0x100; + sprite->x = DISPLAY_WIDTH + 16; } sprite->data[1] = gBattleAnimArgs[1]; @@ -3623,7 +3623,7 @@ static void AnimFlyingParticle_Step(struct Sprite *sprite) sprite->data[0] = (sprite->data[3] * a) & 0xFF; if (!sprite->data[4]) { - if (sprite->x2 + sprite->x <= 0xF7) + if (sprite->x2 + sprite->x < DISPLAY_WIDTH + 8) return; } else @@ -3963,7 +3963,7 @@ static void AnimProtect(struct Sprite *sprite) sprite->oam.priority = GetBattlerSpriteBGPriority(gBattleAnimAttacker); sprite->data[0] = gBattleAnimArgs[2]; - sprite->data[2] = (IndexOfSpritePaletteTag(ANIM_TAG_PROTECT) << 4) + 0x100; + sprite->data[2] = OBJ_PLTT_ID(IndexOfSpritePaletteTag(ANIM_TAG_PROTECT)); sprite->data[7] = 16; SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT2_ALL | BLDCNT_EFFECT_BLEND); SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(16 - sprite->data[7], sprite->data[7])); @@ -4343,7 +4343,7 @@ static void AnimLockOnTarget_Step4(struct Sprite *sprite) sprite->data[1] = 0; } - BlendPalettes(GetBattlePalettesMask(TRUE, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE), sprite->data[1], RGB(31, 31, 31)); + BlendPalettes(GetBattlePalettesMask(TRUE, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE), sprite->data[1], RGB_WHITE); if (sprite->data[1] == 16) { int pal; @@ -5178,7 +5178,7 @@ void AnimTask_DoubleTeam(u8 taskId) for (i = 1; i < 16; i++) gPlttBufferUnfaded[r3 + i] = gPlttBufferUnfaded[r4 + i]; - BlendPalette(r3, 16, 11, RGB(0, 0, 0)); + BlendPalette(r3, 16, 11, RGB_BLACK); task->data[3] = 0; i = 0; while (i < 2 && (obj = CloneBattlerSpriteWithBlend(0)) >= 0) @@ -5251,7 +5251,7 @@ void AnimTask_MusicNotesRainbowBlend(u8 taskId) index = IndexOfSpritePaletteTag(gParticlesColorBlendTable[0][0]); if (index != 0xFF) { - index = (index << 4) + 0x100; + index = OBJ_PLTT_ID(index); for (i = 1; i < ARRAY_COUNT(gParticlesColorBlendTable[0]); i++) gPlttBufferFaded[index + i] = gParticlesColorBlendTable[0][i]; } @@ -5261,7 +5261,7 @@ void AnimTask_MusicNotesRainbowBlend(u8 taskId) index = AllocSpritePalette(gParticlesColorBlendTable[j][0]); if (index != 0xFF) { - index = (index << 4) + 0x100; + index = OBJ_PLTT_ID(index); for (i = 1; i < ARRAY_COUNT(gParticlesColorBlendTable[0]); i++) gPlttBufferFaded[index + i] = gParticlesColorBlendTable[j][i]; } diff --git a/src/battle_anim_effects_2.c b/src/battle_anim_effects_2.c index 13cfc1b4ea..c10bc02b8e 100755 --- a/src/battle_anim_effects_2.c +++ b/src/battle_anim_effects_2.c @@ -1751,7 +1751,7 @@ void AnimTask_AirCutterProjectile(u8 taskId) static void AnimVoidLines(struct Sprite *sprite) { InitSpritePosToAnimAttacker(sprite, FALSE); - sprite->data[0] = 0x100 + (IndexOfSpritePaletteTag(sVoidLinesSpriteTemplate.paletteTag) << 4); + sprite->data[0] = OBJ_PLTT_ID(IndexOfSpritePaletteTag(sVoidLinesSpriteTemplate.paletteTag)); sprite->callback = AnimVoidLines_Step; } @@ -3114,7 +3114,7 @@ static void AnimTask_FakeOut_Step2(u8 taskId) { gTasks[taskId].data[11] = 0x88; SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT1_BG3 | BLDCNT_EFFECT_LIGHTEN); - BlendPalettes(GetBattlePalettesMask(TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE), 16, RGB(31, 31, 31)); + BlendPalettes(GetBattlePalettesMask(TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE), 16, RGB_WHITE); } else if (gTasks[taskId].data[10] > 4) { diff --git a/src/battle_anim_effects_3.c b/src/battle_anim_effects_3.c index ca0beabd32..5168641c6a 100755 --- a/src/battle_anim_effects_3.c +++ b/src/battle_anim_effects_3.c @@ -1383,11 +1383,11 @@ static void SetPsychicBackground_Step(u8 taskId) if (++gTasks[taskId].data[5] == 4) { - lastColor = gPlttBufferFaded[paletteIndex * 16 + 11]; + lastColor = gPlttBufferFaded[BG_PLTT_ID(paletteIndex) + 11]; for (i = 10; i > 0; i--) - gPlttBufferFaded[paletteIndex * 16 + i + 1] = gPlttBufferFaded[paletteIndex * 16 + i]; + gPlttBufferFaded[BG_PLTT_ID(paletteIndex) + i + 1] = gPlttBufferFaded[BG_PLTT_ID(paletteIndex) + i]; - gPlttBufferFaded[paletteIndex * 16 + 1] = lastColor; + gPlttBufferFaded[BG_PLTT_ID(paletteIndex) + 1] = lastColor; gTasks[taskId].data[5] = 0; } @@ -1409,15 +1409,15 @@ static void FadeScreenToWhite_Step(u8 taskId) if (++gTasks[taskId].data[5] == 4) { - lastColor = gPlttBufferFaded[paletteIndex * 16 + 11]; + lastColor = gPlttBufferFaded[BG_PLTT_ID(paletteIndex) + 11]; for (i = 10; i > 0; i--) - gPlttBufferFaded[paletteIndex * 16 + i + 1] = gPlttBufferFaded[paletteIndex * 16 + i]; - gPlttBufferFaded[paletteIndex * 16 + 1] = lastColor; + gPlttBufferFaded[BG_PLTT_ID(paletteIndex) + i + 1] = gPlttBufferFaded[BG_PLTT_ID(paletteIndex) + i]; + gPlttBufferFaded[BG_PLTT_ID(paletteIndex) + 1] = lastColor; - lastColor = gPlttBufferUnfaded[paletteIndex * 16 + 11]; + lastColor = gPlttBufferUnfaded[BG_PLTT_ID(paletteIndex) + 11]; for (i = 10; i > 0; i--) - gPlttBufferUnfaded[paletteIndex * 16 + i + 1] = gPlttBufferUnfaded[paletteIndex * 16 + i]; - gPlttBufferUnfaded[paletteIndex * 16 + 1] = lastColor; + gPlttBufferUnfaded[BG_PLTT_ID(paletteIndex) + i + 1] = gPlttBufferUnfaded[BG_PLTT_ID(paletteIndex) + i]; + gPlttBufferUnfaded[BG_PLTT_ID(paletteIndex) + 1] = lastColor; gTasks[taskId].data[5] = 0; } @@ -3056,7 +3056,7 @@ static void AnimFlatterConfetti(struct Sprite *sprite) if (sprite->data[2] == ANIM_ATTACKER) sprite->x = -8; else - sprite->x = 248; + sprite->x = DISPLAY_WIDTH + 8; sprite->y = 104; sprite->callback = AnimFlatterConfetti_Step; @@ -3414,8 +3414,8 @@ static void AnimTask_AcidArmor_Step(u8 taskId) var0 *= 2; while (var0 >= 0) { - gScanlineEffectRegBuffers[0][var0] = bgX + 240; - gScanlineEffectRegBuffers[1][var0] = bgX + 240; + gScanlineEffectRegBuffers[0][var0] = bgX + DISPLAY_WIDTH; + gScanlineEffectRegBuffers[1][var0] = bgX + DISPLAY_WIDTH; var0 -= 2; } @@ -3896,7 +3896,7 @@ static void AnimTask_FacadeColorBlend_Step(u8 taskId) } else { - BlendPalette(gTasks[taskId].data[2], 16, 0, RGB(0, 0, 0)); + BlendPalette(gTasks[taskId].data[2], 16, 0, RGB_BLACK); DestroyAnimVisualTask(taskId); } } diff --git a/src/battle_anim_flying.c b/src/battle_anim_flying.c index 746e3bdd73..7e5c5e9393 100644 --- a/src/battle_anim_flying.c +++ b/src/battle_anim_flying.c @@ -388,17 +388,17 @@ static void AnimTask_AnimateGustTornadoPalette_Step(u8 taskId) { gTasks[taskId].data[10] = 0; data2 = gTasks[taskId].data[2]; - temp = gPlttBufferFaded[16 * data2 + 0x108]; + temp = gPlttBufferFaded[OBJ_PLTT_ID(data2) + 8]; i = 7; - base = data2 * 16; + base = PLTT_ID(data2); do { - gPlttBufferFaded[base + 0x101 + i] = gPlttBufferFaded[base + 0x100 + i]; + gPlttBufferFaded[base + OBJ_PLTT_OFFSET + 1 + i] = gPlttBufferFaded[base + OBJ_PLTT_OFFSET + i]; i--; } while (i > 0); - gPlttBufferFaded[base + 0x101] = temp; + gPlttBufferFaded[base + OBJ_PLTT_OFFSET + 1] = temp; } if (--gTasks[taskId].data[0] == 0) diff --git a/src/battle_anim_ghost.c b/src/battle_anim_ghost.c index 9b74fdada3..fed1325bc3 100644 --- a/src/battle_anim_ghost.c +++ b/src/battle_anim_ghost.c @@ -627,7 +627,7 @@ static void AnimTask_SpiteTargetShadow_Step1(u8 taskId) task->data[2] = 0; task->data[3] = 16; task->data[13] = GetAnimBattlerSpriteId(ANIM_TARGET); - task->data[4] = (gSprites[task->data[13]].oam.paletteNum + 16) * 16; + task->data[4] = OBJ_PLTT_ID2(gSprites[task->data[13]].oam.paletteNum); if (position == 1) { u16 mask = DISPCNT_BG1_ON; mask2 = mask; @@ -1005,7 +1005,7 @@ static void AnimTask_CurseStretchingBlackBg_Step1(u8 taskId) top = 0; bottom = 112; selectedPalettes = GetBattlePalettesMask(TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE); - BeginNormalPaletteFade(selectedPalettes, 0, 16, 16, RGB(0, 0, 0)); + BeginNormalPaletteFade(selectedPalettes, 0, 16, 16, RGB_BLACK); gTasks[taskId].func = AnimTask_CurseStretchingBlackBg_Step2; } diff --git a/src/battle_anim_ground.c b/src/battle_anim_ground.c index 7b810b56c2..d6d8137bcd 100644 --- a/src/battle_anim_ground.c +++ b/src/battle_anim_ground.c @@ -481,10 +481,10 @@ static void SetDigScanlineEffect(u8 useBG1, s16 y, s16 endY) y++; } - while (y < 160) + while (y < DISPLAY_HEIGHT) { - gScanlineEffectRegBuffers[0][y] = bgX + 240; - gScanlineEffectRegBuffers[1][y] = bgX + 240; + gScanlineEffectRegBuffers[0][y] = bgX + DISPLAY_WIDTH; + gScanlineEffectRegBuffers[1][y] = bgX + DISPLAY_WIDTH; y++; } diff --git a/src/battle_anim_ice.c b/src/battle_anim_ice.c index f870ff4f87..273721e162 100644 --- a/src/battle_anim_ice.c +++ b/src/battle_anim_ice.c @@ -1305,11 +1305,11 @@ static void MovePoisonGasCloud(struct Sprite *sprite) sprite->data[3] = sprite->y += sprite->y2; sprite->data[4] = sprite->y + 4; if (IsContest()) - sprite->data[2] = -0x10; + sprite->data[2] = -16; else if (GET_BATTLER_SIDE2(gBattleAnimTarget) != B_SIDE_PLAYER) - sprite->data[2] = 0x100; + sprite->data[2] = DISPLAY_WIDTH + 16; else - sprite->data[2] = -0x10; + sprite->data[2] = -16; sprite->data[7]++; sprite->x2 = sprite->y2 = 0; diff --git a/src/battle_anim_mons.c b/src/battle_anim_mons.c index ac38c5e474..d9fd652311 100644 --- a/src/battle_anim_mons.c +++ b/src/battle_anim_mons.c @@ -1382,18 +1382,17 @@ void SetGrayscaleOrOriginalPalette(u16 paletteNum, bool8 restoreOriginalColor) struct PlttData *originalColor; struct PlttData *destColor; u16 average; - - paletteNum *= 16; + u16 paletteOffset = PLTT_ID(paletteNum); if (!restoreOriginalColor) { for (i = 0; i < 16; i++) { - originalColor = (struct PlttData *)&gPlttBufferUnfaded[paletteNum + i]; + originalColor = (struct PlttData *)&gPlttBufferUnfaded[paletteOffset + i]; average = originalColor->r + originalColor->g + originalColor->b; average /= 3; - destColor = (struct PlttData *)&gPlttBufferFaded[paletteNum + i]; + destColor = (struct PlttData *)&gPlttBufferFaded[paletteOffset + i]; destColor->r = average; destColor->g = average; destColor->b = average; @@ -1401,7 +1400,7 @@ void SetGrayscaleOrOriginalPalette(u16 paletteNum, bool8 restoreOriginalColor) } else { - CpuCopy32(&gPlttBufferUnfaded[paletteNum], &gPlttBufferFaded[paletteNum], 32); + CpuCopy32(&gPlttBufferUnfaded[paletteOffset], &gPlttBufferFaded[paletteOffset], PLTT_SIZE_4BPP); } } diff --git a/src/battle_anim_normal.c b/src/battle_anim_normal.c index 1c90a3d641..94bbb6ee4e 100644 --- a/src/battle_anim_normal.c +++ b/src/battle_anim_normal.c @@ -709,7 +709,7 @@ static void AnimTask_FlashAnimTagWithColor_Step2(u8 taskId) if (!gPaletteFade.active) { selectedPalettes = 1 << (IndexOfSpritePaletteTag(gTasks[taskId].data[7]) + 16); - BeginNormalPaletteFade(selectedPalettes, 0, 0, 0, RGB(0, 0, 0)); + BeginNormalPaletteFade(selectedPalettes, 0, 0, 0, RGB_BLACK); DestroyAnimVisualTask(taskId); } } diff --git a/src/battle_anim_psychic.c b/src/battle_anim_psychic.c index 978d14c4cd..f7bc6e31ae 100644 --- a/src/battle_anim_psychic.c +++ b/src/battle_anim_psychic.c @@ -468,7 +468,7 @@ static void AnimDefensiveWall(struct Sprite *sprite) sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y) + gBattleAnimArgs[1]; } - sprite->data[0] = 256 + IndexOfSpritePaletteTag(gBattleAnimArgs[2]) * 16; + sprite->data[0] = OBJ_PLTT_ID(IndexOfSpritePaletteTag(gBattleAnimArgs[2])); if (isContest) { diff --git a/src/battle_anim_status_effects.c b/src/battle_anim_status_effects.c index 4e6b3a3402..b987ad33a3 100644 --- a/src/battle_anim_status_effects.c +++ b/src/battle_anim_status_effects.c @@ -424,10 +424,10 @@ static void AnimTask_FrozenIceCube_Step2(u8 taskId) { u16 temp; - temp = gPlttBufferFaded[0x100 + palIndex * 16 + 13]; - gPlttBufferFaded[0x100 + palIndex * 16 + 13] = gPlttBufferFaded[0x100 + palIndex * 16 + 14]; - gPlttBufferFaded[0x100 + palIndex * 16 + 14] = gPlttBufferFaded[0x100 + palIndex * 16 + 15]; - gPlttBufferFaded[0x100 + palIndex * 16 + 15] = temp; + temp = gPlttBufferFaded[OBJ_PLTT_ID(palIndex) + 13]; + gPlttBufferFaded[OBJ_PLTT_ID(palIndex) + 13] = gPlttBufferFaded[OBJ_PLTT_ID(palIndex) + 14]; + gPlttBufferFaded[OBJ_PLTT_ID(palIndex) + 14] = gPlttBufferFaded[OBJ_PLTT_ID(palIndex) + 15]; + gPlttBufferFaded[OBJ_PLTT_ID(palIndex) + 15] = temp; gTasks[taskId].data[2] = 0; gTasks[taskId].data[3]++; @@ -480,8 +480,6 @@ static void AnimTask_FrozenIceCube_Step4(u8 taskId) } } -#define CASE(by, stat) case (STAT_ANIM_##by + stat - 1) - void AnimTask_StatsChange(u8 taskId) { bool16 goesDown = FALSE; @@ -490,42 +488,42 @@ void AnimTask_StatsChange(u8 taskId) switch (gBattleSpritesDataPtr->animationData->animArg) { - CASE(PLUS1, STAT_ATK): goesDown = FALSE; animStatId = 0; break; - CASE(PLUS1, STAT_DEF): goesDown = FALSE; animStatId = 1; break; - CASE(PLUS1, STAT_SPEED): goesDown = FALSE; animStatId = 3; break; - CASE(PLUS1, STAT_SPATK): goesDown = FALSE; animStatId = 5; break; - CASE(PLUS1, STAT_SPDEF): goesDown = FALSE; animStatId = 6; break; - CASE(PLUS1, STAT_ACC): goesDown = FALSE; animStatId = 2; break; - CASE(PLUS1, STAT_EVASION): goesDown = FALSE; animStatId = 4; break; + case STAT_ANIM_PLUS1 + STAT_ATK: goesDown = FALSE; animStatId = STAT_ANIM_PAL_ATK; break; + case STAT_ANIM_PLUS1 + STAT_DEF: goesDown = FALSE; animStatId = STAT_ANIM_PAL_DEF; break; + case STAT_ANIM_PLUS1 + STAT_SPEED: goesDown = FALSE; animStatId = STAT_ANIM_PAL_SPEED; break; + case STAT_ANIM_PLUS1 + STAT_SPATK: goesDown = FALSE; animStatId = STAT_ANIM_PAL_SPATK; break; + case STAT_ANIM_PLUS1 + STAT_SPDEF: goesDown = FALSE; animStatId = STAT_ANIM_PAL_SPDEF; break; + case STAT_ANIM_PLUS1 + STAT_ACC: goesDown = FALSE; animStatId = STAT_ANIM_PAL_ACC; break; + case STAT_ANIM_PLUS1 + STAT_EVASION: goesDown = FALSE; animStatId = STAT_ANIM_PAL_EVASION; break; - CASE(MINUS1, STAT_ATK): goesDown = TRUE; animStatId = 0; break; - CASE(MINUS1, STAT_DEF): goesDown = TRUE; animStatId = 1; break; - CASE(MINUS1, STAT_SPEED): goesDown = TRUE; animStatId = 3; break; - CASE(MINUS1, STAT_SPATK): goesDown = TRUE; animStatId = 5; break; - CASE(MINUS1, STAT_SPDEF): goesDown = TRUE; animStatId = 6; break; - CASE(MINUS1, STAT_ACC): goesDown = TRUE; animStatId = 2; break; - CASE(MINUS1, STAT_EVASION): goesDown = TRUE; animStatId = 4; break; + case STAT_ANIM_MINUS1 + STAT_ATK: goesDown = TRUE; animStatId = STAT_ANIM_PAL_ATK; break; + case STAT_ANIM_MINUS1 + STAT_DEF: goesDown = TRUE; animStatId = STAT_ANIM_PAL_DEF; break; + case STAT_ANIM_MINUS1 + STAT_SPEED: goesDown = TRUE; animStatId = STAT_ANIM_PAL_SPEED; break; + case STAT_ANIM_MINUS1 + STAT_SPATK: goesDown = TRUE; animStatId = STAT_ANIM_PAL_SPATK; break; + case STAT_ANIM_MINUS1 + STAT_SPDEF: goesDown = TRUE; animStatId = STAT_ANIM_PAL_SPDEF; break; + case STAT_ANIM_MINUS1 + STAT_ACC: goesDown = TRUE; animStatId = STAT_ANIM_PAL_ACC; break; + case STAT_ANIM_MINUS1 + STAT_EVASION: goesDown = TRUE; animStatId = STAT_ANIM_PAL_EVASION; break; - CASE(PLUS2, STAT_ATK): goesDown = FALSE; animStatId = 0; sharply = TRUE; break; - CASE(PLUS2, STAT_DEF): goesDown = FALSE; animStatId = 1; sharply = TRUE; break; - CASE(PLUS2, STAT_SPEED): goesDown = FALSE; animStatId = 3; sharply = TRUE; break; - CASE(PLUS2, STAT_SPATK): goesDown = FALSE; animStatId = 5; sharply = TRUE; break; - CASE(PLUS2, STAT_SPDEF): goesDown = FALSE; animStatId = 6; sharply = TRUE; break; - CASE(PLUS2, STAT_ACC): goesDown = FALSE; animStatId = 2; sharply = TRUE; break; - CASE(PLUS2, STAT_EVASION): goesDown = FALSE; animStatId = 4; sharply = TRUE; break; + case STAT_ANIM_PLUS2 + STAT_ATK: goesDown = FALSE; animStatId = STAT_ANIM_PAL_ATK; sharply = TRUE; break; + case STAT_ANIM_PLUS2 + STAT_DEF: goesDown = FALSE; animStatId = STAT_ANIM_PAL_DEF; sharply = TRUE; break; + case STAT_ANIM_PLUS2 + STAT_SPEED: goesDown = FALSE; animStatId = STAT_ANIM_PAL_SPEED; sharply = TRUE; break; + case STAT_ANIM_PLUS2 + STAT_SPATK: goesDown = FALSE; animStatId = STAT_ANIM_PAL_SPATK; sharply = TRUE; break; + case STAT_ANIM_PLUS2 + STAT_SPDEF: goesDown = FALSE; animStatId = STAT_ANIM_PAL_SPDEF; sharply = TRUE; break; + case STAT_ANIM_PLUS2 + STAT_ACC: goesDown = FALSE; animStatId = STAT_ANIM_PAL_ACC; sharply = TRUE; break; + case STAT_ANIM_PLUS2 + STAT_EVASION: goesDown = FALSE; animStatId = STAT_ANIM_PAL_EVASION; sharply = TRUE; break; - CASE(MINUS2, STAT_ATK): goesDown = TRUE; animStatId = 0; sharply = TRUE; break; - CASE(MINUS2, STAT_DEF): goesDown = TRUE; animStatId = 1; sharply = TRUE; break; - CASE(MINUS2, STAT_SPEED): goesDown = TRUE; animStatId = 3; sharply = TRUE; break; - CASE(MINUS2, STAT_SPATK): goesDown = TRUE; animStatId = 5; sharply = TRUE; break; - CASE(MINUS2, STAT_SPDEF): goesDown = TRUE; animStatId = 6; sharply = TRUE; break; - CASE(MINUS2, STAT_ACC): goesDown = TRUE; animStatId = 2; sharply = TRUE; break; - CASE(MINUS2, STAT_EVASION): goesDown = TRUE; animStatId = 4; sharply = TRUE; break; + case STAT_ANIM_MINUS2 + STAT_ATK: goesDown = TRUE; animStatId = STAT_ANIM_PAL_ATK; sharply = TRUE; break; + case STAT_ANIM_MINUS2 + STAT_DEF: goesDown = TRUE; animStatId = STAT_ANIM_PAL_DEF; sharply = TRUE; break; + case STAT_ANIM_MINUS2 + STAT_SPEED: goesDown = TRUE; animStatId = STAT_ANIM_PAL_SPEED; sharply = TRUE; break; + case STAT_ANIM_MINUS2 + STAT_SPATK: goesDown = TRUE; animStatId = STAT_ANIM_PAL_SPATK; sharply = TRUE; break; + case STAT_ANIM_MINUS2 + STAT_SPDEF: goesDown = TRUE; animStatId = STAT_ANIM_PAL_SPDEF; sharply = TRUE; break; + case STAT_ANIM_MINUS2 + STAT_ACC: goesDown = TRUE; animStatId = STAT_ANIM_PAL_ACC; sharply = TRUE; break; + case STAT_ANIM_MINUS2 + STAT_EVASION: goesDown = TRUE; animStatId = STAT_ANIM_PAL_EVASION; sharply = TRUE; break; - case STAT_ANIM_MULTIPLE_PLUS1: goesDown = FALSE; animStatId = 0xFF; sharply = FALSE; break; - case STAT_ANIM_MULTIPLE_PLUS2: goesDown = FALSE; animStatId = 0xFF; sharply = TRUE; break; - case STAT_ANIM_MULTIPLE_MINUS1: goesDown = TRUE; animStatId = 0xFF; sharply = FALSE; break; - case STAT_ANIM_MULTIPLE_MINUS2: goesDown = TRUE; animStatId = 0xFF; sharply = TRUE; break; + case STAT_ANIM_MULTIPLE_PLUS1: goesDown = FALSE; animStatId = STAT_ANIM_PAL_MULTIPLE; sharply = FALSE; break; + case STAT_ANIM_MULTIPLE_PLUS2: goesDown = FALSE; animStatId = STAT_ANIM_PAL_MULTIPLE; sharply = TRUE; break; + case STAT_ANIM_MULTIPLE_MINUS1: goesDown = TRUE; animStatId = STAT_ANIM_PAL_MULTIPLE; sharply = FALSE; break; + case STAT_ANIM_MULTIPLE_MINUS2: goesDown = TRUE; animStatId = STAT_ANIM_PAL_MULTIPLE; sharply = TRUE; break; default: DestroyAnimVisualTask(taskId); @@ -534,11 +532,11 @@ void AnimTask_StatsChange(u8 taskId) gBattleAnimArgs[0] = goesDown; gBattleAnimArgs[1] = animStatId; - gBattleAnimArgs[2] = 0; - gBattleAnimArgs[3] = 0; + gBattleAnimArgs[2] = FALSE; // Whether it's the target, rather than attacker + gBattleAnimArgs[3] = FALSE; // Whether it hits multiple battlers gBattleAnimArgs[4] = sharply; gTasks[taskId].func = InitStatsChangeAnimation; - InitStatsChangeAnimation(taskId); + gTasks[taskId].func(taskId); } #undef CASE diff --git a/src/battle_anim_throw.c b/src/battle_anim_throw.c index 7a7a423834..fea67a6e3c 100755 --- a/src/battle_anim_throw.c +++ b/src/battle_anim_throw.c @@ -384,7 +384,7 @@ const u16 gBallOpenFadeColors[] = [BALL_PREMIER] = RGB(31, 9, 10), // Garbage data - RGB(0, 0, 0), + RGB_BLACK, RGB(1, 16, 0), RGB(3, 0, 1), RGB(1, 8, 0), @@ -1309,12 +1309,12 @@ static void SpriteCB_Ball_Capture_Step(struct Sprite *sprite) if (sprite->sTimer == 40) { PlaySE(SE_RG_BALL_CLICK); - BlendPalettes(0x10000 << sprite->oam.paletteNum, 6, RGB(0, 0, 0)); + BlendPalettes(0x10000 << sprite->oam.paletteNum, 6, RGB_BLACK); MakeCaptureStars(sprite); } else if (sprite->sTimer == 60) { - BeginNormalPaletteFade(0x10000 << sprite->oam.paletteNum, 2, 6, 0, RGB(0, 0, 0)); + BeginNormalPaletteFade(0x10000 << sprite->oam.paletteNum, 2, 6, 0, RGB_BLACK); } else if (sprite->sTimer == 95) { @@ -1352,7 +1352,7 @@ static void SpriteCB_Ball_FadeOut(struct Sprite *sprite) SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_EFFECT_BLEND | BLDCNT_TGT2_ALL); SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(16, 0)); paletteIndex = IndexOfSpritePaletteTag(sprite->template->paletteTag); - BeginNormalPaletteFade(1 << (paletteIndex + 0x10), 0, 0, 16, RGB(31, 31, 31)); + BeginNormalPaletteFade(1 << (paletteIndex + 0x10), 0, 0, 16, RGB_WHITE); sprite->sState++; break; case 1: @@ -2041,7 +2041,7 @@ u8 LaunchBallFadeMonTask(bool8 unfadeLater, u8 spritePalNum, u32 selectedPalette gTasks[taskId].func = Task_FadeMon_ToNormal; } - BeginNormalPaletteFade(selectedPalettes, 0, 0, 16, RGB(31, 31, 31)); + BeginNormalPaletteFade(selectedPalettes, 0, 0, 16, RGB_WHITE); return taskId; } @@ -2117,7 +2117,7 @@ void AnimTask_SwapMonSpriteToFromSubstitute(u8 taskId) gTasks[taskId].data[0] &= 0xFF; x = gSprites[spriteId].x + gSprites[spriteId].x2 + 32; - if (x > 304) + if (x > DISPLAY_WIDTH + 64) gTasks[taskId].data[10]++; break; case 1: diff --git a/src/battle_anim_utility_funcs.c b/src/battle_anim_utility_funcs.c index d8e1e7baa3..ccbc7f902b 100644 --- a/src/battle_anim_utility_funcs.c +++ b/src/battle_anim_utility_funcs.c @@ -16,7 +16,7 @@ struct AnimStatsChangeData { u8 battler1; u8 battler2; - u8 higherPriority; + bool8 hidBattler2; s16 data[8]; u16 species; }; @@ -133,10 +133,10 @@ void AnimTask_SetCamouflageBlend(u8 taskId) gBattleAnimArgs[4] = RGB(14, 9, 3); break; case BATTLE_TERRAIN_BUILDING: - gBattleAnimArgs[4] = RGB(31, 31, 31); + gBattleAnimArgs[4] = RGB_WHITE; break; case BATTLE_TERRAIN_PLAIN: - gBattleAnimArgs[4] = RGB(31, 31, 31); + gBattleAnimArgs[4] = RGB_WHITE; break; } @@ -388,12 +388,33 @@ static void AnimTask_DrawFallingWhiteLinesOnAttacker_Step(u8 taskId) } } +// Defines for data array in sAnimStatsChangeData +#define aDecrease data[0] +#define aAnimStatId data[1] +#define aIsTarget data[2] +#define aMultipleBattlers data[3] // Always false. Changes for multiple battlers are instead run sequentially. +#define aSharply data[4] + +// Task data defines for InitStatsChangeAnimation +#define tAnimSpriteId1 data[0] +#define tVelocity data[1] +#define tMultipleBattlers data[2] +#define tAnimSpriteId2 data[3] +#define tTargetBlend data[4] +#define tWaitTime data[5] +#define tHidBattler2 data[6] +#define tBattler2SpriteId data[7] +#define tWaitTimer data[10] +#define tFadeTimer data[11] +#define tBlend data[12] +#define tState data[15] + void InitStatsChangeAnimation(u8 taskId) { u8 i; sAnimStatsChangeData = AllocZeroed(sizeof(struct AnimStatsChangeData)); - for (i = 0; i < 8; i++) + for (i = 0; i < ARRAY_COUNT(sAnimStatsChangeData->data); i++) sAnimStatsChangeData->data[i] = gBattleAnimArgs[i]; gTasks[taskId].func = StatsChangeAnimation_Step1; @@ -401,21 +422,19 @@ void InitStatsChangeAnimation(u8 taskId) static void StatsChangeAnimation_Step1(u8 taskId) { - if (sAnimStatsChangeData->data[2] == 0) + if (!sAnimStatsChangeData->aIsTarget) sAnimStatsChangeData->battler1 = gBattleAnimAttacker; else sAnimStatsChangeData->battler1 = gBattleAnimTarget; sAnimStatsChangeData->battler2 = BATTLE_PARTNER(sAnimStatsChangeData->battler1); - if (IsContest() || (sAnimStatsChangeData->data[3] && !IsBattlerSpriteVisible(sAnimStatsChangeData->battler2))) - sAnimStatsChangeData->data[3] = 0; + if (IsContest() || (sAnimStatsChangeData->aMultipleBattlers && !IsBattlerSpriteVisible(sAnimStatsChangeData->battler2))) + sAnimStatsChangeData->aMultipleBattlers = FALSE; gBattle_WIN0H = 0; gBattle_WIN0V = 0; - SetGpuReg(REG_OFFSET_WININ, WININ_WIN0_BG_ALL | WININ_WIN0_OBJ | WININ_WIN0_CLR - | WININ_WIN1_BG_ALL | WININ_WIN1_OBJ | WININ_WIN1_CLR); - SetGpuReg(REG_OFFSET_WINOUT, WINOUT_WIN01_BG0 | WINOUT_WIN01_BG2 | WINOUT_WIN01_BG3 | WINOUT_WIN01_OBJ | WINOUT_WIN01_CLR - | WINOUT_WINOBJ_BG_ALL | WINOUT_WINOBJ_OBJ | WINOUT_WINOBJ_CLR); + SetGpuReg(REG_OFFSET_WININ, WININ_WIN0_ALL | WININ_WIN1_ALL); + SetGpuReg(REG_OFFSET_WINOUT, (WINOUT_WIN01_ALL & ~WINOUT_WIN01_BG1) | WINOUT_WINOBJ_ALL); SetGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_OBJWIN_ON); SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT1_BG1 | BLDCNT_TGT2_ALL | BLDCNT_EFFECT_BLEND); SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(0, 16)); @@ -424,16 +443,17 @@ static void StatsChangeAnimation_Step1(u8 taskId) if (!IsContest()) SetAnimBgAttribute(1, BG_ANIM_CHAR_BASE_BLOCK, 1); - if (IsDoubleBattle() && sAnimStatsChangeData->data[3] == 0) + if (IsDoubleBattle() && !sAnimStatsChangeData->aMultipleBattlers) { if (GetBattlerPosition(sAnimStatsChangeData->battler1) == B_POSITION_OPPONENT_RIGHT || GetBattlerPosition(sAnimStatsChangeData->battler1) == B_POSITION_PLAYER_LEFT) { if (IsBattlerSpriteVisible(sAnimStatsChangeData->battler2) == TRUE) { - gSprites[gBattlerSpriteIds[sAnimStatsChangeData->battler2]].oam.priority -= 1; + // Push the battler not being animated back so it doesn't receive the animation. + gSprites[gBattlerSpriteIds[sAnimStatsChangeData->battler2]].oam.priority--; SetAnimBgAttribute(1, BG_ANIM_PRIORITY, 1); - sAnimStatsChangeData->higherPriority = 1; + sAnimStatsChangeData->hidBattler2 = TRUE; } } } @@ -462,79 +482,80 @@ static void StatsChangeAnimation_Step2(u8 taskId) spriteId2 = 0; battlerSpriteId = gBattlerSpriteIds[sAnimStatsChangeData->battler1]; spriteId = CreateInvisibleSpriteCopy(sAnimStatsChangeData->battler1, battlerSpriteId, sAnimStatsChangeData->species); - if (sAnimStatsChangeData->data[3]) + if (sAnimStatsChangeData->aMultipleBattlers) { battlerSpriteId = gBattlerSpriteIds[sAnimStatsChangeData->battler2]; spriteId2 = CreateInvisibleSpriteCopy(sAnimStatsChangeData->battler2, battlerSpriteId, sAnimStatsChangeData->species); } GetBattleAnimBg1Data(&animBgData); - if (sAnimStatsChangeData->data[0] == 0) - AnimLoadCompressedBgTilemapHandleContest(&animBgData, gBattleStatMask1_Tilemap, FALSE); + if (!sAnimStatsChangeData->aDecrease) + AnimLoadCompressedBgTilemapHandleContest(&animBgData, gStatAnim_Increase_Tilemap, FALSE); else - AnimLoadCompressedBgTilemapHandleContest(&animBgData, gBattleStatMask2_Tilemap, FALSE); + AnimLoadCompressedBgTilemapHandleContest(&animBgData, gStatAnim_Decrease_Tilemap, FALSE); - AnimLoadCompressedBgGfx(animBgData.bgId, gBattleStatMask_Gfx, animBgData.tilesOffset); - switch (sAnimStatsChangeData->data[1]) + AnimLoadCompressedBgGfx(animBgData.bgId, gStatAnim_Gfx, animBgData.tilesOffset); + switch (sAnimStatsChangeData->aAnimStatId) { - case 0: - LoadCompressedPalette(gBattleStatMask2_Pal, BG_PLTT_ID(animBgData.paletteId), PLTT_SIZE_4BPP); + case STAT_ANIM_PAL_ATK: + LoadCompressedPalette(gStatAnim_Attack_Pal, BG_PLTT_ID(animBgData.paletteId), PLTT_SIZE_4BPP); break; - case 1: - LoadCompressedPalette(gBattleStatMask1_Pal, BG_PLTT_ID(animBgData.paletteId), PLTT_SIZE_4BPP); + case STAT_ANIM_PAL_DEF: + LoadCompressedPalette(gStatAnim_Defense_Pal, BG_PLTT_ID(animBgData.paletteId), PLTT_SIZE_4BPP); break; - case 2: - LoadCompressedPalette(gBattleStatMask3_Pal, BG_PLTT_ID(animBgData.paletteId), PLTT_SIZE_4BPP); + case STAT_ANIM_PAL_ACC: + LoadCompressedPalette(gStatAnim_Accuracy_Pal, BG_PLTT_ID(animBgData.paletteId), PLTT_SIZE_4BPP); break; - case 3: - LoadCompressedPalette(gBattleStatMask4_Pal, BG_PLTT_ID(animBgData.paletteId), PLTT_SIZE_4BPP); + case STAT_ANIM_PAL_SPEED: + LoadCompressedPalette(gStatAnim_Speed_Pal, BG_PLTT_ID(animBgData.paletteId), PLTT_SIZE_4BPP); break; - case 4: - LoadCompressedPalette(gBattleStatMask6_Pal, BG_PLTT_ID(animBgData.paletteId), PLTT_SIZE_4BPP); + case STAT_ANIM_PAL_EVASION: + LoadCompressedPalette(gStatAnim_Evasion_Pal, BG_PLTT_ID(animBgData.paletteId), PLTT_SIZE_4BPP); break; - case 5: - LoadCompressedPalette(gBattleStatMask7_Pal, BG_PLTT_ID(animBgData.paletteId), PLTT_SIZE_4BPP); + case STAT_ANIM_PAL_SPATK: + LoadCompressedPalette(gStatAnim_SpAttack_Pal, BG_PLTT_ID(animBgData.paletteId), PLTT_SIZE_4BPP); break; - case 6: - LoadCompressedPalette(gBattleStatMask8_Pal, BG_PLTT_ID(animBgData.paletteId), PLTT_SIZE_4BPP); + case STAT_ANIM_PAL_SPDEF: + LoadCompressedPalette(gStatAnim_SpDefense_Pal, BG_PLTT_ID(animBgData.paletteId), PLTT_SIZE_4BPP); break; default: - LoadCompressedPalette(gBattleStatMask5_Pal, BG_PLTT_ID(animBgData.paletteId), PLTT_SIZE_4BPP); + // case STAT_ANIM_PAL_MULTIPLE: + LoadCompressedPalette(gStatAnim_Multiple_Pal, BG_PLTT_ID(animBgData.paletteId), PLTT_SIZE_4BPP); break; } gBattle_BG1_X = 0; gBattle_BG1_Y = 0; - if (sAnimStatsChangeData->data[0] == 1) + if (sAnimStatsChangeData->aDecrease == TRUE) { gBattle_BG1_X = 64; - gTasks[taskId].data[1] = -3; + gTasks[taskId].tVelocity = -3; } else { - gTasks[taskId].data[1] = 3; + gTasks[taskId].tVelocity = 3; } - if (sAnimStatsChangeData->data[4] == 0) + if (!sAnimStatsChangeData->aSharply) { - gTasks[taskId].data[4] = 10; - gTasks[taskId].data[5] = 20; + gTasks[taskId].tTargetBlend = 10; + gTasks[taskId].tWaitTime = 20; } else { - gTasks[taskId].data[4] = 13; - gTasks[taskId].data[5] = 30; + gTasks[taskId].tTargetBlend = 13; + gTasks[taskId].tWaitTime = 30; } - gTasks[taskId].data[0] = spriteId; - gTasks[taskId].data[2] = sAnimStatsChangeData->data[3]; - gTasks[taskId].data[3] = spriteId2; - gTasks[taskId].data[6] = sAnimStatsChangeData->higherPriority; - gTasks[taskId].data[7] = gBattlerSpriteIds[sAnimStatsChangeData->battler2]; + gTasks[taskId].tAnimSpriteId1 = spriteId; + gTasks[taskId].tMultipleBattlers = sAnimStatsChangeData->aMultipleBattlers; + gTasks[taskId].tAnimSpriteId2 = spriteId2; + gTasks[taskId].tHidBattler2 = sAnimStatsChangeData->hidBattler2; + gTasks[taskId].tBattler2SpriteId = gBattlerSpriteIds[sAnimStatsChangeData->battler2]; gTasks[taskId].func = StatsChangeAnimation_Step3; - if (sAnimStatsChangeData->data[0] == 0) + if (!sAnimStatsChangeData->aDecrease) PlaySE12WithPanning(SE_M_STAT_INCREASE, BattleAnimAdjustPanning2(SOUND_PAN_ATTACKER)); else PlaySE12WithPanning(SE_M_STAT_DECREASE, BattleAnimAdjustPanning2(SOUND_PAN_ATTACKER)); @@ -542,44 +563,46 @@ static void StatsChangeAnimation_Step2(u8 taskId) static void StatsChangeAnimation_Step3(u8 taskId) { - gBattle_BG1_Y += gTasks[taskId].data[1]; + gBattle_BG1_Y += gTasks[taskId].tVelocity; - switch (gTasks[taskId].data[15]) + switch (gTasks[taskId].tState) { case 0: - if (gTasks[taskId].data[11]++ > 0) + // Fade in + if (gTasks[taskId].tFadeTimer++ > 0) { - gTasks[taskId].data[11] = 0; - gTasks[taskId].data[12]++; - SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(gTasks[taskId].data[12], 16 - gTasks[taskId].data[12])); - if (gTasks[taskId].data[12] == gTasks[taskId].data[4]) - gTasks[taskId].data[15]++; + gTasks[taskId].tFadeTimer = 0; + gTasks[taskId].tBlend++; + SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(gTasks[taskId].tBlend, 16 - gTasks[taskId].tBlend)); + if (gTasks[taskId].tBlend == gTasks[taskId].tTargetBlend) + gTasks[taskId].tState++; } break; case 1: - if (++gTasks[taskId].data[10] == gTasks[taskId].data[5]) - gTasks[taskId].data[15]++; + // Wait + if (++gTasks[taskId].tWaitTimer == gTasks[taskId].tWaitTime) + gTasks[taskId].tState++; break; case 2: - if (gTasks[taskId].data[11]++ > 0) + // Fade out + if (gTasks[taskId].tFadeTimer++ > 0) { - gTasks[taskId].data[11] = 0; - gTasks[taskId].data[12]--; - SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(gTasks[taskId].data[12], 16 - gTasks[taskId].data[12])); - if (gTasks[taskId].data[12] == 0) + gTasks[taskId].tFadeTimer = 0; + gTasks[taskId].tBlend--; + SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(gTasks[taskId].tBlend, 16 - gTasks[taskId].tBlend)); + if (gTasks[taskId].tBlend == 0) { ResetBattleAnimBg(FALSE); - gTasks[taskId].data[15]++; + gTasks[taskId].tState++; } } break; case 3: + // Reset gBattle_WIN0H = 0; gBattle_WIN0V = 0; - SetGpuReg(REG_OFFSET_WININ, WININ_WIN0_BG_ALL | WININ_WIN0_OBJ | WININ_WIN0_CLR - | WININ_WIN1_BG_ALL | WININ_WIN1_OBJ | WININ_WIN1_CLR); - SetGpuReg(REG_OFFSET_WINOUT, WINOUT_WIN01_BG_ALL | WINOUT_WIN01_OBJ | WINOUT_WIN01_CLR - | WINOUT_WINOBJ_BG_ALL | WINOUT_WINOBJ_OBJ | WINOUT_WINOBJ_CLR); + SetGpuReg(REG_OFFSET_WININ, WININ_WIN0_ALL | WININ_WIN1_ALL); + SetGpuReg(REG_OFFSET_WINOUT, WINOUT_WIN01_ALL | WINOUT_WINOBJ_ALL); if (!IsContest()) SetAnimBgAttribute(1, BG_ANIM_CHAR_BASE_BLOCK, 0); @@ -587,12 +610,14 @@ static void StatsChangeAnimation_Step3(u8 taskId) SetGpuReg(REG_OFFSET_DISPCNT, GetGpuReg(REG_OFFSET_DISPCNT) ^ DISPCNT_OBJWIN_ON); SetGpuReg(REG_OFFSET_BLDCNT, 0); SetGpuReg(REG_OFFSET_BLDALPHA, 0); - DestroySprite(&gSprites[gTasks[taskId].data[0]]); - if (gTasks[taskId].data[2]) - DestroySprite(&gSprites[gTasks[taskId].data[3]]); - if (gTasks[taskId].data[6] == 1) - gSprites[gTasks[taskId].data[7]].oam.priority++; + DestroySprite(&gSprites[gTasks[taskId].tAnimSpriteId1]); + if (gTasks[taskId].tMultipleBattlers) + DestroySprite(&gSprites[gTasks[taskId].tAnimSpriteId2]); + + // Restore battler 2's priority + if (gTasks[taskId].tHidBattler2 == TRUE) + gSprites[gTasks[taskId].tBattler2SpriteId].oam.priority++; FREE_AND_SET_NULL(sAnimStatsChangeData); DestroyAnimVisualTask(taskId); @@ -600,6 +625,24 @@ static void StatsChangeAnimation_Step3(u8 taskId) } } +#undef aDecrease +#undef aAnimStatId +#undef aIsTarget +#undef aMultipleBattlers +#undef aSharply +#undef tAnimSpriteId1 +#undef tVelocity +#undef tMultipleBattlers +#undef tAnimSpriteId2 +#undef tTargetBlend +#undef tWaitTime +#undef tHidBattler2 +#undef tBattler2SpriteId +#undef tWaitTimer +#undef tFadeTimer +#undef tBlend +#undef tState + void AnimTask_Flash(u8 taskId) { u32 selectedPalettes = GetBattleMonSpritePalettesMask(1, 1, 1, 1); @@ -663,7 +706,7 @@ static void SetPalettesToColor(u32 selectedPalettes, u16 color) { if (selectedPalettes & 1) { - u16 curOffset = i * 16; + u16 curOffset = PLTT_ID(i); u16 paletteOffset = curOffset; while (curOffset < paletteOffset + 16) { @@ -932,7 +975,7 @@ void AnimTask_CopyPalUnfadedToBackup(u8 taskId) paletteIndex = gBattleAnimTarget + 16; } - memcpy(&gMonSpritesGfxPtr->buffer[gBattleAnimArgs[1] * 16], &gPlttBufferUnfaded[paletteIndex * 16], 32); + memcpy(&gMonSpritesGfxPtr->buffer[gBattleAnimArgs[1] * 16], &gPlttBufferUnfaded[PLTT_ID(paletteIndex)], PLTT_SIZE_4BPP); DestroyAnimVisualTask(taskId); } @@ -959,7 +1002,7 @@ void AnimTask_CopyPalUnfadedFromBackup(u8 taskId) paletteIndex = gBattleAnimTarget + 16; } - memcpy(&gPlttBufferUnfaded[paletteIndex * 16], &gMonSpritesGfxPtr->buffer[gBattleAnimArgs[1] * 16], 32); + memcpy(&gPlttBufferUnfaded[PLTT_ID(paletteIndex)], &gMonSpritesGfxPtr->buffer[gBattleAnimArgs[1] * 16], PLTT_SIZE_4BPP); DestroyAnimVisualTask(taskId); } @@ -986,7 +1029,7 @@ void AnimTask_CopyPalFadedToUnfaded(u8 taskId) paletteIndex = gBattleAnimTarget + 16; } - memcpy(&gPlttBufferUnfaded[paletteIndex * 16], &gPlttBufferFaded[paletteIndex * 16], 32); + memcpy(&gPlttBufferUnfaded[PLTT_ID(paletteIndex)], &gPlttBufferFaded[PLTT_ID(paletteIndex)], PLTT_SIZE_4BPP); DestroyAnimVisualTask(taskId); } diff --git a/src/battle_anim_water.c b/src/battle_anim_water.c index 117dd3b88c..dc793f70a5 100644 --- a/src/battle_anim_water.c +++ b/src/battle_anim_water.c @@ -619,7 +619,7 @@ static void AnimAuroraBeamRings_Step(struct Sprite *sprite) void AnimTask_RotateAuroraRingColors(u8 taskId) { gTasks[taskId].data[0] = gBattleAnimArgs[0]; - gTasks[taskId].data[2] = IndexOfSpritePaletteTag(ANIM_TAG_RAINBOW_RINGS) * 16 + 256; + gTasks[taskId].data[2] = OBJ_PLTT_ID(IndexOfSpritePaletteTag(ANIM_TAG_RAINBOW_RINGS)); gTasks[taskId].func = AnimTask_RotateAuroraRingColors_Step; } @@ -887,12 +887,12 @@ static void AnimTask_CreateSurfWave_Step1(u8 taskId) gTasks[taskId].data[2] += gTasks[taskId].data[1]; if (++gTasks[taskId].data[5] == 4) { - rgbBuffer = gPlttBufferFaded[animBg.paletteId * 16 + 7]; + rgbBuffer = gPlttBufferFaded[BG_PLTT_ID(animBg.paletteId) + 7]; for (i = 6; i != 0; i--) { - gPlttBufferFaded[animBg.paletteId * 16 + 1 + i] = gPlttBufferFaded[animBg.paletteId * 16 + 1 + i - 1]; // 1 + i - 1 is needed to match for some bizarre reason + gPlttBufferFaded[BG_PLTT_ID(animBg.paletteId) + 1 + i] = gPlttBufferFaded[BG_PLTT_ID(animBg.paletteId) + 1 + i - 1]; // 1 + i - 1 is needed to match for some bizarre reason } - gPlttBufferFaded[animBg.paletteId * 16 + 1] = rgbBuffer; + gPlttBufferFaded[BG_PLTT_ID(animBg.paletteId) + 1] = rgbBuffer; gTasks[taskId].data[5] = 0; } if (++gTasks[taskId].data[6] > 1) diff --git a/src/battle_arena.c b/src/battle_arena.c index ed0fa2550a..98ec43fc1d 100644 --- a/src/battle_arena.c +++ b/src/battle_arena.c @@ -737,7 +737,7 @@ static void SetArenaData(void) static void SaveArenaChallenge(void) { gSaveBlock2Ptr->frontier.challengeStatus = gSpecialVar_0x8005; - VarSet(VAR_TEMP_0, 0); + VarSet(VAR_TEMP_CHALLENGE_STATUS, 0); gSaveBlock2Ptr->frontier.challengePaused = TRUE; SaveGameFrontier(); } diff --git a/src/battle_bg.c b/src/battle_bg.c index b7c2b1494c..b3091d965e 100644 --- a/src/battle_bg.c +++ b/src/battle_bg.c @@ -21,6 +21,7 @@ #include "trig.h" #include "window.h" #include "constants/map_types.h" +#include "constants/rgb.h" #include "constants/songs.h" #include "constants/trainers.h" @@ -1071,7 +1072,7 @@ void InitLinkBattleVsScreen(u8 taskId) break; case 1: palId = AllocSpritePalette(TAG_VS_LETTERS); - gPlttBufferUnfaded[palId * 16 + 0x10F] = gPlttBufferFaded[palId * 16 + 0x10F] = 0x7FFF; + gPlttBufferUnfaded[OBJ_PLTT_ID(palId) + 15] = gPlttBufferFaded[OBJ_PLTT_ID(palId) + 15] = RGB_WHITE; gBattleStruct->linkBattleVsSpriteId_V = CreateSprite(&sVsLetter_V_SpriteTemplate, 111, 80, 0); gBattleStruct->linkBattleVsSpriteId_S = CreateSprite(&sVsLetter_S_SpriteTemplate, 129, 80, 0); gSprites[gBattleStruct->linkBattleVsSpriteId_V].invisible = TRUE; diff --git a/src/battle_controller_link_opponent.c b/src/battle_controller_link_opponent.c index 0f1ce1b17f..2104298775 100644 --- a/src/battle_controller_link_opponent.c +++ b/src/battle_controller_link_opponent.c @@ -556,7 +556,7 @@ static u32 CopyLinkOpponentMonData(u8 monId, u8 *dst) { struct BattlePokemon battleMon; struct MovePpInfo moveData; - u8 nickname[20]; + u8 nickname[POKEMON_NAME_BUFFER_SIZE]; u8 *src; s16 data16; u32 data32; diff --git a/src/battle_controller_link_partner.c b/src/battle_controller_link_partner.c index 3b2e014253..054563ad3a 100644 --- a/src/battle_controller_link_partner.c +++ b/src/battle_controller_link_partner.c @@ -450,7 +450,7 @@ static u32 CopyLinkPartnerMonData(u8 monId, u8 *dst) { struct BattlePokemon battleMon; struct MovePpInfo moveData; - u8 nickname[20]; + u8 nickname[POKEMON_NAME_BUFFER_SIZE]; u8 *src; s16 data16; u32 data32; diff --git a/src/battle_controller_opponent.c b/src/battle_controller_opponent.c index 8246a6f80f..e434e3ee62 100644 --- a/src/battle_controller_opponent.c +++ b/src/battle_controller_opponent.c @@ -561,7 +561,7 @@ static u32 GetOpponentMonData(u8 monId, u8 *dst) { struct BattlePokemon battleMon; struct MovePpInfo moveData; - u8 nickname[20]; + u8 nickname[POKEMON_NAME_BUFFER_SIZE]; u8 *src; s16 data16; u32 data32; @@ -1555,7 +1555,7 @@ static void OpponentHandleChooseMove(void) if (gBattleTypeFlags & (BATTLE_TYPE_TRAINER | BATTLE_TYPE_FIRST_BATTLE | BATTLE_TYPE_SAFARI | BATTLE_TYPE_ROAMER)) { - BattleAI_SetupAIData(0xF); + BattleAI_SetupAIData(ALL_MOVES_MASK); chosenMoveId = BattleAI_ChooseMoveOrAction(); switch (chosenMoveId) @@ -1588,7 +1588,7 @@ static void OpponentHandleChooseMove(void) u16 move; do { - chosenMoveId = Random() & 3; + chosenMoveId = MOD(Random(), MAX_MON_MOVES); move = moveInfo->moves[chosenMoveId]; } while (move == MOVE_NONE); diff --git a/src/battle_controller_player.c b/src/battle_controller_player.c index 39d015da4f..dbd121d7db 100644 --- a/src/battle_controller_player.c +++ b/src/battle_controller_player.c @@ -1609,7 +1609,7 @@ static u32 CopyPlayerMonData(u8 monId, u8 *dst) { struct BattlePokemon battleMon; struct MovePpInfo moveData; - u8 nickname[20]; + u8 nickname[POKEMON_NAME_BUFFER_SIZE]; u8 *src; s16 data16; u32 data32; diff --git a/src/battle_controller_player_partner.c b/src/battle_controller_player_partner.c index 5b08a2c529..236a66ce83 100644 --- a/src/battle_controller_player_partner.c +++ b/src/battle_controller_player_partner.c @@ -634,7 +634,7 @@ static u32 CopyPlayerPartnerMonData(u8 monId, u8 *dst) { struct BattlePokemon battleMon; struct MovePpInfo moveData; - u8 nickname[20]; + u8 nickname[POKEMON_NAME_BUFFER_SIZE]; u8 *src; s16 data16; u32 data32; @@ -1515,7 +1515,7 @@ static void PlayerPartnerHandleChooseMove(void) u8 chosenMoveId; struct ChooseMoveStruct *moveInfo = (struct ChooseMoveStruct *)(&gBattleBufferA[gActiveBattler][4]); - BattleAI_SetupAIData(0xF); + BattleAI_SetupAIData(ALL_MOVES_MASK); chosenMoveId = BattleAI_ChooseMoveOrAction(); if (gBattleMoves[moveInfo->moves[chosenMoveId]].target & (MOVE_TARGET_USER | MOVE_TARGET_USER_OR_SELECTED)) diff --git a/src/battle_controller_recorded_opponent.c b/src/battle_controller_recorded_opponent.c index 872a61c0e7..b2db595f8a 100644 --- a/src/battle_controller_recorded_opponent.c +++ b/src/battle_controller_recorded_opponent.c @@ -542,7 +542,7 @@ static u32 CopyRecordedOpponentMonData(u8 monId, u8 *dst) { struct BattlePokemon battleMon; struct MovePpInfo moveData; - u8 nickname[20]; + u8 nickname[POKEMON_NAME_BUFFER_SIZE]; u8 *src; s16 data16; u32 data32; diff --git a/src/battle_controller_recorded_player.c b/src/battle_controller_recorded_player.c index d23aaa8b04..591ddb67e3 100644 --- a/src/battle_controller_recorded_player.c +++ b/src/battle_controller_recorded_player.c @@ -525,7 +525,7 @@ static u32 CopyRecordedPlayerMonData(u8 monId, u8 *dst) { struct BattlePokemon battleMon; struct MovePpInfo moveData; - u8 nickname[20]; + u8 nickname[POKEMON_NAME_BUFFER_SIZE]; u8 *src; s16 data16; u32 data32; diff --git a/src/battle_controller_wally.c b/src/battle_controller_wally.c index ca81677f20..5b94f2dd26 100644 --- a/src/battle_controller_wally.c +++ b/src/battle_controller_wally.c @@ -452,7 +452,7 @@ static u32 CopyWallyMonData(u8 monId, u8 *dst) { struct BattlePokemon battleMon; struct MovePpInfo moveData; - u8 nickname[20]; + u8 nickname[POKEMON_NAME_BUFFER_SIZE]; u8 *src; s16 data16; u32 data32; diff --git a/src/battle_dome.c b/src/battle_dome.c index 32a43c3d94..6ecb254baa 100644 --- a/src/battle_dome.c +++ b/src/battle_dome.c @@ -40,6 +40,8 @@ #include "constants/battle_frontier.h" #include "constants/rgb.h" +#define TAG_BUTTONS 0 + // Enough space to hold 2 match info cards worth of trainers and their parties #define NUM_INFOCARD_SPRITES ((FRONTIER_PARTY_SIZE + 1) * 4) #define NUM_INFOCARD_TRAINERS 2 @@ -56,7 +58,7 @@ struct TourneyTreeLineSection { u8 x; u8 y; - u16 src; + u16 tile; }; #define DOME_TRAINERS gSaveBlock2Ptr->frontier.domeTrainers @@ -904,14 +906,14 @@ static const struct ScanlineEffectParams sTourneyTreeScanlineEffectParams = static const struct CompressedSpriteSheet sTourneyTreeButtonsSpriteSheet[] = { - {gDomeTourneyTreeButtons_Gfx, 0x0600, 0x0000}, + {.data = gDomeTourneyTreeButtons_Gfx, .size = 0x0600, .tag = TAG_BUTTONS}, {}, }; // Unused static const struct CompressedSpritePalette sTourneyTreeButtonsSpritePal[] = { - {gDomeTourneyTreeButtons_Pal, 0x0000}, + {.data = gDomeTourneyTreeButtons_Pal, .tag = TAG_BUTTONS}, {}, }; @@ -1004,7 +1006,7 @@ static const union AnimCmd * const sSpriteAnimTable_TourneyTreePokeball[] = // Sprite template for the pokeballs on the tourney tree that act as buttons to view a trainer/match info card static const struct SpriteTemplate sTourneyTreePokeballSpriteTemplate = { - .tileTag = 0x0000, + .tileTag = TAG_BUTTONS, .paletteTag = TAG_NONE, .oam = &sOamData_TourneyTreePokeball, .anims = sSpriteAnimTable_TourneyTreePokeball, @@ -1033,7 +1035,7 @@ static const union AnimCmd * const sSpriteAnimTable_TourneyTreeCancelButton[] = static const struct SpriteTemplate sCancelButtonSpriteTemplate = { - .tileTag = 0x0000, + .tileTag = TAG_BUTTONS, .paletteTag = TAG_NONE, .oam = &sOamData_TourneyTreeCloseButton, .anims = sSpriteAnimTable_TourneyTreeCancelButton, @@ -1062,7 +1064,7 @@ static const union AnimCmd * const sSpriteAnimTable_TourneyTreeExitButton[] = static const struct SpriteTemplate sExitButtonSpriteTemplate = { - .tileTag = 0x0000, + .tileTag = TAG_BUTTONS, .paletteTag = TAG_NONE, .oam = &sOamData_TourneyTreeCloseButton, .anims = sSpriteAnimTable_TourneyTreeExitButton, @@ -1109,7 +1111,7 @@ static const union AnimCmd * const sSpriteAnimTable_HorizontalScrollArrow[] = static const struct SpriteTemplate sHorizontalScrollArrowSpriteTemplate = { - .tileTag = 0x0000, + .tileTag = TAG_BUTTONS, .paletteTag = TAG_NONE, .oam = &sOamData_HorizontalScrollArrow, .anims = sSpriteAnimTable_HorizontalScrollArrow, @@ -1120,7 +1122,7 @@ static const struct SpriteTemplate sHorizontalScrollArrowSpriteTemplate = static const struct SpriteTemplate sVerticalScrollArrowSpriteTemplate = { - .tileTag = 0x0000, + .tileTag = TAG_BUTTONS, .paletteTag = TAG_NONE, .oam = &sOamData_VerticalScrollArrow, .anims = sSpriteAnimTable_VerticalScrollArrow, @@ -1482,589 +1484,617 @@ static const u8 sTourneyTreePokeballCoords[DOME_TOURNAMENT_TRAINERS_COUNT + DOME {120, 89}, // Final match }; +// Tile values from tourney_tree.png for the highlighted lines of the tourney tree. +// These tiles will be used to replace the existing, unhighlighted line tiles on the tourney tree tilemap. +#define LINE_PAL (6 << 12) +#define LINE_H (LINE_PAL | 0x21) // Horizontal +#define LINE_CORNER_R (LINE_PAL | 0x23) // Horizontal into a right-side vertical +#define LINE_CORNER_L (LINE_PAL | 0x25) // Horizontal into a left-side vertical +#define LINE_V_R (LINE_PAL | 0x27) // Right-side vertical +#define LINE_V_L (LINE_PAL | 0x29) // Left-side vertical +#define LINE_H_BOTTOM (LINE_PAL | 0x2B) // Horizontal on the bottom of the tree +#define LINE_H_LOGO1 (LINE_PAL | 0x2C) // Horizontal, logo behind +#define LINE_H_LOGO2 (LINE_PAL | 0x2D) // Horizontal, logo behind +#define LINE_H_LOGO3 (LINE_PAL | 0x2E) // Horizontal, logo behind +#define LINE_H_LOGO4 (LINE_PAL | 0x2F) // Horizontal, logo behind +#define LINE_V_R_LOGO1 (LINE_PAL | 0x30) // Right-side vertical, logo behind +#define LINE_V_R_LOGO2 (LINE_PAL | 0x31) // Right-side vertical, logo behind +#define LINE_V_R_LOGO3 (LINE_PAL | 0x32) // Right-side vertical, logo behind +#define LINE_V_R_LOGO4 (LINE_PAL | 0x33) // Right-side vertical, logo behind +#define LINE_V_L_LOGO1 (LINE_PAL | 0x35) // Left-side vertical, logo behind +#define LINE_V_L_LOGO2 (LINE_PAL | 0x36) // Left-side vertical, logo behind +#define LINE_V_L_LOGO3 (LINE_PAL | 0x37) // Left-side vertical, logo behind +#define LINE_V_L_LOGO4 (LINE_PAL | 0x38) // Left-side vertical, logo behind +#define LINE_V_R_HALF_LOGO (LINE_PAL | 0x3B) // Right-side vertical, half lit from the top, logo behind +#define LINE_V_L_HALF_LOGO (LINE_PAL | 0x3C) // Left-side vertical, half lit from the top, logo behind +#define LINE_CORNER_R_HALF (LINE_PAL | 0x43) // Lit horizontal, unlit right-side vertical +#define LINE_CORNER_L_HALF (LINE_PAL | 0x45) // Lit horizontal, unlit left-side vertical +#define LINE_V_R_HALF (LINE_PAL | 0x47) // Right-side vertical, half lit from the top +#define LINE_V_L_HALF (LINE_PAL | 0x49) // Left-side vertical, half lit from the top + // Each of these line sections define the position of the advancement line on the tourney tree for the victor of that round // The trainers here are numbered by tourney ID (rank/seed) and ordered according to where they start on the tourney tree -#define LINESECTION_ROUND1_TRAINER1(lastSrc) \ - {.src = 0x6021, .y = 0x04, .x = 0x09}, \ - {.src = 0x6023, .y = 0x04, .x = 0x0a}, \ - {.src = 0x6047, .y = 0x05, .x = 0x0a}, \ - {.src = lastSrc, .y = 0x05, .x = 0x0b}, +#define LINESECTION_ROUND1_TRAINER1(lastTile) \ + {.tile = LINE_H, .y = 4, .x = 9}, \ + {.tile = LINE_CORNER_R, .y = 4, .x = 10}, \ + {.tile = LINE_V_R_HALF, .y = 5, .x = 10}, \ + {.tile = lastTile, .y = 5, .x = 11}, -#define LINESECTION_ROUND1_TRAINER9(lastSrc) \ - {.src = 0x6021, .y = 0x06, .x = 0x09}, \ - {.src = 0x6021, .y = 0x06, .x = 0x0a}, \ - {.src = 0x6027, .y = 0x05, .x = 0x0a}, \ - {.src = lastSrc, .y = 0x05, .x = 0x0b}, +#define LINESECTION_ROUND1_TRAINER9(lastTile) \ + {.tile = LINE_H, .y = 6, .x = 9}, \ + {.tile = LINE_H, .y = 6, .x = 10}, \ + {.tile = LINE_V_R, .y = 5, .x = 10}, \ + {.tile = lastTile, .y = 5, .x = 11}, -#define LINESECTION_ROUND1_TRAINER13(lastSrc) \ - {.src = 0x6021, .y = 0x08, .x = 0x09}, \ - {.src = 0x6023, .y = 0x08, .x = 0x0a}, \ - {.src = 0x6047, .y = 0x09, .x = 0x0a}, \ - {.src = lastSrc, .y = 0x09, .x = 0x0b}, +#define LINESECTION_ROUND1_TRAINER13(lastTile) \ + {.tile = LINE_H, .y = 8, .x = 9}, \ + {.tile = LINE_CORNER_R, .y = 8, .x = 10}, \ + {.tile = LINE_V_R_HALF, .y = 9, .x = 10}, \ + {.tile = lastTile, .y = 9, .x = 11}, -#define LINESECTION_ROUND1_TRAINER5(lastSrc) \ - {.src = 0x6021, .y = 0x0a, .x = 0x09}, \ - {.src = 0x6021, .y = 0x0a, .x = 0x0a}, \ - {.src = 0x6027, .y = 0x09, .x = 0x0a}, \ - {.src = lastSrc, .y = 0x09, .x = 0x0b}, +#define LINESECTION_ROUND1_TRAINER5(lastTile) \ + {.tile = LINE_H, .y = 10, .x = 9}, \ + {.tile = LINE_H, .y = 10, .x = 10}, \ + {.tile = LINE_V_R, .y = 9, .x = 10}, \ + {.tile = lastTile, .y = 9, .x = 11}, -#define LINESECTION_ROUND1_TRAINER8(lastSrc) \ - {.src = 0x6021, .y = 0x0c, .x = 0x09}, \ - {.src = 0x6023, .y = 0x0c, .x = 0x0a}, \ - {.src = 0x6047, .y = 0x0d, .x = 0x0a}, \ - {.src = lastSrc, .y = 0x0d, .x = 0x0b}, +#define LINESECTION_ROUND1_TRAINER8(lastTile) \ + {.tile = LINE_H, .y = 12, .x = 9}, \ + {.tile = LINE_CORNER_R, .y = 12, .x = 10}, \ + {.tile = LINE_V_R_HALF, .y = 13, .x = 10}, \ + {.tile = lastTile, .y = 13, .x = 11}, -#define LINESECTION_ROUND1_TRAINER16(lastSrc) \ - {.src = 0x6021, .y = 0x0e, .x = 0x09}, \ - {.src = 0x6021, .y = 0x0e, .x = 0x0a}, \ - {.src = 0x6027, .y = 0x0d, .x = 0x0a}, \ - {.src = lastSrc, .y = 0x0d, .x = 0x0b}, +#define LINESECTION_ROUND1_TRAINER16(lastTile) \ + {.tile = LINE_H, .y = 14, .x = 9}, \ + {.tile = LINE_H, .y = 14, .x = 10}, \ + {.tile = LINE_V_R, .y = 13, .x = 10}, \ + {.tile = lastTile, .y = 13, .x = 11}, -#define LINESECTION_ROUND1_TRAINER12(lastSrc) \ - {.src = 0x6021, .y = 0x10, .x = 0x09}, \ - {.src = 0x6023, .y = 0x10, .x = 0x0a}, \ - {.src = 0x6047, .y = 0x11, .x = 0x0a}, \ - {.src = lastSrc, .y = 0x11, .x = 0x0b}, +#define LINESECTION_ROUND1_TRAINER12(lastTile) \ + {.tile = LINE_H, .y = 16, .x = 9}, \ + {.tile = LINE_CORNER_R, .y = 16, .x = 10}, \ + {.tile = LINE_V_R_HALF, .y = 17, .x = 10}, \ + {.tile = lastTile, .y = 17, .x = 11}, -#define LINESECTION_ROUND1_TRAINER4(lastSrc) \ - {.src = 0x602b, .y = 0x12, .x = 0x09}, \ - {.src = 0x602b, .y = 0x12, .x = 0x0a}, \ - {.src = 0x6027, .y = 0x11, .x = 0x0a}, \ - {.src = lastSrc, .y = 0x11, .x = 0x0b}, +#define LINESECTION_ROUND1_TRAINER4(lastTile) \ + {.tile = LINE_H_BOTTOM, .y = 18, .x = 9}, \ + {.tile = LINE_H_BOTTOM, .y = 18, .x = 10}, \ + {.tile = LINE_V_R, .y = 17, .x = 10}, \ + {.tile = lastTile, .y = 17, .x = 11}, -#define LINESECTION_ROUND1_TRAINER3(lastSrc) \ - {.src = 0x6021, .y = 0x04, .x = 0x14}, \ - {.src = 0x6025, .y = 0x04, .x = 0x13}, \ - {.src = 0x6049, .y = 0x05, .x = 0x13}, \ - {.src = lastSrc, .y = 0x05, .x = 0x12}, +#define LINESECTION_ROUND1_TRAINER3(lastTile) \ + {.tile = LINE_H, .y = 4, .x = 20}, \ + {.tile = LINE_CORNER_L, .y = 4, .x = 19}, \ + {.tile = LINE_V_L_HALF, .y = 5, .x = 19}, \ + {.tile = lastTile, .y = 5, .x = 18}, -#define LINESECTION_ROUND1_TRAINER11(lastSrc) \ - {.src = 0x6021, .y = 0x06, .x = 0x14}, \ - {.src = 0x6021, .y = 0x06, .x = 0x13}, \ - {.src = 0x6029, .y = 0x05, .x = 0x13}, \ - {.src = lastSrc, .y = 0x05, .x = 0x12}, +#define LINESECTION_ROUND1_TRAINER11(lastTile) \ + {.tile = LINE_H, .y = 6, .x = 20}, \ + {.tile = LINE_H, .y = 6, .x = 19}, \ + {.tile = LINE_V_L, .y = 5, .x = 19}, \ + {.tile = lastTile, .y = 5, .x = 18}, -#define LINESECTION_ROUND1_TRAINER15(lastSrc) \ - {.src = 0x6021, .y = 0x08, .x = 0x14}, \ - {.src = 0x6025, .y = 0x08, .x = 0x13}, \ - {.src = 0x6049, .y = 0x09, .x = 0x13}, \ - {.src = lastSrc, .y = 0x09, .x = 0x12}, +#define LINESECTION_ROUND1_TRAINER15(lastTile) \ + {.tile = LINE_H, .y = 8, .x = 20}, \ + {.tile = LINE_CORNER_L, .y = 8, .x = 19}, \ + {.tile = LINE_V_L_HALF, .y = 9, .x = 19}, \ + {.tile = lastTile, .y = 9, .x = 18}, -#define LINESECTION_ROUND1_TRAINER7(lastSrc) \ - {.src = 0x6021, .y = 0x0a, .x = 0x14}, \ - {.src = 0x6021, .y = 0x0a, .x = 0x13}, \ - {.src = 0x6029, .y = 0x09, .x = 0x13}, \ - {.src = lastSrc, .y = 0x09, .x = 0x12}, +#define LINESECTION_ROUND1_TRAINER7(lastTile) \ + {.tile = LINE_H, .y = 10, .x = 20}, \ + {.tile = LINE_H, .y = 10, .x = 19}, \ + {.tile = LINE_V_L, .y = 9, .x = 19}, \ + {.tile = lastTile, .y = 9, .x = 18}, -#define LINESECTION_ROUND1_TRAINER6(lastSrc) \ - {.src = 0x6021, .y = 0x0c, .x = 0x14}, \ - {.src = 0x6025, .y = 0x0c, .x = 0x13}, \ - {.src = 0x6049, .y = 0x0d, .x = 0x13}, \ - {.src = lastSrc, .y = 0x0d, .x = 0x12}, +#define LINESECTION_ROUND1_TRAINER6(lastTile) \ + {.tile = LINE_H, .y = 12, .x = 20}, \ + {.tile = LINE_CORNER_L, .y = 12, .x = 19}, \ + {.tile = LINE_V_L_HALF, .y = 13, .x = 19}, \ + {.tile = lastTile, .y = 13, .x = 18}, -#define LINESECTION_ROUND1_TRAINER14(lastSrc) \ - {.src = 0x6021, .y = 0x0e, .x = 0x14}, \ - {.src = 0x6021, .y = 0x0e, .x = 0x13}, \ - {.src = 0x6029, .y = 0x0d, .x = 0x13}, \ - {.src = lastSrc, .y = 0x0d, .x = 0x12}, +#define LINESECTION_ROUND1_TRAINER14(lastTile) \ + {.tile = LINE_H, .y = 14, .x = 20}, \ + {.tile = LINE_H, .y = 14, .x = 19}, \ + {.tile = LINE_V_L, .y = 13, .x = 19}, \ + {.tile = lastTile, .y = 13, .x = 18}, -#define LINESECTION_ROUND1_TRAINER10(lastSrc) \ - {.src = 0x6021, .y = 0x10, .x = 0x14}, \ - {.src = 0x6025, .y = 0x10, .x = 0x13}, \ - {.src = 0x6049, .y = 0x11, .x = 0x13}, \ - {.src = lastSrc, .y = 0x11, .x = 0x12}, +#define LINESECTION_ROUND1_TRAINER10(lastTile) \ + {.tile = LINE_H, .y = 16, .x = 20}, \ + {.tile = LINE_CORNER_L, .y = 16, .x = 19}, \ + {.tile = LINE_V_L_HALF, .y = 17, .x = 19}, \ + {.tile = lastTile, .y = 17, .x = 18}, -#define LINESECTION_ROUND1_TRAINER2(lastSrc) \ - {.src = 0x602b, .y = 0x12, .x = 0x14}, \ - {.src = 0x602b, .y = 0x12, .x = 0x13}, \ - {.src = 0x6029, .y = 0x11, .x = 0x13}, \ - {.src = lastSrc, .y = 0x11, .x = 0x12}, +#define LINESECTION_ROUND1_TRAINER2(lastTile) \ + {.tile = LINE_H_BOTTOM, .y = 18, .x = 20}, \ + {.tile = LINE_H_BOTTOM, .y = 18, .x = 19}, \ + {.tile = LINE_V_L, .y = 17, .x = 19}, \ + {.tile = lastTile, .y = 17, .x = 18}, -#define LINESECTION_ROUND2_MATCH1(lastSrc) \ - {.src = 0x6027, .y = 0x06, .x = 0x0b}, \ - {.src = 0x6047, .y = 0x07, .x = 0x0b}, \ - {.src = lastSrc, .y = 0x07, .x = 0x0c}, +#define LINESECTION_ROUND2_MATCH1(lastTile) \ + {.tile = LINE_V_R, .y = 6, .x = 11}, \ + {.tile = LINE_V_R_HALF, .y = 7, .x = 11}, \ + {.tile = lastTile, .y = 7, .x = 12}, -#define LINESECTION_ROUND2_MATCH2(lastSrc) \ - {.src = 0x6027, .y = 0x08, .x = 0x0b}, \ - {.src = 0x6027, .y = 0x07, .x = 0x0b}, \ - {.src = lastSrc, .y = 0x07, .x = 0x0c}, +#define LINESECTION_ROUND2_MATCH2(lastTile) \ + {.tile = LINE_V_R, .y = 8, .x = 11}, \ + {.tile = LINE_V_R, .y = 7, .x = 11}, \ + {.tile = lastTile, .y = 7, .x = 12}, -#define LINESECTION_ROUND2_MATCH3(lastSrc) \ - {.src = 0x6027, .y = 0x0e, .x = 0x0b}, \ - {.src = 0x6047, .y = 0x0f, .x = 0x0b}, \ - {.src = lastSrc, .y = 0x0f, .x = 0x0c}, +#define LINESECTION_ROUND2_MATCH3(lastTile) \ + {.tile = LINE_V_R, .y = 14, .x = 11}, \ + {.tile = LINE_V_R_HALF, .y = 15, .x = 11}, \ + {.tile = lastTile, .y = 15, .x = 12}, -#define LINESECTION_ROUND2_MATCH4(lastSrc) \ - {.src = 0x6027, .y = 0x10, .x = 0x0b}, \ - {.src = 0x6027, .y = 0x0f, .x = 0x0b}, \ - {.src = lastSrc, .y = 0x0f, .x = 0x0c}, +#define LINESECTION_ROUND2_MATCH4(lastTile) \ + {.tile = LINE_V_R, .y = 16, .x = 11}, \ + {.tile = LINE_V_R, .y = 15, .x = 11}, \ + {.tile = lastTile, .y = 15, .x = 12}, -#define LINESECTION_ROUND2_MATCH5(lastSrc) \ - {.src = 0x6029, .y = 0x06, .x = 0x12}, \ - {.src = 0x6049, .y = 0x07, .x = 0x12}, \ - {.src = lastSrc, .y = 0x07, .x = 0x11}, +#define LINESECTION_ROUND2_MATCH5(lastTile) \ + {.tile = LINE_V_L, .y = 6, .x = 18}, \ + {.tile = LINE_V_L_HALF, .y = 7, .x = 18}, \ + {.tile = lastTile, .y = 7, .x = 17}, -#define LINESECTION_ROUND2_MATCH6(lastSrc) \ - {.src = 0x6029, .y = 0x08, .x = 0x12}, \ - {.src = 0x6029, .y = 0x07, .x = 0x12}, \ - {.src = lastSrc, .y = 0x07, .x = 0x11}, +#define LINESECTION_ROUND2_MATCH6(lastTile) \ + {.tile = LINE_V_L, .y = 8, .x = 18}, \ + {.tile = LINE_V_L, .y = 7, .x = 18}, \ + {.tile = lastTile, .y = 7, .x = 17}, -#define LINESECTION_ROUND2_MATCH7(lastSrc) \ - {.src = 0x6029, .y = 0x0e, .x = 0x12}, \ - {.src = 0x6049, .y = 0x0f, .x = 0x12}, \ - {.src = lastSrc, .y = 0x0f, .x = 0x11}, +#define LINESECTION_ROUND2_MATCH7(lastTile) \ + {.tile = LINE_V_L, .y = 14, .x = 18}, \ + {.tile = LINE_V_L_HALF, .y = 15, .x = 18}, \ + {.tile = lastTile, .y = 15, .x = 17}, -#define LINESECTION_ROUND2_MATCH8(lastSrc) \ - {.src = 0x6029, .y = 0x10, .x = 0x12}, \ - {.src = 0x6029, .y = 0x0f, .x = 0x12}, \ - {.src = lastSrc, .y = 0x0f, .x = 0x11}, +#define LINESECTION_ROUND2_MATCH8(lastTile) \ + {.tile = LINE_V_L, .y = 16, .x = 18}, \ + {.tile = LINE_V_L, .y = 15, .x = 18}, \ + {.tile = lastTile, .y = 15, .x = 17}, -#define LINESECTION_SEMIFINAL_TOP_LEFT \ - {.src = 0x6027, .y = 0x08, .x = 0x0c}, \ - {.src = 0x6027, .y = 0x09, .x = 0x0c}, \ - {.src = 0x6027, .y = 0x0a, .x = 0x0c}, \ - {.src = 0x603b, .y = 0x0b, .x = 0x0c}, +#define LINESECTION_SEMIFINAL_TOP_LEFT \ + {.tile = LINE_V_R, .y = 8, .x = 12}, \ + {.tile = LINE_V_R, .y = 9, .x = 12}, \ + {.tile = LINE_V_R, .y = 10, .x = 12}, \ + {.tile = LINE_V_R_HALF_LOGO, .y = 11, .x = 12}, -#define LINESECTION_SEMIFINAL_BOTTOM_LEFT \ - {.src = 0x6033, .y = 0x0e, .x = 0x0c}, \ - {.src = 0x6032, .y = 0x0d, .x = 0x0c}, \ - {.src = 0x6031, .y = 0x0c, .x = 0x0c}, \ - {.src = 0x6030, .y = 0x0b, .x = 0x0c}, - -#define LINESECTION_SEMIFINAL_TOP_RIGHT \ - {.src = 0x6029, .y = 0x08, .x = 0x11}, \ - {.src = 0x6029, .y = 0x09, .x = 0x11}, \ - {.src = 0x6029, .y = 0x0a, .x = 0x11}, \ - {.src = 0x603c, .y = 0x0b, .x = 0x11}, +#define LINESECTION_SEMIFINAL_BOTTOM_LEFT \ + {.tile = LINE_V_R_LOGO4, .y = 14, .x = 12}, \ + {.tile = LINE_V_R_LOGO3, .y = 13, .x = 12}, \ + {.tile = LINE_V_R_LOGO2, .y = 12, .x = 12}, \ + {.tile = LINE_V_R_LOGO1, .y = 11, .x = 12}, +#define LINESECTION_SEMIFINAL_TOP_RIGHT \ + {.tile = LINE_V_L, .y = 8, .x = 17}, \ + {.tile = LINE_V_L, .y = 9, .x = 17}, \ + {.tile = LINE_V_L, .y = 10, .x = 17}, \ + {.tile = LINE_V_L_HALF_LOGO, .y = 11, .x = 17}, + #define LINESECTION_SEMIFINAL_BOTTOM_RIGHT \ - {.src = 0x6038, .y = 0x0e, .x = 0x11}, \ - {.src = 0x6037, .y = 0x0d, .x = 0x11}, \ - {.src = 0x6036, .y = 0x0c, .x = 0x11}, \ - {.src = 0x6035, .y = 0x0b, .x = 0x11}, + {.tile = LINE_V_L_LOGO4, .y = 14, .x = 17}, \ + {.tile = LINE_V_L_LOGO3, .y = 13, .x = 17}, \ + {.tile = LINE_V_L_LOGO2, .y = 12, .x = 17}, \ + {.tile = LINE_V_L_LOGO1, .y = 11, .x = 17}, + +#define LINESECTION_FINAL_LEFT \ + {.tile = LINE_H_LOGO1, .y = 11, .x = 13}, \ + {.tile = LINE_H_LOGO2, .y = 11, .x = 14}, -#define LINESECTION_FINAL_LEFT \ - {.src = 0x602c, .y = 0x0b, .x = 0x0d}, \ - {.src = 0x602d, .y = 0x0b, .x = 0x0e}, - -#define LINESECTION_FINAL_RIGHT \ - {.src = 0x602f, .y = 0x0b, .x = 0x10}, \ - {.src = 0x602e, .y = 0x0b, .x = 0x0f}, +#define LINESECTION_FINAL_RIGHT \ + {.tile = LINE_H_LOGO4, .y = 11, .x = 16}, \ + {.tile = LINE_H_LOGO3, .y = 11, .x = 15}, static const struct TourneyTreeLineSection sLineSectionTrainer1Round1[] = { - LINESECTION_ROUND1_TRAINER1(0x6043) + LINESECTION_ROUND1_TRAINER1(LINE_CORNER_R_HALF) }; static const struct TourneyTreeLineSection sLineSectionTrainer1Round2[] = { - LINESECTION_ROUND1_TRAINER1(0x6023) - LINESECTION_ROUND2_MATCH1(0x6043) + LINESECTION_ROUND1_TRAINER1(LINE_CORNER_R) + LINESECTION_ROUND2_MATCH1(LINE_CORNER_R_HALF) }; static const struct TourneyTreeLineSection sLineSectionTrainer1Semifinal[] = { - LINESECTION_ROUND1_TRAINER1(0x6023) - LINESECTION_ROUND2_MATCH1(0x6023) + LINESECTION_ROUND1_TRAINER1(LINE_CORNER_R) + LINESECTION_ROUND2_MATCH1(LINE_CORNER_R) LINESECTION_SEMIFINAL_TOP_LEFT }; static const struct TourneyTreeLineSection sLineSectionTrainer1Final[] = { - LINESECTION_ROUND1_TRAINER1(0x6023) - LINESECTION_ROUND2_MATCH1(0x6023) + LINESECTION_ROUND1_TRAINER1(LINE_CORNER_R) + LINESECTION_ROUND2_MATCH1(LINE_CORNER_R) LINESECTION_SEMIFINAL_TOP_LEFT LINESECTION_FINAL_LEFT }; static const struct TourneyTreeLineSection sLineSectionTrainer9Round1[] = { - LINESECTION_ROUND1_TRAINER9(0x6043) + LINESECTION_ROUND1_TRAINER9(LINE_CORNER_R_HALF) }; static const struct TourneyTreeLineSection sLineSectionTrainer9Round2[] = { - LINESECTION_ROUND1_TRAINER9(0x6023) - LINESECTION_ROUND2_MATCH1(0x6043) + LINESECTION_ROUND1_TRAINER9(LINE_CORNER_R) + LINESECTION_ROUND2_MATCH1(LINE_CORNER_R_HALF) }; static const struct TourneyTreeLineSection sLineSectionTrainer9Semifinal[] = { - LINESECTION_ROUND1_TRAINER9(0x6023) - LINESECTION_ROUND2_MATCH1(0x6023) + LINESECTION_ROUND1_TRAINER9(LINE_CORNER_R) + LINESECTION_ROUND2_MATCH1(LINE_CORNER_R) LINESECTION_SEMIFINAL_TOP_LEFT }; static const struct TourneyTreeLineSection sLineSectionTrainer9Final[] = { - LINESECTION_ROUND1_TRAINER9(0x6023) - LINESECTION_ROUND2_MATCH1(0x6023) + LINESECTION_ROUND1_TRAINER9(LINE_CORNER_R) + LINESECTION_ROUND2_MATCH1(LINE_CORNER_R) LINESECTION_SEMIFINAL_TOP_LEFT LINESECTION_FINAL_LEFT }; static const struct TourneyTreeLineSection sLineSectionTrainer13Round1[] = { - LINESECTION_ROUND1_TRAINER13(0x6021) + LINESECTION_ROUND1_TRAINER13(LINE_H) }; static const struct TourneyTreeLineSection sLineSectionTrainer13Round2[] = { - LINESECTION_ROUND1_TRAINER13(0x6021) - LINESECTION_ROUND2_MATCH2(0x6043) + LINESECTION_ROUND1_TRAINER13(LINE_H) + LINESECTION_ROUND2_MATCH2(LINE_CORNER_R_HALF) }; static const struct TourneyTreeLineSection sLineSectionTrainer13Semifinal[] = { - LINESECTION_ROUND1_TRAINER13(0x6021) - LINESECTION_ROUND2_MATCH2(0x6023) + LINESECTION_ROUND1_TRAINER13(LINE_H) + LINESECTION_ROUND2_MATCH2(LINE_CORNER_R) LINESECTION_SEMIFINAL_TOP_LEFT }; static const struct TourneyTreeLineSection sLineSectionTrainer13Final[] = { - LINESECTION_ROUND1_TRAINER13(0x6021) - LINESECTION_ROUND2_MATCH2(0x6023) + LINESECTION_ROUND1_TRAINER13(LINE_H) + LINESECTION_ROUND2_MATCH2(LINE_CORNER_R) LINESECTION_SEMIFINAL_TOP_LEFT LINESECTION_FINAL_LEFT }; static const struct TourneyTreeLineSection sLineSectionTrainer5Round1[] = { - LINESECTION_ROUND1_TRAINER5(0x6021) + LINESECTION_ROUND1_TRAINER5(LINE_H) }; static const struct TourneyTreeLineSection sLineSectionTrainer5Round2[] = { - LINESECTION_ROUND1_TRAINER5(0x6021) - LINESECTION_ROUND2_MATCH2(0x6043) + LINESECTION_ROUND1_TRAINER5(LINE_H) + LINESECTION_ROUND2_MATCH2(LINE_CORNER_R_HALF) }; static const struct TourneyTreeLineSection sLineSectionTrainer5Semifinal[] = { - LINESECTION_ROUND1_TRAINER5(0x6021) - LINESECTION_ROUND2_MATCH2(0x6023) + LINESECTION_ROUND1_TRAINER5(LINE_H) + LINESECTION_ROUND2_MATCH2(LINE_CORNER_R) LINESECTION_SEMIFINAL_TOP_LEFT }; static const struct TourneyTreeLineSection sLineSectionTrainer5Final[] = { - LINESECTION_ROUND1_TRAINER5(0x6021) - LINESECTION_ROUND2_MATCH2(0x6023) + LINESECTION_ROUND1_TRAINER5(LINE_H) + LINESECTION_ROUND2_MATCH2(LINE_CORNER_R) LINESECTION_SEMIFINAL_TOP_LEFT LINESECTION_FINAL_LEFT }; static const struct TourneyTreeLineSection sLineSectionTrainer8Round1[] = { - LINESECTION_ROUND1_TRAINER8(0x6043) + LINESECTION_ROUND1_TRAINER8(LINE_CORNER_R_HALF) }; static const struct TourneyTreeLineSection sLineSectionTrainer8Round2[] = { - LINESECTION_ROUND1_TRAINER8(0x6023) - LINESECTION_ROUND2_MATCH3(0x6021) + LINESECTION_ROUND1_TRAINER8(LINE_CORNER_R) + LINESECTION_ROUND2_MATCH3(LINE_H) }; static const struct TourneyTreeLineSection sLineSectionTrainer8Semifinal[] = { - LINESECTION_ROUND1_TRAINER8(0x6023) - LINESECTION_ROUND2_MATCH3(0x6021) + LINESECTION_ROUND1_TRAINER8(LINE_CORNER_R) + LINESECTION_ROUND2_MATCH3(LINE_H) LINESECTION_SEMIFINAL_BOTTOM_LEFT }; static const struct TourneyTreeLineSection sLineSectionTrainer8Final[] = { - LINESECTION_ROUND1_TRAINER8(0x6023) - LINESECTION_ROUND2_MATCH3(0x6021) + LINESECTION_ROUND1_TRAINER8(LINE_CORNER_R) + LINESECTION_ROUND2_MATCH3(LINE_H) LINESECTION_SEMIFINAL_BOTTOM_LEFT LINESECTION_FINAL_LEFT }; static const struct TourneyTreeLineSection sLineSectionTrainer16Round1[] = { - LINESECTION_ROUND1_TRAINER16(0x6043) + LINESECTION_ROUND1_TRAINER16(LINE_CORNER_R_HALF) }; static const struct TourneyTreeLineSection sLineSectionTrainer16Round2[] = { - LINESECTION_ROUND1_TRAINER16(0x6023) - LINESECTION_ROUND2_MATCH3(0x6021) + LINESECTION_ROUND1_TRAINER16(LINE_CORNER_R) + LINESECTION_ROUND2_MATCH3(LINE_H) }; static const struct TourneyTreeLineSection sLineSectionTrainer16Semifinal[] = { - LINESECTION_ROUND1_TRAINER16(0x6023) - LINESECTION_ROUND2_MATCH3(0x6021) + LINESECTION_ROUND1_TRAINER16(LINE_CORNER_R) + LINESECTION_ROUND2_MATCH3(LINE_H) LINESECTION_SEMIFINAL_BOTTOM_LEFT }; static const struct TourneyTreeLineSection sLineSectionTrainer16Final[] = { - LINESECTION_ROUND1_TRAINER16(0x6023) - LINESECTION_ROUND2_MATCH3(0x6021) + LINESECTION_ROUND1_TRAINER16(LINE_CORNER_R) + LINESECTION_ROUND2_MATCH3(LINE_H) LINESECTION_SEMIFINAL_BOTTOM_LEFT LINESECTION_FINAL_LEFT }; static const struct TourneyTreeLineSection sLineSectionTrainer12Round1[] = { - LINESECTION_ROUND1_TRAINER12(0x6021) + LINESECTION_ROUND1_TRAINER12(LINE_H) }; static const struct TourneyTreeLineSection sLineSectionTrainer12Round2[] = { - LINESECTION_ROUND1_TRAINER12(0x6021) - LINESECTION_ROUND2_MATCH4(0x6021) + LINESECTION_ROUND1_TRAINER12(LINE_H) + LINESECTION_ROUND2_MATCH4(LINE_H) }; static const struct TourneyTreeLineSection sLineSectionTrainer12Semifinal[] = { - LINESECTION_ROUND1_TRAINER12(0x6021) - LINESECTION_ROUND2_MATCH4(0x6021) + LINESECTION_ROUND1_TRAINER12(LINE_H) + LINESECTION_ROUND2_MATCH4(LINE_H) LINESECTION_SEMIFINAL_BOTTOM_LEFT }; static const struct TourneyTreeLineSection sLineSectionTrainer12Final[] = { - LINESECTION_ROUND1_TRAINER12(0x6021) - LINESECTION_ROUND2_MATCH4(0x6021) + LINESECTION_ROUND1_TRAINER12(LINE_H) + LINESECTION_ROUND2_MATCH4(LINE_H) LINESECTION_SEMIFINAL_BOTTOM_LEFT LINESECTION_FINAL_LEFT }; static const struct TourneyTreeLineSection sLineSectionTrainer4Round1[] = { - LINESECTION_ROUND1_TRAINER4(0x6021) + LINESECTION_ROUND1_TRAINER4(LINE_H) }; static const struct TourneyTreeLineSection sLineSectionTrainer4Round2[] = { - LINESECTION_ROUND1_TRAINER4(0x6021) - LINESECTION_ROUND2_MATCH4(0x6021) + LINESECTION_ROUND1_TRAINER4(LINE_H) + LINESECTION_ROUND2_MATCH4(LINE_H) }; static const struct TourneyTreeLineSection sLineSectionTrainer4Semifinal[] = { - LINESECTION_ROUND1_TRAINER4(0x6021) - LINESECTION_ROUND2_MATCH4(0x6021) + LINESECTION_ROUND1_TRAINER4(LINE_H) + LINESECTION_ROUND2_MATCH4(LINE_H) LINESECTION_SEMIFINAL_BOTTOM_LEFT }; static const struct TourneyTreeLineSection sLineSectionTrainer4Final[] = { - LINESECTION_ROUND1_TRAINER4(0x6021) - LINESECTION_ROUND2_MATCH4(0x6021) + LINESECTION_ROUND1_TRAINER4(LINE_H) + LINESECTION_ROUND2_MATCH4(LINE_H) LINESECTION_SEMIFINAL_BOTTOM_LEFT LINESECTION_FINAL_LEFT }; static const struct TourneyTreeLineSection sLineSectionTrainer3Round1[] = { - LINESECTION_ROUND1_TRAINER3(0x6045) + LINESECTION_ROUND1_TRAINER3(LINE_CORNER_L_HALF) }; static const struct TourneyTreeLineSection sLineSectionTrainer3Round2[] = { - LINESECTION_ROUND1_TRAINER3(0x6025) - LINESECTION_ROUND2_MATCH5(0x6045) + LINESECTION_ROUND1_TRAINER3(LINE_CORNER_L) + LINESECTION_ROUND2_MATCH5(LINE_CORNER_L_HALF) }; static const struct TourneyTreeLineSection sLineSectionTrainer3Semifinal[] = { - LINESECTION_ROUND1_TRAINER3(0x6025) - LINESECTION_ROUND2_MATCH5(0x6025) + LINESECTION_ROUND1_TRAINER3(LINE_CORNER_L) + LINESECTION_ROUND2_MATCH5(LINE_CORNER_L) LINESECTION_SEMIFINAL_TOP_RIGHT }; static const struct TourneyTreeLineSection sLineSectionTrainer3Final[] = { - LINESECTION_ROUND1_TRAINER3(0x6025) - LINESECTION_ROUND2_MATCH5(0x6025) + LINESECTION_ROUND1_TRAINER3(LINE_CORNER_L) + LINESECTION_ROUND2_MATCH5(LINE_CORNER_L) LINESECTION_SEMIFINAL_TOP_RIGHT LINESECTION_FINAL_RIGHT }; static const struct TourneyTreeLineSection sLineSectionTrainer11Round1[] = { - LINESECTION_ROUND1_TRAINER11(0x6045) + LINESECTION_ROUND1_TRAINER11(LINE_CORNER_L_HALF) }; static const struct TourneyTreeLineSection sLineSectionTrainer11Round2[] = { - LINESECTION_ROUND1_TRAINER11(0x6025) - LINESECTION_ROUND2_MATCH5(0x6045) + LINESECTION_ROUND1_TRAINER11(LINE_CORNER_L) + LINESECTION_ROUND2_MATCH5(LINE_CORNER_L_HALF) }; static const struct TourneyTreeLineSection sLineSectionTrainer11Semifinal[] = { - LINESECTION_ROUND1_TRAINER11(0x6025) - LINESECTION_ROUND2_MATCH5(0x6025) + LINESECTION_ROUND1_TRAINER11(LINE_CORNER_L) + LINESECTION_ROUND2_MATCH5(LINE_CORNER_L) LINESECTION_SEMIFINAL_TOP_RIGHT }; static const struct TourneyTreeLineSection sLineSectionTrainer11Final[] = { - LINESECTION_ROUND1_TRAINER11(0x6025) - LINESECTION_ROUND2_MATCH5(0x6025) + LINESECTION_ROUND1_TRAINER11(LINE_CORNER_L) + LINESECTION_ROUND2_MATCH5(LINE_CORNER_L) LINESECTION_SEMIFINAL_TOP_RIGHT LINESECTION_FINAL_RIGHT }; static const struct TourneyTreeLineSection sLineSectionTrainer15Round1[] = { - LINESECTION_ROUND1_TRAINER15(0x6021) + LINESECTION_ROUND1_TRAINER15(LINE_H) }; static const struct TourneyTreeLineSection sLineSectionTrainer15Round2[] = { - LINESECTION_ROUND1_TRAINER15(0x6021) - LINESECTION_ROUND2_MATCH6(0x6045) + LINESECTION_ROUND1_TRAINER15(LINE_H) + LINESECTION_ROUND2_MATCH6(LINE_CORNER_L_HALF) }; static const struct TourneyTreeLineSection sLineSectionTrainer15Semifinal[] = { - LINESECTION_ROUND1_TRAINER15(0x6021) - LINESECTION_ROUND2_MATCH6(0x6025) + LINESECTION_ROUND1_TRAINER15(LINE_H) + LINESECTION_ROUND2_MATCH6(LINE_CORNER_L) LINESECTION_SEMIFINAL_TOP_RIGHT }; static const struct TourneyTreeLineSection sLineSectionTrainer15Final[] = { - LINESECTION_ROUND1_TRAINER15(0x6021) - LINESECTION_ROUND2_MATCH6(0x6025) + LINESECTION_ROUND1_TRAINER15(LINE_H) + LINESECTION_ROUND2_MATCH6(LINE_CORNER_L) LINESECTION_SEMIFINAL_TOP_RIGHT LINESECTION_FINAL_RIGHT }; static const struct TourneyTreeLineSection sLineSectionTrainer7Round1[] = { - LINESECTION_ROUND1_TRAINER7(0x6021) + LINESECTION_ROUND1_TRAINER7(LINE_H) }; static const struct TourneyTreeLineSection sLineSectionTrainer7Round2[] = { - LINESECTION_ROUND1_TRAINER7(0x6021) - LINESECTION_ROUND2_MATCH6(0x6045) + LINESECTION_ROUND1_TRAINER7(LINE_H) + LINESECTION_ROUND2_MATCH6(LINE_CORNER_L_HALF) }; static const struct TourneyTreeLineSection sLineSectionTrainer7Semifinal[] = { - LINESECTION_ROUND1_TRAINER7(0x6021) - LINESECTION_ROUND2_MATCH6(0x6025) + LINESECTION_ROUND1_TRAINER7(LINE_H) + LINESECTION_ROUND2_MATCH6(LINE_CORNER_L) LINESECTION_SEMIFINAL_TOP_RIGHT }; static const struct TourneyTreeLineSection sLineSectionTrainer7Final[] = { - LINESECTION_ROUND1_TRAINER7(0x6021) - LINESECTION_ROUND2_MATCH6(0x6025) + LINESECTION_ROUND1_TRAINER7(LINE_H) + LINESECTION_ROUND2_MATCH6(LINE_CORNER_L) LINESECTION_SEMIFINAL_TOP_RIGHT LINESECTION_FINAL_RIGHT }; static const struct TourneyTreeLineSection sLineSectionTrainer6Round1[] = { - LINESECTION_ROUND1_TRAINER6(0x6045) + LINESECTION_ROUND1_TRAINER6(LINE_CORNER_L_HALF) }; static const struct TourneyTreeLineSection sLineSectionTrainer6Round2[] = { - LINESECTION_ROUND1_TRAINER6(0x6025) - LINESECTION_ROUND2_MATCH7(0x6021) + LINESECTION_ROUND1_TRAINER6(LINE_CORNER_L) + LINESECTION_ROUND2_MATCH7(LINE_H) }; static const struct TourneyTreeLineSection sLineSectionTrainer6Semifinal[] = { - LINESECTION_ROUND1_TRAINER6(0x6025) - LINESECTION_ROUND2_MATCH7(0x6021) + LINESECTION_ROUND1_TRAINER6(LINE_CORNER_L) + LINESECTION_ROUND2_MATCH7(LINE_H) LINESECTION_SEMIFINAL_BOTTOM_RIGHT }; static const struct TourneyTreeLineSection sLineSectionTrainer6Final[] = { - LINESECTION_ROUND1_TRAINER6(0x6025) - LINESECTION_ROUND2_MATCH7(0x6021) + LINESECTION_ROUND1_TRAINER6(LINE_CORNER_L) + LINESECTION_ROUND2_MATCH7(LINE_H) LINESECTION_SEMIFINAL_BOTTOM_RIGHT LINESECTION_FINAL_RIGHT }; static const struct TourneyTreeLineSection sLineSectionTrainer14Round1[] = { - LINESECTION_ROUND1_TRAINER14(0x6045) + LINESECTION_ROUND1_TRAINER14(LINE_CORNER_L_HALF) }; static const struct TourneyTreeLineSection sLineSectionTrainer14Round2[] = { - LINESECTION_ROUND1_TRAINER14(0x6025) - LINESECTION_ROUND2_MATCH7(0x6021) + LINESECTION_ROUND1_TRAINER14(LINE_CORNER_L) + LINESECTION_ROUND2_MATCH7(LINE_H) }; static const struct TourneyTreeLineSection sLineSectionTrainer14Semifinal[] = { - LINESECTION_ROUND1_TRAINER14(0x6025) - LINESECTION_ROUND2_MATCH7(0x6021) + LINESECTION_ROUND1_TRAINER14(LINE_CORNER_L) + LINESECTION_ROUND2_MATCH7(LINE_H) LINESECTION_SEMIFINAL_BOTTOM_RIGHT }; static const struct TourneyTreeLineSection sLineSectionTrainer14Final[] = { - LINESECTION_ROUND1_TRAINER14(0x6025) - LINESECTION_ROUND2_MATCH7(0x6021) + LINESECTION_ROUND1_TRAINER14(LINE_CORNER_L) + LINESECTION_ROUND2_MATCH7(LINE_H) LINESECTION_SEMIFINAL_BOTTOM_RIGHT LINESECTION_FINAL_RIGHT }; static const struct TourneyTreeLineSection sLineSectionTrainer10Round1[] = { - LINESECTION_ROUND1_TRAINER10(0x6021) + LINESECTION_ROUND1_TRAINER10(LINE_H) }; static const struct TourneyTreeLineSection sLineSectionTrainer10Round2[] = { - LINESECTION_ROUND1_TRAINER10(0x6021) - LINESECTION_ROUND2_MATCH8(0x6021) + LINESECTION_ROUND1_TRAINER10(LINE_H) + LINESECTION_ROUND2_MATCH8(LINE_H) }; static const struct TourneyTreeLineSection sLineSectionTrainer10Semifinal[] = { - LINESECTION_ROUND1_TRAINER10(0x6021) - LINESECTION_ROUND2_MATCH8(0x6021) + LINESECTION_ROUND1_TRAINER10(LINE_H) + LINESECTION_ROUND2_MATCH8(LINE_H) LINESECTION_SEMIFINAL_BOTTOM_RIGHT }; static const struct TourneyTreeLineSection sLineSectionTrainer10Final[] = { - LINESECTION_ROUND1_TRAINER10(0x6021) - LINESECTION_ROUND2_MATCH8(0x6021) + LINESECTION_ROUND1_TRAINER10(LINE_H) + LINESECTION_ROUND2_MATCH8(LINE_H) LINESECTION_SEMIFINAL_BOTTOM_RIGHT LINESECTION_FINAL_RIGHT }; static const struct TourneyTreeLineSection sLineSectionTrainer2Round1[] = { - LINESECTION_ROUND1_TRAINER2(0x6021) + LINESECTION_ROUND1_TRAINER2(LINE_H) }; static const struct TourneyTreeLineSection sLineSectionTrainer2Round2[] = { - LINESECTION_ROUND1_TRAINER2(0x6021) - LINESECTION_ROUND2_MATCH8(0x6021) + LINESECTION_ROUND1_TRAINER2(LINE_H) + LINESECTION_ROUND2_MATCH8(LINE_H) }; static const struct TourneyTreeLineSection sLineSectionTrainer2Semifinal[] = { - LINESECTION_ROUND1_TRAINER2(0x6021) - LINESECTION_ROUND2_MATCH8(0x6021) + LINESECTION_ROUND1_TRAINER2(LINE_H) + LINESECTION_ROUND2_MATCH8(LINE_H) LINESECTION_SEMIFINAL_BOTTOM_RIGHT }; static const struct TourneyTreeLineSection sLineSectionTrainer2Final[] = { - LINESECTION_ROUND1_TRAINER2(0x6021) - LINESECTION_ROUND2_MATCH8(0x6021) + LINESECTION_ROUND1_TRAINER2(LINE_H) + LINESECTION_ROUND2_MATCH8(LINE_H) LINESECTION_SEMIFINAL_BOTTOM_RIGHT LINESECTION_FINAL_RIGHT }; @@ -2990,7 +3020,7 @@ static void SetDomeOpponentGraphicsId(void) static void SaveDomeChallenge(void) { gSaveBlock2Ptr->frontier.challengeStatus = gSpecialVar_0x8005; - VarSet(VAR_TEMP_0, 0); + VarSet(VAR_TEMP_CHALLENGE_STATUS, 0); gSaveBlock2Ptr->frontier.challengePaused = TRUE; SaveGameFrontier(); } @@ -5538,7 +5568,7 @@ static void DrawTourneyAdvancementLine(u8 tournamentId, u8 roundId) const struct TourneyTreeLineSection *lineSection = sTourneyTreeLineSections[tournamentId][roundId]; for (i = 0; i < sTourneyTreeLineSectionArrayCounts[tournamentId][roundId]; i++) - CopyToBgTilemapBufferRect_ChangePalette(1, &lineSection[i].src, lineSection[i].x, lineSection[i].y, 1, 1, 17); + CopyToBgTilemapBufferRect_ChangePalette(1, &lineSection[i].tile, lineSection[i].x, lineSection[i].y, 1, 1, 17); CopyBgTilemapBufferToVram(1); } diff --git a/src/battle_factory.c b/src/battle_factory.c index eac9f0403e..5905b41917 100644 --- a/src/battle_factory.c +++ b/src/battle_factory.c @@ -269,7 +269,7 @@ static void SetBattleFactoryData(void) static void SaveFactoryChallenge(void) { gSaveBlock2Ptr->frontier.challengeStatus = gSpecialVar_0x8005; - VarSet(VAR_TEMP_0, 0); + VarSet(VAR_TEMP_CHALLENGE_STATUS, 0); gSaveBlock2Ptr->frontier.challengePaused = TRUE; SaveGameFrontier(); } @@ -525,13 +525,13 @@ static void GenerateInitialRentalMons(void) gFacilityTrainers = gBattleFrontierTrainers; for (i = 0; i < PARTY_SIZE; i++) { - species[i] = 0; + species[i] = SPECIES_NONE; monIds[i] = 0; - heldItems[i] = 0; + heldItems[i] = ITEM_NONE; } lvlMode = gSaveBlock2Ptr->frontier.lvlMode; battleMode = VarGet(VAR_FRONTIER_BATTLE_MODE); - challengeNum = gSaveBlock2Ptr->frontier.factoryWinStreaks[battleMode][lvlMode] / 7; + challengeNum = gSaveBlock2Ptr->frontier.factoryWinStreaks[battleMode][lvlMode] / FRONTIER_STAGES_PER_CHALLENGE; if (VarGet(VAR_FRONTIER_BATTLE_MODE) == FRONTIER_MODE_DOUBLES) factoryBattleMode = FRONTIER_MODE_DOUBLES; else @@ -582,7 +582,7 @@ static void GenerateInitialRentalMons(void) // Cannot have two same held items. for (j = firstMonId; j < firstMonId + i; j++) { - if (heldItems[j] != 0 && heldItems[j] == gBattleFrontierHeldItems[gFacilityTrainerMons[monId].itemTableId]) + if (heldItems[j] != ITEM_NONE && heldItems[j] == gBattleFrontierHeldItems[gFacilityTrainerMons[monId].itemTableId]) { if (gFacilityTrainerMons[monId].species == currSpecies) currSpecies = SPECIES_NONE; @@ -761,7 +761,7 @@ void FillFactoryBrainParty(void) u8 lvlMode = gSaveBlock2Ptr->frontier.lvlMode; u8 battleMode = VarGet(VAR_FRONTIER_BATTLE_MODE); - u8 challengeNum = gSaveBlock2Ptr->frontier.factoryWinStreaks[battleMode][lvlMode] / 7; + u8 challengeNum = gSaveBlock2Ptr->frontier.factoryWinStreaks[battleMode][lvlMode] / FRONTIER_STAGES_PER_CHALLENGE; fixedIV = GetFactoryMonFixedIV(challengeNum + 2, FALSE); monLevel = SetFacilityPtrsGetLevel(); i = 0; @@ -890,7 +890,7 @@ u32 GetAiScriptsInBattleFactory(void) else { int battleMode = VarGet(VAR_FRONTIER_BATTLE_MODE); - int challengeNum = gSaveBlock2Ptr->frontier.factoryWinStreaks[battleMode][lvlMode] / 7; + int challengeNum = gSaveBlock2Ptr->frontier.factoryWinStreaks[battleMode][lvlMode] / FRONTIER_STAGES_PER_CHALLENGE; if (gTrainerBattleOpponent_A == TRAINER_FRONTIER_BRAIN) return AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY; diff --git a/src/battle_factory_screen.c b/src/battle_factory_screen.c index 16f702c72c..a543e64c93 100644 --- a/src/battle_factory_screen.c +++ b/src/battle_factory_screen.c @@ -28,6 +28,7 @@ #include "strings.h" #include "graphics.h" #include "constants/battle_frontier.h" +#include "constants/battle_tent.h" #include "constants/songs.h" #include "constants/rgb.h" @@ -43,6 +44,9 @@ #define SELECTABLE_MONS_COUNT 6 +#define PALNUM_FADE_TEXT 14 +#define PALNUM_TEXT 15 + enum { PALTAG_BALL_GRAY = 100, PALTAG_BALL_SELECTED, @@ -268,7 +272,7 @@ static const u8 sActionHighlightMiddle_Gfx[] = INCBIN_U8( "graphics/battle_front static const u8 sActionHighlightRight_Gfx[] = INCBIN_U8( "graphics/battle_frontier/factory_screen/action_highlight_right.4bpp"); static const u8 sMonPicBgAnim_Gfx[] = INCBIN_U8( "graphics/battle_frontier/factory_screen/mon_pic_bg_anim.4bpp"); static const u8 sMonPicBg_Tilemap[] = INCBIN_U8( "graphics/battle_frontier/factory_screen/mon_pic_bg.bin"); -static const u8 sMonPicBg_Gfx[] = INCBIN_U8( "graphics/battle_frontier/factory_screen/mon_pic_bg.4bpp"); +static const u16 sMonPicBg_Gfx[] = INCBIN_U16("graphics/battle_frontier/factory_screen/mon_pic_bg.4bpp"); static const u16 sMonPicBg_Pal[] = INCBIN_U16("graphics/battle_frontier/factory_screen/mon_pic_bg.gbapal"); static const struct SpriteSheet sSelect_SpriteSheets[] = @@ -350,7 +354,7 @@ static const struct WindowTemplate sSelect_WindowTemplates[] = .tilemapTop = 2, .width = 12, .height = 2, - .paletteNum = 15, + .paletteNum = PALNUM_TEXT, .baseBlock = 0x0001, }, [SELECT_WIN_SPECIES] = { @@ -359,7 +363,7 @@ static const struct WindowTemplate sSelect_WindowTemplates[] = .tilemapTop = 2, .width = 11, .height = 2, - .paletteNum = 14, + .paletteNum = PALNUM_FADE_TEXT, .baseBlock = 0x0019, }, [SELECT_WIN_INFO] = { @@ -368,7 +372,7 @@ static const struct WindowTemplate sSelect_WindowTemplates[] = .tilemapTop = 15, .width = 20, .height = 3, - .paletteNum = 15, + .paletteNum = PALNUM_TEXT, .baseBlock = 0x002f, }, [SELECT_WIN_OPTIONS] = { @@ -377,7 +381,7 @@ static const struct WindowTemplate sSelect_WindowTemplates[] = .tilemapTop = 14, .width = 8, .height = 6, - .paletteNum = 15, + .paletteNum = PALNUM_TEXT, .baseBlock = 0x006b, }, [SELECT_WIN_YES_NO] = { @@ -386,7 +390,7 @@ static const struct WindowTemplate sSelect_WindowTemplates[] = .tilemapTop = 14, .width = 8, .height = 4, - .paletteNum = 15, + .paletteNum = PALNUM_TEXT, .baseBlock = 0x009b, }, [SELECT_WIN_MON_CATEGORY] = { @@ -395,7 +399,7 @@ static const struct WindowTemplate sSelect_WindowTemplates[] = .tilemapTop = 0, .width = 15, .height = 2, - .paletteNum = 15, + .paletteNum = PALNUM_TEXT, .baseBlock = 0x00bb, }, DUMMY_WIN_TEMPLATE, @@ -634,7 +638,11 @@ static const struct SpriteSheet sSwap_SpriteSheets[] = {sMenuHighlightRight_Gfx, sizeof(sMenuHighlightRight_Gfx), GFXTAG_MENU_HIGHLIGHT_RIGHT}, {sActionBoxLeft_Gfx, sizeof(sActionBoxLeft_Gfx), GFXTAG_ACTION_BOX_LEFT}, {sActionBoxRight_Gfx, sizeof(sActionBoxRight_Gfx), GFXTAG_ACTION_BOX_RIGHT}, - {sActionHighlightLeft_Gfx, 0x100, GFXTAG_ACTION_HIGHLIGHT_LEFT}, +#ifdef BUGFIX + {sActionHighlightLeft_Gfx, sizeof(sActionHighlightLeft_Gfx), GFXTAG_ACTION_HIGHLIGHT_LEFT}, +#else + {sActionHighlightLeft_Gfx, 8 * TILE_SIZE_4BPP, /* Incorrect size */ GFXTAG_ACTION_HIGHLIGHT_LEFT}, +#endif {sActionHighlightMiddle_Gfx, sizeof(sActionHighlightMiddle_Gfx), GFXTAG_ACTION_HIGHLIGHT_MIDDLE}, {sActionHighlightRight_Gfx, sizeof(sActionHighlightRight_Gfx), GFXTAG_ACTION_HIGHLIGHT_RIGHT}, {sMonPicBgAnim_Gfx, sizeof(sMonPicBgAnim_Gfx), GFXTAG_MON_PIC_BG_ANIM}, @@ -945,7 +953,7 @@ static const struct WindowTemplate sSwap_WindowTemplates[] = .tilemapTop = 2, .width = 12, .height = 2, - .paletteNum = 15, + .paletteNum = PALNUM_TEXT, .baseBlock = 0x0001, }, [SWAP_WIN_SPECIES] = { @@ -954,7 +962,7 @@ static const struct WindowTemplate sSwap_WindowTemplates[] = .tilemapTop = 2, .width = 11, .height = 2, - .paletteNum = 14, + .paletteNum = PALNUM_FADE_TEXT, .baseBlock = 0x0019, }, [SWAP_WIN_INFO] = { @@ -963,7 +971,7 @@ static const struct WindowTemplate sSwap_WindowTemplates[] = .tilemapTop = 15, .width = 20, .height = 3, - .paletteNum = 15, + .paletteNum = PALNUM_TEXT, .baseBlock = 0x002f, }, [SWAP_WIN_OPTIONS] = { @@ -972,7 +980,7 @@ static const struct WindowTemplate sSwap_WindowTemplates[] = .tilemapTop = 14, .width = 9, .height = 6, - .paletteNum = 15, + .paletteNum = PALNUM_TEXT, .baseBlock = 0x006b, }, [SWAP_WIN_YES_NO] = { @@ -981,7 +989,7 @@ static const struct WindowTemplate sSwap_WindowTemplates[] = .tilemapTop = 14, .width = 8, .height = 4, - .paletteNum = 15, + .paletteNum = PALNUM_TEXT, .baseBlock = 0x00a1, }, [SWAP_WIN_ACTION_FADE] = { @@ -990,7 +998,7 @@ static const struct WindowTemplate sSwap_WindowTemplates[] = .tilemapTop = 15, .width = 9, .height = 5, - .paletteNum = 14, + .paletteNum = PALNUM_FADE_TEXT, .baseBlock = 0x006b, }, [SWAP_WIN_UNUSED] = { @@ -999,7 +1007,7 @@ static const struct WindowTemplate sSwap_WindowTemplates[] = .tilemapTop = 2, .width = 4, .height = 2, - .paletteNum = 14, + .paletteNum = PALNUM_FADE_TEXT, .baseBlock = 0x00c1, }, [SWAP_WIN_SPECIES_AT_FADE] = { @@ -1008,7 +1016,7 @@ static const struct WindowTemplate sSwap_WindowTemplates[] = .tilemapTop = 2, .width = 11, .height = 2, - .paletteNum = 15, + .paletteNum = PALNUM_TEXT, .baseBlock = 0x00c9, }, [SWAP_WIN_MON_CATEGORY] = { @@ -1017,7 +1025,7 @@ static const struct WindowTemplate sSwap_WindowTemplates[] = .tilemapTop = 0, .width = 15, .height = 2, - .paletteNum = 15, + .paletteNum = PALNUM_TEXT, .baseBlock = 0x00df, }, DUMMY_WIN_TEMPLATE, @@ -1142,8 +1150,12 @@ static void CB2_InitSelectScreen(void) gMain.state++; break; case 1: - sSelectMenuTilesetBuffer = Alloc(0x440); - sSelectMonPicBgTilesetBuffer = AllocZeroed(0x440); + sSelectMenuTilesetBuffer = Alloc(sizeof(gFrontierFactoryMenu_Gfx)); +#ifdef BUGFIX + sSelectMonPicBgTilesetBuffer = AllocZeroed(sizeof(sMonPicBg_Gfx)); +#else + sSelectMonPicBgTilesetBuffer = AllocZeroed(sizeof(gFrontierFactoryMenu_Gfx)); // Incorrect size +#endif sSelectMenuTilemapBuffer = Alloc(BG_SCREEN_SIZE); sSelectMonPicBgTilemapBuffer = AllocZeroed(BG_SCREEN_SIZE); ChangeBgX(0, 0, BG_COORD_SET); @@ -1169,21 +1181,21 @@ static void CB2_InitSelectScreen(void) ResetSpriteData(); ResetTasks(); FreeAllSpritePalettes(); - CpuCopy16(gFrontierFactorySelectMenu_Gfx, sSelectMenuTilesetBuffer, 0x440); - CpuCopy16(sMonPicBg_Gfx, sSelectMonPicBgTilesetBuffer, 0x60); - LoadBgTiles(1, sSelectMenuTilesetBuffer, 0x440, 0); - LoadBgTiles(3, sSelectMonPicBgTilesetBuffer, 0x60, 0); - CpuCopy16(gFrontierFactorySelectMenu_Tilemap, sSelectMenuTilemapBuffer, BG_SCREEN_SIZE); + CpuCopy16(gFrontierFactoryMenu_Gfx, sSelectMenuTilesetBuffer, sizeof(gFrontierFactoryMenu_Gfx)); + CpuCopy16(sMonPicBg_Gfx, sSelectMonPicBgTilesetBuffer, sizeof(sMonPicBg_Gfx)); + LoadBgTiles(1, sSelectMenuTilesetBuffer, sizeof(gFrontierFactoryMenu_Gfx), 0); + LoadBgTiles(3, sSelectMonPicBgTilesetBuffer, sizeof(sMonPicBg_Gfx), 0); + CpuCopy16(gFrontierFactoryMenu_Tilemap, sSelectMenuTilemapBuffer, BG_SCREEN_SIZE); LoadBgTilemap(1, sSelectMenuTilemapBuffer, BG_SCREEN_SIZE, 0); - LoadPalette(gFrontierFactorySelectMenu_Pal, 0, 2 * PLTT_SIZE_4BPP); - LoadPalette(sSelectText_Pal, BG_PLTT_ID(15), PLTT_SIZEOF(4)); - LoadPalette(sSelectText_Pal, BG_PLTT_ID(14), PLTT_SIZEOF(5)); + LoadPalette(gFrontierFactoryMenu_Pal, 0, 2 * PLTT_SIZE_4BPP); + LoadPalette(sSelectText_Pal, BG_PLTT_ID(PALNUM_TEXT), PLTT_SIZEOF(4)); + LoadPalette(sSelectText_Pal, BG_PLTT_ID(PALNUM_FADE_TEXT), PLTT_SIZEOF(5)); #ifdef UBFIX if (sFactorySelectScreen && sFactorySelectScreen->fromSummaryScreen) #else if (sFactorySelectScreen->fromSummaryScreen == TRUE) #endif - gPlttBufferUnfaded[228] = sFactorySelectScreen->speciesNameColorBackup; + gPlttBufferUnfaded[BG_PLTT_ID(PALNUM_FADE_TEXT) + 4] = sFactorySelectScreen->speciesNameColorBackup; LoadPalette(sMonPicBg_Pal, BG_PLTT_ID(2), PLTT_SIZEOF(2)); gMain.state++; break; @@ -1449,7 +1461,7 @@ static void Select_Task_OpenSummaryScreen(u8 taskId) switch (gTasks[taskId].tState) { case STATE_SUMMARY_FADE: - gPlttBufferUnfaded[228] = gPlttBufferFaded[228]; + gPlttBufferUnfaded[BG_PLTT_ID(PALNUM_FADE_TEXT) + 4] = gPlttBufferFaded[BG_PLTT_ID(PALNUM_FADE_TEXT) + 4]; BeginNormalPaletteFade(PALETTES_ALL, 0, 0, 16, RGB_BLACK); gTasks[taskId].tState = STATE_SUMMARY_CLEAN; break; @@ -1468,7 +1480,7 @@ static void Select_Task_OpenSummaryScreen(u8 taskId) } break; case STATE_SUMMARY_SHOW: - sFactorySelectScreen->speciesNameColorBackup = gPlttBufferUnfaded[228]; + sFactorySelectScreen->speciesNameColorBackup = gPlttBufferUnfaded[BG_PLTT_ID(PALNUM_FADE_TEXT) + 4]; DestroyTask(taskId); sFactorySelectScreen->fromSummaryScreen = TRUE; currMonId = sFactorySelectScreen->cursorPos; @@ -1641,8 +1653,8 @@ static void Select_Task_HandleMenu(u8 taskId) { if (sFactorySelectScreen->fromSummaryScreen == TRUE) { - gPlttBufferFaded[228] = sFactorySelectScreen->speciesNameColorBackup; - gPlttBufferUnfaded[228] = gPlttBufferUnfaded[244]; + gPlttBufferFaded[BG_PLTT_ID(PALNUM_FADE_TEXT) + 4] = sFactorySelectScreen->speciesNameColorBackup; + gPlttBufferUnfaded[BG_PLTT_ID(PALNUM_FADE_TEXT) + 4] = gPlttBufferUnfaded[BG_PLTT_ID(PALNUM_TEXT) + 4]; } sFactorySelectScreen->fromSummaryScreen = FALSE; gTasks[taskId].tState = STATE_MENU_HANDLE_INPUT; @@ -1735,9 +1747,9 @@ static void CreateFrontierFactorySelectableMons(u8 firstMonId) gFacilityTrainerMons = gBattleFrontierMons; if (gSaveBlock2Ptr->frontier.lvlMode != FRONTIER_LVL_50) - level = 100; + level = FRONTIER_MAX_LEVEL_OPEN; else - level = 50; + level = FRONTIER_MAX_LEVEL_50; rentalRank = GetNumPastRentalsRank(battleMode, lvlMode); otId = T1_READ_32(gSaveBlock2Ptr->playerTrainerId); @@ -1769,7 +1781,7 @@ static void CreateSlateportTentSelectableMons(u8 firstMonId) { u8 i, j; u8 ivs = 0; - u8 level = 30; + u8 level = TENT_MIN_LEVEL; u8 friendship = 0; u32 otId = 0; @@ -1993,7 +2005,7 @@ static void Select_PrintMonCategory(void) FillWindowPixelBuffer(SELECT_WIN_MON_CATEGORY, PIXEL_FILL(0)); species = GetMonData(&sFactorySelectScreen->mons[monId].monData, MON_DATA_SPECIES, NULL); CopyMonCategoryText(SpeciesToNationalPokedexNum(species), text); - x = GetStringRightAlignXOffset(FONT_NORMAL, text, 0x76); + x = GetStringRightAlignXOffset(FONT_NORMAL, text, 118); AddTextPrinterParameterized(SELECT_WIN_MON_CATEGORY, FONT_NORMAL, text, x, 1, 0, NULL); CopyWindowToVram(SELECT_WIN_MON_CATEGORY, COPYWIN_GFX); } @@ -2290,7 +2302,7 @@ static void Select_Task_FadeSpeciesName(u8 taskId) else sFactorySelectScreen->fadeSpeciesNameCoeff++; } - BlendPalettes(0x4000, sFactorySelectScreen->fadeSpeciesNameCoeff, 0); + BlendPalettes(1 << PALNUM_FADE_TEXT, sFactorySelectScreen->fadeSpeciesNameCoeff, 0); if (sFactorySelectScreen->fadeSpeciesNameCoeff > 5) { sFactorySelectScreen->fadeSpeciesNameFadeOut = FALSE; @@ -2388,7 +2400,7 @@ static void Swap_Task_OpenSummaryScreen(u8 taskId) case STATE_SUMMARY_SHOW: DestroyTask(taskId); sFactorySwapScreen->fromSummaryScreen = TRUE; - sFactorySwapScreen->speciesNameColorBackup = gPlttBufferUnfaded[244]; + sFactorySwapScreen->speciesNameColorBackup = gPlttBufferUnfaded[BG_PLTT_ID(PALNUM_TEXT) + 4]; ShowPokemonSummaryScreen(SUMMARY_MODE_NORMAL, gPlayerParty, sFactorySwapScreen->cursorPos, FRONTIER_PARTY_SIZE - 1, CB2_InitSwapScreen); break; } @@ -2709,7 +2721,7 @@ static void Swap_Task_FadeSpeciesName(u8 taskId) else sFactorySwapScreen->fadeSpeciesNameCoeff++; } - BlendPalettes(0x4000, sFactorySwapScreen->fadeSpeciesNameCoeff, 0); + BlendPalettes(1 << PALNUM_FADE_TEXT, sFactorySwapScreen->fadeSpeciesNameCoeff, 0); if (sFactorySwapScreen->fadeSpeciesNameCoeff > 5) { sFactorySwapScreen->fadeSpeciesNameFadeOut = FALSE; @@ -2748,7 +2760,7 @@ static void Swap_Task_FadeOutSpeciesName(u8 taskId) gTasks[taskId].tState++; break; case 1: - LoadPalette(&gPlttBufferUnfaded[BG_PLTT_ID(15)], BG_PLTT_ID(14), PLTT_SIZEOF(5)); + LoadPalette(&gPlttBufferUnfaded[BG_PLTT_ID(PALNUM_TEXT)], BG_PLTT_ID(PALNUM_FADE_TEXT), PLTT_SIZEOF(5)); gTasks[taskId].tState++; break; case 2: @@ -2761,10 +2773,10 @@ static void Swap_Task_FadeOutSpeciesName(u8 taskId) if (sFactorySwapScreen->fadeSpeciesNameCoeffDelay > 3) { sFactorySwapScreen->fadeSpeciesNameCoeffDelay = 0; - gPlttBufferUnfaded[244] = gPlttBufferFaded[228]; + gPlttBufferUnfaded[BG_PLTT_ID(PALNUM_TEXT) + 4] = gPlttBufferFaded[BG_PLTT_ID(PALNUM_FADE_TEXT) + 4]; sFactorySwapScreen->fadeSpeciesNameCoeff++; } - BlendPalettes(0x4000, sFactorySwapScreen->fadeSpeciesNameCoeff, 0); + BlendPalettes(1 << PALNUM_FADE_TEXT, sFactorySwapScreen->fadeSpeciesNameCoeff, 0); break; } } @@ -2994,7 +3006,7 @@ static void Swap_Task_ScreenInfoTransitionOut(u8 taskId) switch (gTasks[taskId].tState) { case 0: - LoadPalette(sSwapText_Pal, BG_PLTT_ID(14), sizeof(sSwapText_Pal)); + LoadPalette(sSwapText_Pal, BG_PLTT_ID(PALNUM_FADE_TEXT), sizeof(sSwapText_Pal)); Swap_PrintActionStrings(); PutWindowTilemap(SWAP_WIN_ACTION_FADE); gTasks[taskId].tState++; @@ -3004,7 +3016,7 @@ static void Swap_Task_ScreenInfoTransitionOut(u8 taskId) gTasks[taskId].tState++; break; case 2: - BeginNormalPaletteFade(0x4000, 0, 0, 16, sPokeballGray_Pal[37]); + BeginNormalPaletteFade(1 << PALNUM_FADE_TEXT, 0, 0, 16, sPokeballGray_Pal[37]); gTasks[taskId].tState++; break; case 3: @@ -3125,14 +3137,14 @@ static void Swap_Task_ScreenInfoTransitionIn(u8 taskId) if (gTasks[taskId].tSlideFinishedPkmn == TRUE && gTasks[taskId].tSlideFinishedCancel == TRUE) { - gPlttBufferFaded[226] = sPokeballGray_Pal[37]; + gPlttBufferFaded[BG_PLTT_ID(PALNUM_FADE_TEXT) + 2] = sPokeballGray_Pal[37]; Swap_PrintActionStrings(); PutWindowTilemap(SWAP_WIN_ACTION_FADE); gTasks[taskId].tState++; } break; case 3: - BeginNormalPaletteFade(0x4000, 0, 16, 0, sPokeballGray_Pal[37]); + BeginNormalPaletteFade(1 << PALNUM_FADE_TEXT, 0, 16, 0, sPokeballGray_Pal[37]); gTasks[taskId].tState++; break; case 4: @@ -3275,8 +3287,12 @@ static void CB2_InitSwapScreen(void) gMain.state++; break; case 1: - sSwapMenuTilesetBuffer = Alloc(0x440); - sSwapMonPicBgTilesetBuffer = AllocZeroed(0x440); + sSwapMenuTilesetBuffer = Alloc(sizeof(gFrontierFactoryMenu_Gfx)); +#ifdef BUGFIX + sSwapMonPicBgTilesetBuffer = AllocZeroed(sizeof(sMonPicBg_Gfx)); +#else + sSwapMonPicBgTilesetBuffer = AllocZeroed(sizeof(gFrontierFactoryMenu_Gfx)); // Incorrect size +#endif sSwapMenuTilemapBuffer = Alloc(BG_SCREEN_SIZE); sSwapMonPicBgTilemapBuffer = AllocZeroed(BG_SCREEN_SIZE); ChangeBgX(0, 0, BG_COORD_SET); @@ -3303,15 +3319,15 @@ static void CB2_InitSwapScreen(void) ResetTasks(); FreeAllSpritePalettes(); ResetAllPicSprites(); - CpuCopy16(gFrontierFactorySelectMenu_Gfx, sSwapMenuTilesetBuffer, 0x440); - CpuCopy16(sMonPicBg_Gfx, sSwapMonPicBgTilesetBuffer, 0x60); - LoadBgTiles(1, sSwapMenuTilesetBuffer, 0x440, 0); - LoadBgTiles(3, sSwapMonPicBgTilesetBuffer, 0x60, 0); - CpuCopy16(gFrontierFactorySelectMenu_Tilemap, sSwapMenuTilemapBuffer, BG_SCREEN_SIZE); + CpuCopy16(gFrontierFactoryMenu_Gfx, sSwapMenuTilesetBuffer, sizeof(gFrontierFactoryMenu_Gfx)); + CpuCopy16(sMonPicBg_Gfx, sSwapMonPicBgTilesetBuffer, sizeof(sMonPicBg_Gfx)); + LoadBgTiles(1, sSwapMenuTilesetBuffer, sizeof(gFrontierFactoryMenu_Gfx), 0); + LoadBgTiles(3, sSwapMonPicBgTilesetBuffer, sizeof(sMonPicBg_Gfx), 0); + CpuCopy16(gFrontierFactoryMenu_Tilemap, sSwapMenuTilemapBuffer, BG_SCREEN_SIZE); LoadBgTilemap(1, sSwapMenuTilemapBuffer, BG_SCREEN_SIZE, 0); - LoadPalette(gFrontierFactorySelectMenu_Pal, 0, 2 * PLTT_SIZE_4BPP); - LoadPalette(sSwapText_Pal, BG_PLTT_ID(15), sizeof(sSwapText_Pal)); - LoadPalette(sSwapText_Pal, BG_PLTT_ID(14), sizeof(sSwapText_Pal)); + LoadPalette(gFrontierFactoryMenu_Pal, 0, 2 * PLTT_SIZE_4BPP); + LoadPalette(sSwapText_Pal, BG_PLTT_ID(PALNUM_TEXT), sizeof(sSwapText_Pal)); + LoadPalette(sSwapText_Pal, BG_PLTT_ID(PALNUM_FADE_TEXT), sizeof(sSwapText_Pal)); LoadPalette(sMonPicBg_Pal, BG_PLTT_ID(2), PLTT_SIZEOF(2)); gMain.state++; break; @@ -3808,7 +3824,7 @@ static void Swap_PrintYesNoOptions(void) static void Swap_PrintActionString(const u8 *str, u32 y, u32 windowId) { - s32 x = GetStringRightAlignXOffset(FONT_SMALL, str, 0x46); + s32 x = GetStringRightAlignXOffset(FONT_SMALL, str, 70); AddTextPrinterParameterized3(windowId, FONT_SMALL, x, y, sSwapMenuOptionsTextColors, 0, str); } @@ -3864,10 +3880,10 @@ static void Swap_PrintMonSpeciesAtFade(void) CpuCopy16(sSwapText_Pal, pal, 8); if (!sFactorySwapScreen->fromSummaryScreen) - pal[4] = gPlttBufferFaded[228]; + pal[4] = gPlttBufferFaded[BG_PLTT_ID(PALNUM_FADE_TEXT) + 4]; else pal[4] = sFactorySwapScreen->speciesNameColorBackup; - LoadPalette(pal, BG_PLTT_ID(15), sizeof(sSwapText_Pal)); + LoadPalette(pal, BG_PLTT_ID(PALNUM_TEXT), sizeof(sSwapText_Pal)); PutWindowTilemap(SWAP_WIN_SPECIES_AT_FADE); FillWindowPixelBuffer(SWAP_WIN_SPECIES_AT_FADE, PIXEL_FILL(0)); @@ -3895,8 +3911,8 @@ static void Swap_PrintMonSpeciesForTransition(void) u16 species; u8 x; - LoadPalette(sSwapText_Pal, BG_PLTT_ID(14), sizeof(sSwapText_Pal)); - CpuCopy16(&gPlttBufferUnfaded[BG_PLTT_ID(15)], &gPlttBufferFaded[BG_PLTT_ID(14)], PLTT_SIZEOF(5)); + LoadPalette(sSwapText_Pal, BG_PLTT_ID(PALNUM_FADE_TEXT), sizeof(sSwapText_Pal)); + CpuCopy16(&gPlttBufferUnfaded[BG_PLTT_ID(PALNUM_TEXT)], &gPlttBufferFaded[BG_PLTT_ID(PALNUM_FADE_TEXT)], PLTT_SIZEOF(5)); if (sFactorySwapScreen->cursorPos >= FRONTIER_PARTY_SIZE) { @@ -3936,7 +3952,7 @@ static void Swap_PrintMonCategory(void) else species = GetMonData(&gEnemyParty[monId], MON_DATA_SPECIES, NULL); CopyMonCategoryText(SpeciesToNationalPokedexNum(species), text); - x = GetStringRightAlignXOffset(FONT_NORMAL, text, 0x76); + x = GetStringRightAlignXOffset(FONT_NORMAL, text, 118); AddTextPrinterParameterized(SWAP_WIN_MON_CATEGORY, FONT_NORMAL, text, x, 1, 0, NULL); CopyWindowToVram(SWAP_WIN_MON_CATEGORY, COPYWIN_GFX); } diff --git a/src/battle_gfx_sfx_util.c b/src/battle_gfx_sfx_util.c index 0b5796487c..d98809be46 100644 --- a/src/battle_gfx_sfx_util.c +++ b/src/battle_gfx_sfx_util.c @@ -121,9 +121,9 @@ u16 ChooseMoveAndTargetInBattlePalace(void) #define selectedGroup percent #define selectedMoves var2 #define moveTarget var1 - #define validMoveFlags var1 - #define numValidMoveGroups var2 - #define validMoveGroup var2 + #define numMovesPerGroup var1 + #define numMultipleMoveGroups var2 + #define randSelectGroup var2 // If battler is < 50% HP and not asleep, use second set of move group likelihoods // otherwise use first set @@ -157,8 +157,10 @@ u16 ChooseMoveAndTargetInBattlePalace(void) // Pass selected moves to AI, pick one if (selectedMoves != 0) { - gBattleStruct->palaceFlags &= 0xF; - gBattleStruct->palaceFlags |= (selectedMoves << 4); + // Lower 4 bits of palaceFlags are flags for each battler. + // Clear the rest of palaceFlags, then set the selected moves in the upper 4 bits. + gBattleStruct->palaceFlags &= (1 << MAX_BATTLERS_COUNT) - 1; + gBattleStruct->palaceFlags |= (selectedMoves << MAX_BATTLERS_COUNT); BattleAI_SetupAIData(selectedMoves); chosenMoveId = BattleAI_ChooseMoveOrAction(); } @@ -168,34 +170,47 @@ u16 ChooseMoveAndTargetInBattlePalace(void) // If a move is chosen this way, there's a 50% chance that it will be unable to use it anyway if (chosenMoveId == -1) { - if (unusableMovesBits != 0xF) + if (unusableMovesBits != ALL_MOVES_MASK) { - validMoveFlags = 0, numValidMoveGroups = 0; + numMovesPerGroup = 0, numMultipleMoveGroups = 0; for (i = 0; i < MAX_MON_MOVES; i++) { - // validMoveFlags is used here as a bitfield for which moves can be used for each move group type - // first 4 bits are for attack (1 for each move), then 4 bits for defense, and 4 for support + // Count the number of usable moves the battler has in each move group. + // The totals will be stored separately in 3 groups of 4 bits each in numMovesPerGroup. if (GetBattlePalaceMoveGroup(moveInfo->moves[i]) == PALACE_MOVE_GROUP_ATTACK && !(gBitTable[i] & unusableMovesBits)) - validMoveFlags += (1 << 0); + numMovesPerGroup += (1 << 0); if (GetBattlePalaceMoveGroup(moveInfo->moves[i]) == PALACE_MOVE_GROUP_DEFENSE && !(gBitTable[i] & unusableMovesBits)) - validMoveFlags += (1 << 4); + numMovesPerGroup += (1 << 4); if (GetBattlePalaceMoveGroup(moveInfo->moves[i]) == PALACE_MOVE_GROUP_SUPPORT && !(gBitTable[i] & unusableMovesBits)) - validMoveFlags += (1 << 8); + numMovesPerGroup += (1 << 8); } - // Count the move groups the pokemon has - if ((validMoveFlags & 0xF) > 1) - numValidMoveGroups++; - if ((validMoveFlags & 0xF0) > 0x1F) - numValidMoveGroups++; - if ((validMoveFlags & 0xF0) > 0x1FF) - numValidMoveGroups++; + // Count the number of move groups for which the battler has at least 2 usable moves. + // This is a roundabout way to determine if there is a move group that should be + // preferred, because it has multiple move options and the others do not. + // The condition intended to check the total for the Support group is accidentally + // checking the Defense total, and is never true. As a result the preferences for + // random move selection here will skew away from the Support move group. + if ((numMovesPerGroup & 0xF) >= 2) + numMultipleMoveGroups++; + if ((numMovesPerGroup & (0xF << 4)) >= (2 << 4)) + numMultipleMoveGroups++; +#ifdef BUGFIX + if ((numMovesPerGroup & (0xF << 8)) >= (2 << 8)) +#else + if ((numMovesPerGroup & (0xF << 4)) >= (2 << 8)) +#endif + numMultipleMoveGroups++; - // If more than 1 possible move group, or no possible move groups - // then choose move randomly - if (numValidMoveGroups > 1 || numValidMoveGroups == 0) + // By this point we already know the battler only has usable moves from at most 2 of the 3 move groups, + // because they had no usable moves from the move group that was selected based on Nature. + // + // The below condition is effectively 'numMultipleMoveGroups != 1'. + // There is no stand-out group with multiple moves to choose from, so we pick randomly. + // Note that because of the bug above the battler may actually have any number of Support moves. + if (numMultipleMoveGroups > 1 || numMultipleMoveGroups == 0) { do { @@ -204,27 +219,36 @@ u16 ChooseMoveAndTargetInBattlePalace(void) chosenMoveId = i; } while (chosenMoveId == -1); } - // Otherwise randomly choose move of only available move group else { - if ((validMoveFlags & 0xF) > 1) - validMoveGroup = PALACE_MOVE_GROUP_ATTACK; - if ((validMoveFlags & 0xF0) > 0x1F) - validMoveGroup = PALACE_MOVE_GROUP_DEFENSE; - if ((validMoveFlags & 0xF0) > 0x1FF) - validMoveGroup = PALACE_MOVE_GROUP_SUPPORT; + // The battler has just 1 move group with multiple move options to choose from. + // Choose a move randomly from this group. + + // Same bug as the previous set of conditions (the condition for Support is never true). + // This bug won't cause a softlock below, because if Support is the only group with multiple + // moves then it won't have been counted, and the 'numMultipleMoveGroups == 0' above will be true. + if ((numMovesPerGroup & 0xF) >= 2) + randSelectGroup = PALACE_MOVE_GROUP_ATTACK; + if ((numMovesPerGroup & (0xF << 4)) >= (2 << 4)) + randSelectGroup = PALACE_MOVE_GROUP_DEFENSE; +#ifdef BUGFIX + if ((numMovesPerGroup & (0xF << 8)) >= (2 << 8)) +#else + if ((numMovesPerGroup & (0xF << 4)) >= (2 << 8)) +#endif + randSelectGroup = PALACE_MOVE_GROUP_SUPPORT; do { i = Random() % MAX_MON_MOVES; - if (!(gBitTable[i] & unusableMovesBits) && validMoveGroup == GetBattlePalaceMoveGroup(moveInfo->moves[i])) + if (!(gBitTable[i] & unusableMovesBits) && randSelectGroup == GetBattlePalaceMoveGroup(moveInfo->moves[i])) chosenMoveId = i; } while (chosenMoveId == -1); } - // If a move was selected (and in this case was not from the Nature-chosen group) - // then there's a 50% chance it won't be used anyway - if (Random() % 100 > 49) + // Because the selected move was not from the Nature-chosen move group there's a 50% chance + // that it will be unable to use it. This could have been checked earlier to avoid the above work. + if (Random() % 100 >= 50) { gProtectStructs[gActiveBattler].palaceUnableToUseMove = TRUE; return 0; @@ -232,6 +256,7 @@ u16 ChooseMoveAndTargetInBattlePalace(void) } else { + // All the battler's moves were flagged as unusable. gProtectStructs[gActiveBattler].palaceUnableToUseMove = TRUE; return 0; } @@ -264,9 +289,9 @@ u16 ChooseMoveAndTargetInBattlePalace(void) #undef selectedGroup #undef selectedMoves #undef moveTarget -#undef validMoveFlags -#undef numValidMoveGroups -#undef validMoveGroup +#undef numMovesPerGroup +#undef numMultipleMoveGroups +#undef randSelectGroup static u8 GetBattlePalaceMoveGroup(u16 move) { @@ -598,7 +623,7 @@ void BattleLoadOpponentMonSpriteGfx(struct Pokemon *mon, u8 battlerId) if (gBattleSpritesDataPtr->battlerData[battlerId].transformSpecies != SPECIES_NONE) { BlendPalette(paletteOffset, 16, 6, RGB_WHITE); - CpuCopy32(gPlttBufferFaded + paletteOffset, gPlttBufferUnfaded + paletteOffset, PLTT_SIZEOF(16)); + CpuCopy32(&gPlttBufferFaded[paletteOffset], &gPlttBufferUnfaded[paletteOffset], PLTT_SIZEOF(16)); } } @@ -661,7 +686,7 @@ void BattleLoadPlayerMonSpriteGfx(struct Pokemon *mon, u8 battlerId) if (gBattleSpritesDataPtr->battlerData[battlerId].transformSpecies != SPECIES_NONE) { BlendPalette(paletteOffset, 16, 6, RGB_WHITE); - CpuCopy32(gPlttBufferFaded + paletteOffset, gPlttBufferUnfaded + paletteOffset, PLTT_SIZEOF(16)); + CpuCopy32(&gPlttBufferFaded[paletteOffset], &gPlttBufferUnfaded[paletteOffset], PLTT_SIZEOF(16)); } } @@ -909,7 +934,7 @@ void HandleSpeciesGfxDataChange(u8 battlerAtk, u8 battlerDef, bool8 castform) if (gBattleSpritesDataPtr->battlerData[battlerAtk].transformSpecies != SPECIES_NONE) { BlendPalette(paletteOffset, 16, 6, RGB_WHITE); - CpuCopy32(gPlttBufferFaded + paletteOffset, gPlttBufferUnfaded + paletteOffset, PLTT_SIZEOF(16)); + CpuCopy32(&gPlttBufferFaded[paletteOffset], &gPlttBufferUnfaded[paletteOffset], PLTT_SIZEOF(16)); } gSprites[gBattlerSpriteIds[battlerAtk]].y = GetBattlerSpriteDefault_Y(battlerAtk); } @@ -978,7 +1003,7 @@ void HandleSpeciesGfxDataChange(u8 battlerAtk, u8 battlerDef, bool8 castform) } BlendPalette(paletteOffset, 16, 6, RGB_WHITE); - CpuCopy32(gPlttBufferFaded + paletteOffset, gPlttBufferUnfaded + paletteOffset, PLTT_SIZEOF(16)); + CpuCopy32(&gPlttBufferFaded[paletteOffset], &gPlttBufferUnfaded[paletteOffset], PLTT_SIZEOF(16)); if (!IsContest()) { diff --git a/src/battle_interface.c b/src/battle_interface.c index bc86ede4ac..f9a7be58ea 100644 --- a/src/battle_interface.c +++ b/src/battle_interface.c @@ -2059,7 +2059,7 @@ static void UpdateStatusIconInHealthbox(u8 healthboxSpriteId) pltAdder += battlerId + 12; FillPalette(sStatusIconColors[statusPalId], OBJ_PLTT_OFFSET + pltAdder, PLTT_SIZEOF(1)); - CpuCopy16(gPlttBufferUnfaded + OBJ_PLTT_OFFSET + pltAdder, (u16 *)OBJ_PLTT + pltAdder, PLTT_SIZEOF(1)); + CpuCopy16(&gPlttBufferUnfaded[OBJ_PLTT_OFFSET + pltAdder], (u16 *)OBJ_PLTT + pltAdder, PLTT_SIZEOF(1)); CpuCopy32(statusGfxPtr, (void *)(OBJ_VRAM0 + (gSprites[healthboxSpriteId].oam.tileNum + tileNumAdder) * TILE_SIZE_4BPP), 96); if (IsDoubleBattle() == TRUE || GetBattlerSide(battlerId) == B_SIDE_OPPONENT) { diff --git a/src/battle_intro.c b/src/battle_intro.c index 42fe659746..3cdc879a86 100644 --- a/src/battle_intro.c +++ b/src/battle_intro.c @@ -182,7 +182,7 @@ static void BattleIntroSlide1(u8 taskId) if ((gBattle_WIN0V & 0xFF00) == 0x3000) { gTasks[taskId].tState++; - gTasks[taskId].data[2] = 240; + gTasks[taskId].data[2] = DISPLAY_WIDTH; gTasks[taskId].data[3] = 32; gIntroSlideFlags &= ~1; } @@ -213,13 +213,13 @@ static void BattleIntroSlide1(u8 taskId) gTasks[taskId].data[2] -= 2; // Scanline settings have already been set in CB2_InitBattleInternal() - for (i = 0; i < 80; i++) + for (i = 0; i < DISPLAY_HEIGHT / 2; i++) gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer][i] = gTasks[taskId].data[2]; - for (; i < 160; i++) + for (; i < DISPLAY_HEIGHT; i++) gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer][i] = -gTasks[taskId].data[2]; - if (!gTasks[taskId].data[2]) + if (gTasks[taskId].data[2] == 0) { gScanlineEffect.state = 3; gTasks[taskId].tState++; @@ -290,7 +290,7 @@ static void BattleIntroSlide2(u8 taskId) if ((gBattle_WIN0V & 0xFF00) == 0x3000) { gTasks[taskId].tState++; - gTasks[taskId].data[2] = 240; + gTasks[taskId].data[2] = DISPLAY_WIDTH; gTasks[taskId].data[3] = 32; gTasks[taskId].data[5] = 1; gIntroSlideFlags &= ~1; @@ -322,13 +322,13 @@ static void BattleIntroSlide2(u8 taskId) gTasks[taskId].data[2] -= 2; // Scanline settings have already been set in CB2_InitBattleInternal() - for (i = 0; i < 80; i++) + for (i = 0; i < DISPLAY_HEIGHT / 2; i++) gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer][i] = gTasks[taskId].data[2]; - for (; i < 160; i++) + for (; i < DISPLAY_HEIGHT; i++) gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer][i] = -gTasks[taskId].data[2]; - if (!gTasks[taskId].data[2]) + if (gTasks[taskId].data[2] == 0) { gScanlineEffect.state = 3; gTasks[taskId].tState++; @@ -383,7 +383,7 @@ static void BattleIntroSlide3(u8 taskId) if ((gBattle_WIN0V & 0xFF00) == 0x3000) { gTasks[taskId].tState++; - gTasks[taskId].data[2] = 240; + gTasks[taskId].data[2] = DISPLAY_WIDTH; gTasks[taskId].data[3] = 32; gTasks[taskId].data[5] = 1; gIntroSlideFlags &= ~1; @@ -410,13 +410,13 @@ static void BattleIntroSlide3(u8 taskId) gTasks[taskId].data[2] -= 2; // Scanline settings have already been set in CB2_InitBattleInternal() - for (i = 0; i < 80; i++) + for (i = 0; i < DISPLAY_HEIGHT / 2; i++) gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer][i] = gTasks[taskId].data[2]; - for (; i < 160; i++) + for (; i < DISPLAY_HEIGHT; i++) gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer][i] = -gTasks[taskId].data[2]; - if (!gTasks[taskId].data[2]) + if (gTasks[taskId].data[2] == 0) { gScanlineEffect.state = 3; gTasks[taskId].tState++; @@ -479,7 +479,7 @@ static void BattleIntroSlideLink(u8 taskId) if ((gBattle_WIN0V & 0xFF00) == 0x3000) { gTasks[taskId].tState++; - gTasks[taskId].data[2] = 240; + gTasks[taskId].data[2] = DISPLAY_WIDTH; gTasks[taskId].data[3] = 32; gIntroSlideFlags &= ~1; } @@ -492,13 +492,13 @@ static void BattleIntroSlideLink(u8 taskId) gTasks[taskId].data[2] -= 2; // Scanline settings have already been set in CB2_InitBattleInternal() - for (i = 0; i < 80; i++) + for (i = 0; i < DISPLAY_HEIGHT / 2; i++) gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer][i] = gTasks[taskId].data[2]; - for (; i < 160; i++) + for (; i < DISPLAY_HEIGHT; i++) gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer][i] = -gTasks[taskId].data[2]; - if (!gTasks[taskId].data[2]) + if (gTasks[taskId].data[2] == 0) { gScanlineEffect.state = 3; gTasks[taskId].tState++; @@ -544,7 +544,7 @@ static void BattleIntroSlidePartner(u8 taskId) if ((gBattle_WIN0V & 0xFF00) == 0x2000) { gTasks[taskId].tState++; - gTasks[taskId].data[2] = 240; + gTasks[taskId].data[2] = DISPLAY_WIDTH; gIntroSlideFlags &= ~1; } break; @@ -557,7 +557,7 @@ static void BattleIntroSlidePartner(u8 taskId) gBattle_BG1_X = gTasks[taskId].data[2]; gBattle_BG2_X = -gTasks[taskId].data[2]; - if (!gTasks[taskId].data[2]) + if (gTasks[taskId].data[2] == 0) gTasks[taskId].tState++; break; case 4: diff --git a/src/battle_main.c b/src/battle_main.c index 31fc52f687..ffb9f2ada5 100644 --- a/src/battle_main.c +++ b/src/battle_main.c @@ -644,19 +644,16 @@ static void CB2_InitBattleInternal(void) gBattle_WIN0V = WIN_RANGE(DISPLAY_HEIGHT / 2, DISPLAY_HEIGHT / 2 + 1); ScanlineEffect_Clear(); - i = 0; - while (i < 80) + for (i = 0; i < DISPLAY_HEIGHT / 2; i++) { gScanlineEffectRegBuffers[0][i] = 0xF0; gScanlineEffectRegBuffers[1][i] = 0xF0; - i++; } - while (i < 160) + for (; i < DISPLAY_HEIGHT; i++) { gScanlineEffectRegBuffers[0][i] = 0xFF10; gScanlineEffectRegBuffers[1][i] = 0xFF10; - i++; } ScanlineEffect_SetParams(sIntroScanlineParams16Bit); diff --git a/src/battle_message.c b/src/battle_message.c index f02e38f134..f005404ead 100644 --- a/src/battle_message.c +++ b/src/battle_message.c @@ -1323,7 +1323,8 @@ const u8 gText_Draw[] = _("{HIGHLIGHT TRANSPARENT}Draw"); static const u8 sText_SpaceIs[] = _(" is"); static const u8 sText_ApostropheS[] = _("'s"); -// For displaying names of invalid moves +// For displaying names of invalid moves. +// This is large enough that the text for TYPE_ELECTRIC will exceed TEXT_BUFF_ARRAY_COUNT. static const u8 sATypeMove_Table[NUMBER_OF_MON_TYPES][17] = { [TYPE_NORMAL] = _("a NORMAL move"), @@ -1472,7 +1473,7 @@ static const u16 sGrammarMoveUsedTable[] = MOVE_COVET, 0 }; -static const u8 sDummyWeirdStatusString[] = {EOS, EOS, EOS, EOS, EOS, EOS, EOS, EOS, 0, 0}; +static const u8 sText_EmptyStatus[] = _("$$$$$$$"); static const struct BattleWindowText sTextOnWindowsInfo_Normal[] = { @@ -2259,10 +2260,10 @@ static const u8 *TryGetStatusString(u8 *src) u32 chars1, chars2; u8 *statusPtr; - memcpy(status, sDummyWeirdStatusString, 8); + memcpy(status, sText_EmptyStatus, min(ARRAY_COUNT(status), ARRAY_COUNT(sText_EmptyStatus))); statusPtr = status; - for (i = 0; i < 8; i++) + for (i = 0; i < ARRAY_COUNT(status); i++) { if (*src == EOS) break; // one line required to match -g *statusPtr = *src; @@ -2304,11 +2305,16 @@ static const u8 *TryGetStatusString(u8 *src) StringGet_Nickname(text); \ toCpy = text; +// Ensure the defined length for an item name can contain the full defined length of a berry name. +// This ensures that custom Enigma Berry names will fit in the text buffer at the top of BattleStringExpandPlaceholders. +STATIC_ASSERT(BERRY_NAME_LENGTH + ARRAY_COUNT(sText_BerrySuffix) <= ITEM_NAME_LENGTH, BerryNameTooLong); + u32 BattleStringExpandPlaceholders(const u8 *src, u8 *dst) { u32 dstID = 0; // if they used dstID, why not use srcID as well? const u8 *toCpy = NULL; - u8 text[30]; + // This buffer may hold either the name of a trainer, pokemon, or item. + u8 text[max(max(max(32, TRAINER_NAME_LENGTH + 1), POKEMON_NAME_LENGTH + 1), ITEM_NAME_LENGTH)]; u8 multiplayerId; s32 i; @@ -2753,7 +2759,7 @@ static void ExpandBattleTextBuffPlaceholders(const u8 *src, u8 *dst) { u32 srcID = 1; u32 value = 0; - u8 text[12]; + u8 nickname[POKEMON_NAME_LENGTH + 1]; u16 hword; *dst = EOS; @@ -2793,7 +2799,7 @@ static void ExpandBattleTextBuffPlaceholders(const u8 *src, u8 *dst) case B_BUFF_MON_NICK_WITH_PREFIX: // poke nick with prefix if (GetBattlerSide(src[srcID + 1]) == B_SIDE_PLAYER) { - GetMonData(&gPlayerParty[src[srcID + 2]], MON_DATA_NICKNAME, text); + GetMonData(&gPlayerParty[src[srcID + 2]], MON_DATA_NICKNAME, nickname); } else { @@ -2802,10 +2808,10 @@ static void ExpandBattleTextBuffPlaceholders(const u8 *src, u8 *dst) else StringAppend(dst, sText_WildPkmnPrefix); - GetMonData(&gEnemyParty[src[srcID + 2]], MON_DATA_NICKNAME, text); + GetMonData(&gEnemyParty[src[srcID + 2]], MON_DATA_NICKNAME, nickname); } - StringGet_Nickname(text); - StringAppend(dst, text); + StringGet_Nickname(nickname); + StringAppend(dst, nickname); srcID += 3; break; case B_BUFF_STAT: // stats @@ -3025,11 +3031,11 @@ void SetPpNumbersPaletteInMoveSelection(void) u8 var = GetCurrentPpToMaxPpState(chooseMoveStruct->currentPp[gMoveSelectionCursor[gActiveBattler]], chooseMoveStruct->maxPp[gMoveSelectionCursor[gActiveBattler]]); - gPlttBufferUnfaded[92] = palPtr[(var * 2) + 0]; - gPlttBufferUnfaded[91] = palPtr[(var * 2) + 1]; + gPlttBufferUnfaded[BG_PLTT_ID(5) + 12] = palPtr[(var * 2) + 0]; + gPlttBufferUnfaded[BG_PLTT_ID(5) + 11] = palPtr[(var * 2) + 1]; - CpuCopy16(&gPlttBufferUnfaded[92], &gPlttBufferFaded[92], sizeof(u16)); - CpuCopy16(&gPlttBufferUnfaded[91], &gPlttBufferFaded[91], sizeof(u16)); + CpuCopy16(&gPlttBufferUnfaded[BG_PLTT_ID(5) + 12], &gPlttBufferFaded[BG_PLTT_ID(5) + 12], PLTT_SIZEOF(1)); + CpuCopy16(&gPlttBufferUnfaded[BG_PLTT_ID(5) + 11], &gPlttBufferFaded[BG_PLTT_ID(5) + 11], PLTT_SIZEOF(1)); } u8 GetCurrentPpToMaxPpState(u8 currentPp, u8 maxPp) diff --git a/src/battle_palace.c b/src/battle_palace.c index 0fa65200a6..a521acea2b 100644 --- a/src/battle_palace.c +++ b/src/battle_palace.c @@ -181,7 +181,7 @@ static void IncrementPalaceStreak(void) static void SavePalaceChallenge(void) { gSaveBlock2Ptr->frontier.challengeStatus = gSpecialVar_0x8005; - VarSet(VAR_TEMP_0, 0); + VarSet(VAR_TEMP_CHALLENGE_STATUS, 0); gSaveBlock2Ptr->frontier.challengePaused = TRUE; SaveGameFrontier(); } diff --git a/src/battle_pike.c b/src/battle_pike.c index 462ae4f383..acc9eaee4e 100644 --- a/src/battle_pike.c +++ b/src/battle_pike.c @@ -708,7 +708,7 @@ static void ClearInWildMonRoom(void) static void SavePikeChallenge(void) { gSaveBlock2Ptr->frontier.challengeStatus = gSpecialVar_0x8005; - VarSet(VAR_TEMP_0, 0); + VarSet(VAR_TEMP_CHALLENGE_STATUS, 0); gSaveBlock2Ptr->frontier.challengePaused = TRUE; SaveMapView(); TrySavingData(SAVE_LINK); @@ -1267,6 +1267,10 @@ static void TryHealMons(u8 healCount) for (i = 0; i < FRONTIER_PARTY_SIZE; i++) indices[i] = i; + + // Only 'healCount' number of pokemon will be healed. + // The order in which they're (attempted to be) healed is random, + // and determined by performing 10 random swaps to this index array. for (k = 0; k < 10; k++) { u8 temp; @@ -1423,6 +1427,7 @@ static void PrepareTwoTrainers(void) gFacilityTrainers = gBattleFrontierTrainers; do { + // Pick the 1st trainer, making sure it's not one that's been encountered yet in this challenge. trainerId = GetRandomScaledFrontierTrainerId(challengeNum, 1); for (i = 0; i < gSaveBlock2Ptr->frontier.curChallengeBattleNum - 1; i++) { @@ -1438,6 +1443,7 @@ static void PrepareTwoTrainers(void) do { + // Pick the 2nd trainer, making sure it's not one that's been encountered yet in this challenge. trainerId = GetRandomScaledFrontierTrainerId(challengeNum, 1); for (i = 0; i < gSaveBlock2Ptr->frontier.curChallengeBattleNum; i++) { diff --git a/src/battle_pyramid.c b/src/battle_pyramid.c index 84a439037d..e51f804981 100644 --- a/src/battle_pyramid.c +++ b/src/battle_pyramid.c @@ -38,6 +38,8 @@ #include "constants/moves.h" #include "constants/trainers.h" +#define NUM_LAYOUT_OFFSETS 8 + extern const struct MapLayout *const gMapLayouts[]; struct PyramidWildMon @@ -55,7 +57,7 @@ struct PyramidFloorTemplate u8 itemPositions; u8 trainerPositions; u8 runMultiplier; - u8 layoutOffsets[8]; + u8 layoutOffsets[NUM_LAYOUT_OFFSETS]; }; struct PyramidTrainerEncounterMusic @@ -929,7 +931,7 @@ static void SetBattlePyramidData(void) static void SavePyramidChallenge(void) { gSaveBlock2Ptr->frontier.challengeStatus = gSpecialVar_0x8005; - VarSet(VAR_TEMP_0, 0); + VarSet(VAR_TEMP_CHALLENGE_STATUS, 0); gSaveBlock2Ptr->frontier.challengePaused = TRUE; SaveMapView(); TrySavingData(SAVE_LINK); @@ -1185,7 +1187,7 @@ static void Task_SetPyramidFloorPalette(u8 taskId) { if (gPaletteFade.active) { - CpuCopy16(gBattlePyramidFloor_Pal[gSaveBlock2Ptr->frontier.curChallengeBattleNum], &gPlttBufferUnfaded[96], 32); + CpuCopy16(gBattlePyramidFloor_Pal[gSaveBlock2Ptr->frontier.curChallengeBattleNum], &gPlttBufferUnfaded[BG_PLTT_ID(6)], PLTT_SIZE_4BPP); DestroyTask(taskId); } } @@ -1439,7 +1441,7 @@ void PausePyramidChallenge(void) { RestorePyramidPlayerParty(); gSaveBlock2Ptr->frontier.challengeStatus = CHALLENGE_STATUS_PAUSED; - VarSet(VAR_TEMP_E, 0); + VarSet(VAR_TEMP_PLAYING_PYRAMID_MUSIC, 0); LoadPlayerParty(); } } @@ -1902,7 +1904,7 @@ static void GetPyramidFloorLayoutOffsets(u8 *layoutOffsets) for (i = 0; i < NUM_PYRAMID_FLOOR_SQUARES; i++) { - layoutOffsets[i] = sPyramidFloorTemplates[id].layoutOffsets[rand & 0x7]; + layoutOffsets[i] = sPyramidFloorTemplates[id].layoutOffsets[MOD(rand, NUM_LAYOUT_OFFSETS)]; rand >>= 3; if (i == 7) { diff --git a/src/battle_records.c b/src/battle_records.c index 4463a9ebfc..edc48d8202 100644 --- a/src/battle_records.c +++ b/src/battle_records.c @@ -444,7 +444,7 @@ static void LoadTrainerHillRecordsWindowGfx(u8 bgId) { LoadBgTiles(bgId, sTrainerHillWindowTileset, sizeof(sTrainerHillWindowTileset), 0); CopyToBgTilemapBufferRect(bgId, sTrainerHillWindowTilemap, 0, 0, 0x20, 0x20); - LoadPalette(sTrainerHillWindowPalette, BG_PLTT_ID(0), PLTT_SIZE_4BPP); + LoadPalette(sTrainerHillWindowPalette, BG_PLTT_ID(0), sizeof(sTrainerHillWindowPalette)); } static void VblankCB_TrainerHillRecords(void) diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 49bd779c05..bc3e795f59 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -811,11 +811,11 @@ static const u16 sRarePickupItems[] = ITEM_FULL_RESTORE, ITEM_ETHER, ITEM_WHITE_HERB, - ITEM_TM44_REST, + ITEM_TM_REST, ITEM_ELIXIR, - ITEM_TM01_FOCUS_PUNCH, + ITEM_TM_FOCUS_PUNCH, ITEM_LEFTOVERS, - ITEM_TM26_EARTHQUAKE, + ITEM_TM_EARTHQUAKE, }; static const u8 sPickupProbabilities[] = @@ -849,7 +849,7 @@ static const u8 sBallCatchBonuses[] = // In Battle Palace, moves are chosen based on the pokemons nature rather than by the player // Moves are grouped into "Attack", "Defense", or "Support" (see PALACE_MOVE_GROUP_*) // Each nature has a certain percent chance of selecting a move from a particular group -// and a separate percent chance for each group when below 50% HP +// and a separate percent chance for each group when at or below 50% HP // The table below doesn't list percentages for Support because you can subtract the other two // Support percentages are listed in comments off to the side instead #define PALACE_STYLE(atk, def, atkLow, defLow) {atk, atk + def, atkLow, atkLow + defLow} @@ -4117,16 +4117,16 @@ static void Cmd_setgraphicalstatchangevalues(void) switch (GET_STAT_BUFF_VALUE2(gBattleScripting.statChanger)) { case SET_STAT_BUFF_VALUE(1): // +1 - value = STAT_ANIM_PLUS1; + value = STAT_ANIM_PLUS1 + 1; break; case SET_STAT_BUFF_VALUE(2): // +2 - value = STAT_ANIM_PLUS2; + value = STAT_ANIM_PLUS2 + 1; break; case SET_STAT_BUFF_VALUE(1) | STAT_BUFF_NEGATIVE: // -1 - value = STAT_ANIM_MINUS1; + value = STAT_ANIM_MINUS1 + 1; break; case SET_STAT_BUFF_VALUE(2) | STAT_BUFF_NEGATIVE: // -2 - value = STAT_ANIM_MINUS2; + value = STAT_ANIM_MINUS2 + 1; break; } gBattleScripting.animArg1 = GET_STAT_BUFF_ID(gBattleScripting.statChanger) + value - 1; @@ -4148,9 +4148,9 @@ static void Cmd_playstatchangeanimation(void) { s16 startingStatAnimId; if (gBattlescriptCurrInstr[3] & STAT_CHANGE_BY_TWO) - startingStatAnimId = STAT_ANIM_MINUS2 - 1; + startingStatAnimId = STAT_ANIM_MINUS2; else - startingStatAnimId = STAT_ANIM_MINUS1 - 1; + startingStatAnimId = STAT_ANIM_MINUS1; while (statsToCheck != 0) { @@ -4192,9 +4192,9 @@ static void Cmd_playstatchangeanimation(void) { s16 startingStatAnimId; if (gBattlescriptCurrInstr[3] & STAT_CHANGE_BY_TWO) - startingStatAnimId = STAT_ANIM_PLUS2 - 1; + startingStatAnimId = STAT_ANIM_PLUS2; else - startingStatAnimId = STAT_ANIM_PLUS1 - 1; + startingStatAnimId = STAT_ANIM_PLUS1; while (statsToCheck != 0) { @@ -6069,7 +6069,7 @@ static void InitLevelUpBanner(void) gBattle_BG2_Y = 0; gBattle_BG2_X = LEVEL_UP_BANNER_START; - LoadPalette(sLevelUpBanner_Pal, BG_PLTT_ID(6), PLTT_SIZE_4BPP); + LoadPalette(sLevelUpBanner_Pal, BG_PLTT_ID(6), sizeof(sLevelUpBanner_Pal)); CopyToWindowPixelBuffer(B_WIN_LEVEL_UP_BANNER, sLevelUpBanner_Gfx, 0, 0); PutWindowTilemap(B_WIN_LEVEL_UP_BANNER); CopyWindowToVram(B_WIN_LEVEL_UP_BANNER, COPYWIN_FULL); @@ -7406,7 +7406,7 @@ static void Cmd_tryconversiontypechange(void) { do { - while ((moveChecked = Random() & (MAX_MON_MOVES - 1)) >= validMoves); + while ((moveChecked = MOD(Random(), MAX_MON_MOVES)) >= validMoves); moveType = gBattleMoves[gBattleMons[gBattlerAttacker].moves[moveChecked]].type; @@ -7868,9 +7868,18 @@ static void Cmd_metronome(void) { s32 i; + #if MOVES_COUNT < 512 + // Original GF method of move selection is to pick a random + // number between 1-511. 355-511 are not valid moves, so if it + // picks in this range it retries. If MOVES_COUNT exceeds 511 we + // instead use a simpler solution. gCurrentMove = (Random() & 0x1FF) + 1; if (gCurrentMove >= MOVES_COUNT) continue; + #else + // Just pick a valid move value (between 1 and MOVES_COUNT-1) + gCurrentMove = (Random() % (MOVES_COUNT - 1)) + 1; + #endif for (i = 0; i < MAX_MON_MOVES; i++); // ? @@ -8226,7 +8235,7 @@ static void Cmd_trychoosesleeptalkmove(void) } unusableMovesBits = CheckMoveLimitations(gBattlerAttacker, unusableMovesBits, ~MOVE_LIMITATION_PP); - if (unusableMovesBits == (1 << MAX_MON_MOVES) - 1) // all 4 moves cannot be chosen + if (unusableMovesBits == ALL_MOVES_MASK) // all 4 moves cannot be chosen { gBattlescriptCurrInstr += 5; } @@ -8236,7 +8245,7 @@ static void Cmd_trychoosesleeptalkmove(void) do { - movePosition = Random() & (MAX_MON_MOVES - 1); + movePosition = MOD(Random(), MAX_MON_MOVES); } while ((gBitTable[movePosition] & unusableMovesBits)); gCalledMove = gBattleMons[gBattlerAttacker].moves[movePosition]; diff --git a/src/battle_setup.c b/src/battle_setup.c index cc1ad70fed..fc1586a5f2 100644 --- a/src/battle_setup.c +++ b/src/battle_setup.c @@ -407,7 +407,7 @@ static void DoStandardWildBattle(void) gBattleTypeFlags = 0; if (InBattlePyramid()) { - VarSet(VAR_TEMP_E, 0); + VarSet(VAR_TEMP_PLAYING_PYRAMID_MUSIC, 0); gBattleTypeFlags |= BATTLE_TYPE_PYRAMID; } CreateBattleStartTask(GetWildBattleTransition(), 0); @@ -1277,7 +1277,7 @@ void BattleSetup_StartTrainerBattle(void) if (InBattlePyramid()) { - VarSet(VAR_TEMP_E, 0); + VarSet(VAR_TEMP_PLAYING_PYRAMID_MUSIC, 0); gBattleTypeFlags |= BATTLE_TYPE_PYRAMID; if (gNoOfApproachingTrainers == 2) diff --git a/src/battle_tent.c b/src/battle_tent.c index e51ac38a5a..f0f7363f31 100644 --- a/src/battle_tent.c +++ b/src/battle_tent.c @@ -140,7 +140,7 @@ static void BufferVerdanturfTentTrainerIntro(void) static void SaveVerdanturfTentChallenge(void) { gSaveBlock2Ptr->frontier.challengeStatus = gSpecialVar_0x8005; - VarSet(VAR_TEMP_0, 0); + VarSet(VAR_TEMP_CHALLENGE_STATUS, 0); gSaveBlock2Ptr->frontier.challengePaused = TRUE; SaveGameFrontier(); } @@ -190,7 +190,7 @@ static void SetFallarborTentPrize(void) static void SaveFallarborTentChallenge(void) { gSaveBlock2Ptr->frontier.challengeStatus = gSpecialVar_0x8005; - VarSet(VAR_TEMP_0, 0); + VarSet(VAR_TEMP_CHALLENGE_STATUS, 0); gSaveBlock2Ptr->frontier.challengePaused = TRUE; SaveGameFrontier(); } @@ -245,7 +245,7 @@ static void SetSlateportTentPrize(void) static void SaveSlateportTentChallenge(void) { gSaveBlock2Ptr->frontier.challengeStatus = gSpecialVar_0x8005; - VarSet(VAR_TEMP_0, 0); + VarSet(VAR_TEMP_CHALLENGE_STATUS, 0); gSaveBlock2Ptr->frontier.challengePaused = TRUE; SaveGameFrontier(); } diff --git a/src/battle_tower.c b/src/battle_tower.c index 4bbab2deda..03295aadf2 100644 --- a/src/battle_tower.c +++ b/src/battle_tower.c @@ -2200,7 +2200,7 @@ static void SaveTowerChallenge(void) SaveBattleTowerRecord(); gSaveBlock2Ptr->frontier.challengeStatus = gSpecialVar_0x8005; - VarSet(VAR_TEMP_0, 0); + VarSet(VAR_TEMP_CHALLENGE_STATUS, 0); gSaveBlock2Ptr->frontier.challengePaused = TRUE; SaveGameFrontier(); } @@ -3175,7 +3175,7 @@ void CalcApprenticeChecksum(struct Apprentice *apprentice) s32 i; apprentice->checksum = 0; - for (i = 0; i < (sizeof(struct Apprentice) - 4) / 4; i++) + for (i = 0; i < offsetof(struct Apprentice, checksum) / sizeof(u32); i++) apprentice->checksum += ((u32 *)apprentice)[i]; } @@ -3183,7 +3183,7 @@ static void ClearApprentice(struct Apprentice *apprentice) { s32 i; - for (i = 0; i < (sizeof(struct Apprentice)) / 4; i++) + for (i = 0; i < sizeof(struct Apprentice) / sizeof(u32); i++) ((u32 *)apprentice)[i] = 0; ResetApprenticeStruct(apprentice); } @@ -3196,7 +3196,7 @@ static void ValidateApprenticesChecksums(void) { u32 *data = (u32 *) &gSaveBlock2Ptr->apprentices[i]; u32 checksum = 0; - for (j = 0; j < (sizeof(struct Apprentice) - 4) / 4; j++) + for (j = 0; j < offsetof(struct Apprentice, checksum) / sizeof(u32); j++) checksum += data[j]; if (gSaveBlock2Ptr->apprentices[i].checksum != checksum) ClearApprentice(&gSaveBlock2Ptr->apprentices[i]); @@ -3506,7 +3506,7 @@ bool32 ValidateBattleTowerRecord(u8 recordId) // unused u32 *record = (u32 *)(&gSaveBlock2Ptr->frontier.towerRecords[recordId]); u32 checksum = 0; u32 hasData = 0; - for (i = 0; i < (sizeof(struct EmeraldBattleTowerRecord) - 4) / 4; i++) // - 4, because of the last fjeld bejng the checksum jtself. + for (i = 0; i < offsetof(struct EmeraldBattleTowerRecord, checksum) / sizeof(u32); i++) { checksum += record[i]; hasData |= record[i]; diff --git a/src/battle_transition.c b/src/battle_transition.c index 4066f72e58..2e87b9c1d7 100644 --- a/src/battle_transition.c +++ b/src/battle_transition.c @@ -1069,7 +1069,7 @@ static void Task_BattleTransition(u8 taskId) static bool8 Transition_StartIntro(struct Task *task) { SetWeatherScreenFadeOut(); - CpuCopy32(gPlttBufferFaded, gPlttBufferUnfaded, sizeof(gPlttBufferUnfaded)); + CpuCopy32(gPlttBufferFaded, gPlttBufferUnfaded, PLTT_SIZE); if (sTasks_Intro[task->tTransitionId] != NULL) { CreateTask(sTasks_Intro[task->tTransitionId], 4); @@ -4498,7 +4498,7 @@ static bool8 FrontierSquares_Shrink(struct Task *task) switch (task->tShrinkState) { case 0: - for (i = 250; i < 255; i++) + for (i = BG_PLTT_ID(15) + 10; i < BG_PLTT_ID(15) + 15; i++) { gPlttBufferUnfaded[i] = RGB_BLACK; gPlttBufferFaded[i] = RGB_BLACK; diff --git a/src/battle_transition_frontier.c b/src/battle_transition_frontier.c index 2527211296..417bd96d63 100644 --- a/src/battle_transition_frontier.c +++ b/src/battle_transition_frontier.c @@ -46,7 +46,7 @@ static bool8 CirclesSymmetricSpiralInSeq_End(struct Task *task); #define PALTAG_LOGO_CIRCLES 0x2E90 static const u32 sLogoCenter_Gfx[] = INCBIN_U32("graphics/battle_transitions/frontier_logo_center.4bpp.lz"); -static const u32 sLogoCenter_Tilemap[] = INCBIN_U32("graphics/battle_transitions/frontier_logo_center.bin"); +static const u32 sLogoCenter_Tilemap[] = INCBIN_U32("graphics/battle_transitions/frontier_logo_center.bin.lz"); static const u32 sLogoCircles_Gfx[] = INCBIN_U32("graphics/battle_transitions/frontier_logo_circles.4bpp.lz"); static const u16 sLogo_Pal[] = INCBIN_U16("graphics/battle_transitions/frontier_logo_circles.gbapal"); diff --git a/src/battle_util.c b/src/battle_util.c index 68a5b6adaa..f71c825c1b 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -342,7 +342,11 @@ void HandleAction_UseItem(void) gBattleCommunication[MULTISTRING_CHOOSER] = AI_HEAL_CONFUSION; if (*(gBattleStruct->AI_itemFlags + gBattlerAttacker / 2) & (1 << AI_HEAL_CONFUSION)) { - if (*(gBattleStruct->AI_itemFlags + gBattlerAttacker / 2) & 0x3E) + if (*(gBattleStruct->AI_itemFlags + gBattlerAttacker / 2) & ((1 << AI_HEAL_PARALYSIS) + | (1 << AI_HEAL_FREEZE) + | (1 << AI_HEAL_BURN) + | (1 << AI_HEAL_POISON) + | (1 << AI_HEAL_SLEEP))) gBattleCommunication[MULTISTRING_CHOOSER] = AI_HEAL_SLEEP; } else @@ -374,7 +378,7 @@ void HandleAction_UseItem(void) gBattleTextBuff1[2]++; } - gBattleScripting.animArg1 = gBattleTextBuff1[2] + 14; + gBattleScripting.animArg1 = gBattleTextBuff1[2] + STAT_ANIM_PLUS1; gBattleScripting.animArg2 = 0; } break; @@ -1106,7 +1110,6 @@ u8 CheckMoveLimitations(u8 battlerId, u8 unusableMoves, u8 check) return unusableMoves; } -#define ALL_MOVES_MASK ((1 << MAX_MON_MOVES) - 1) bool8 AreAllMovesUnusable(void) { u8 unusable = CheckMoveLimitations(gActiveBattler, 0, MOVE_LIMITATIONS_ALL); @@ -1123,7 +1126,6 @@ bool8 AreAllMovesUnusable(void) return (unusable == ALL_MOVES_MASK); } -#undef ALL_MOVES_MASK u8 GetImprisonedMovesCount(u8 battlerId, u16 move) { @@ -2625,7 +2627,7 @@ u8 AbilityBattleEffects(u8 caseID, u8 battler, u8 ability, u8 special, u16 moveA if (gBattleMons[battler].statStages[STAT_SPEED] < MAX_STAT_STAGE && gDisableStructs[battler].isFirstTurn != 2) { gBattleMons[battler].statStages[STAT_SPEED]++; - gBattleScripting.animArg1 = 14 + STAT_SPEED; + gBattleScripting.animArg1 = STAT_ANIM_PLUS1 + STAT_SPEED; gBattleScripting.animArg2 = 0; BattleScriptPushCursorAndCallback(BattleScript_SpeedBoostActivates); gBattleScripting.battler = battler; @@ -2771,11 +2773,12 @@ u8 AbilityBattleEffects(u8 caseID, u8 battler, u8 ability, u8 special, u16 moveA { do { + // Pick either MOVE_EFFECT_SLEEP, MOVE_EFFECT_POISON or MOVE_EFFECT_BURN gBattleCommunication[MOVE_EFFECT_BYTE] = Random() & 3; } while (gBattleCommunication[MOVE_EFFECT_BYTE] == 0); - + // Replace MOVE_EFFECT_BURN with MOVE_EFFECT_PARALYSIS if (gBattleCommunication[MOVE_EFFECT_BYTE] == MOVE_EFFECT_BURN) - gBattleCommunication[MOVE_EFFECT_BYTE] += 2; // 5 MOVE_EFFECT_PARALYSIS + gBattleCommunication[MOVE_EFFECT_BYTE] += (MOVE_EFFECT_PARALYSIS - MOVE_EFFECT_BURN); gBattleCommunication[MOVE_EFFECT_BYTE] += MOVE_EFFECT_AFFECTS_USER; BattleScriptPushCursor(); @@ -3229,7 +3232,7 @@ enum PREPARE_STAT_BUFFER(gBattleTextBuff1, stat); \ gEffectBattler = battlerId; \ SET_STATCHANGER(stat, 1, FALSE); \ - gBattleScripting.animArg1 = 14 + (stat); \ + gBattleScripting.animArg1 = STAT_ANIM_PLUS1 + (stat); \ gBattleScripting.animArg2 = 0; \ BattleScriptExecute(BattleScript_BerryStatRaiseEnd2); \ effect = ITEM_STATS_CHANGE; \ @@ -3415,7 +3418,7 @@ u8 ItemBattleEffects(u8 caseID, u8 battlerId, bool8 moveTurn) PREPARE_STRING_BUFFER(gBattleTextBuff2, STRINGID_STATROSE); // Only the Attack stat-up berry has this gEffectBattler = battlerId; SET_STATCHANGER(STAT_ATK, 1, FALSE); - gBattleScripting.animArg1 = 14 + STAT_ATK; + gBattleScripting.animArg1 = STAT_ANIM_PLUS1 + STAT_ATK; gBattleScripting.animArg2 = 0; BattleScriptExecute(BattleScript_BerryStatRaiseEnd2); effect = ITEM_STATS_CHANGE; @@ -3470,7 +3473,7 @@ u8 ItemBattleEffects(u8 caseID, u8 battlerId, bool8 moveTurn) gEffectBattler = battlerId; SET_STATCHANGER(i + 1, 2, FALSE); - gBattleScripting.animArg1 = 0x21 + i + 6; + gBattleScripting.animArg1 = STAT_ANIM_PLUS2 + (i + 1); gBattleScripting.animArg2 = 0; BattleScriptExecute(BattleScript_BerryStatRaiseEnd2); effect = ITEM_STATS_CHANGE; @@ -3950,11 +3953,11 @@ u8 IsMonDisobedient(void) if (calc < obedienceLevel) { calc = CheckMoveLimitations(gBattlerAttacker, gBitTable[gCurrMovePos], MOVE_LIMITATIONS_ALL); - if (calc == 0xF) // all moves cannot be used + if (calc == ALL_MOVES_MASK) // all moves cannot be used { // Randomly select, then print a disobedient string // B_MSG_LOAFING, B_MSG_WONT_OBEY, B_MSG_TURNED_AWAY, or B_MSG_PRETEND_NOT_NOTICE - gBattleCommunication[MULTISTRING_CHOOSER] = Random() & (NUM_LOAF_STRINGS - 1); + gBattleCommunication[MULTISTRING_CHOOSER] = MOD(Random(), NUM_LOAF_STRINGS); gBattlescriptCurrInstr = BattleScript_MoveUsedLoafingAround; return 1; } @@ -3962,7 +3965,7 @@ u8 IsMonDisobedient(void) { do { - gCurrMovePos = gChosenMovePos = Random() & (MAX_MON_MOVES - 1); + gCurrMovePos = gChosenMovePos = MOD(Random(), MAX_MON_MOVES); } while (gBitTable[gCurrMovePos] & calc); gCalledMove = gBattleMons[gBattlerAttacker].moves[gCurrMovePos]; @@ -4005,7 +4008,7 @@ u8 IsMonDisobedient(void) { // Randomly select, then print a disobedient string // B_MSG_LOAFING, B_MSG_WONT_OBEY, B_MSG_TURNED_AWAY, or B_MSG_PRETEND_NOT_NOTICE - gBattleCommunication[MULTISTRING_CHOOSER] = Random() & (NUM_LOAF_STRINGS - 1); + gBattleCommunication[MULTISTRING_CHOOSER] = MOD(Random(), NUM_LOAF_STRINGS); gBattlescriptCurrInstr = BattleScript_MoveUsedLoafingAround; return 1; } diff --git a/src/berry_blender.c b/src/berry_blender.c index cf0de017fa..b882fc12d9 100644 --- a/src/berry_blender.c +++ b/src/berry_blender.c @@ -1033,11 +1033,12 @@ static void InitBerryBlenderWindows(void) s32 i; DeactivateAllTextPrinters(); - for (i = 0; i < 5; i++) + // Initialize only the main text windows (player names and message box; excludes results screen) + for (i = 0; i < WIN_RESULTS; i++) FillWindowPixelBuffer(i, PIXEL_FILL(0)); FillBgTilemapBufferRect_Palette0(0, 0, 0, 0, DISPLAY_TILE_WIDTH, DISPLAY_TILE_HEIGHT); - Menu_LoadStdPalAt(0xE0); + Menu_LoadStdPalAt(BG_PLTT_ID(14)); } } @@ -3108,10 +3109,10 @@ static void DrawBlenderCenter(struct BgAffineSrcData *dest) { struct BgAffineSrcData affineSrc; - affineSrc.texX = 0x7800; - affineSrc.texY = 0x5000; - affineSrc.scrX = 0x78 - sBerryBlender->bg_X; - affineSrc.scrY = 0x50 - sBerryBlender->bg_Y; + affineSrc.texX = (DISPLAY_WIDTH / 2) << 8; + affineSrc.texY = (DISPLAY_HEIGHT / 2) << 8; + affineSrc.scrX = DISPLAY_WIDTH / 2 - sBerryBlender->bg_X; + affineSrc.scrY = DISPLAY_HEIGHT / 2 - sBerryBlender->bg_Y; affineSrc.sx = sBerryBlender->centerScale; affineSrc.sy = sBerryBlender->centerScale; affineSrc.alpha = sBerryBlender->arrowPos; diff --git a/src/berry_crush.c b/src/berry_crush.c index 812ca19344..c0a75b1994 100755 --- a/src/berry_crush.c +++ b/src/berry_crush.c @@ -2898,13 +2898,13 @@ static u32 Cmd_FinishGame(struct BerryCrushGame *game, u8 *args) case 0: game->gameState = STATE_FINISHED; PlaySE(SE_M_STRENGTH); - BlendPalettes(PALETTES_ALL, 8, RGB(31, 31, 0)); + BlendPalettes(PALETTES_ALL, 8, RGB_YELLOW); game->gfx.counter = 2; break; case 1: if (--game->gfx.counter != (u8)-1) return 0; - BlendPalettes(PALETTES_ALL, 0, RGB(31, 31, 0)); + BlendPalettes(PALETTES_ALL, 0, RGB_YELLOW); game->gfx.vibrationIdx = 4; game->gfx.counter = 0; game->gfx.numVibrations = sIntroOutroVibrationData[game->gfx.vibrationIdx][0]; @@ -2955,13 +2955,13 @@ static u32 Cmd_HandleTimeUp(struct BerryCrushGame *game, u8 *args) case 0: game->gameState = STATE_TIMES_UP; PlaySE(SE_FAILURE); - BlendPalettes(PALETTES_ALL, 8, RGB(31, 0, 0)); + BlendPalettes(PALETTES_ALL, 8, RGB_RED); game->gfx.counter = 4; break; case 1: if (--game->gfx.counter != (u8)-1) return 0; - BlendPalettes(PALETTES_ALL, 0, RGB(31, 0, 0)); + BlendPalettes(PALETTES_ALL, 0, RGB_RED); game->gfx.counter = 0; break; case 2: diff --git a/src/berry_fix_graphics.c b/src/berry_fix_graphics.c index b37645d4c2..d766c39662 100644 --- a/src/berry_fix_graphics.c +++ b/src/berry_fix_graphics.c @@ -8,9 +8,9 @@ static const struct { const u16 *pltt; } sBerryFixGraphics[] = { { - gBerryFixGameboy_Gfx, - gBerryFixGameboy_Tilemap, - gBerryFixGameboy_Pal + gBerryFixGbaConnect_Gfx, + gBerryFixGbaConnect_Tilemap, + gBerryFixGbaConnect_Pal }, { gBerryFixGameboyLogo_Gfx, gBerryFixGameboyLogo_Tilemap, @@ -43,7 +43,7 @@ static void LoadBerryFixGraphics(u32 idx) REG_BLDCNT = 0; LZ77UnCompVram(sBerryFixGraphics[idx].gfx, (void *)BG_CHAR_ADDR(0)); LZ77UnCompVram(sBerryFixGraphics[idx].tilemap, (void *)BG_SCREEN_ADDR(31)); - CpuCopy16(sBerryFixGraphics[idx].pltt, (void *)PLTT, 0x200); - REG_BG0CNT = 0x1f00; + CpuCopy16(sBerryFixGraphics[idx].pltt, (void *)BG_PLTT, BG_PLTT_SIZE); + REG_BG0CNT = BGCNT_SCREENBASE(31); REG_DISPCNT = DISPCNT_BG0_ON; } diff --git a/src/berry_fix_program.c b/src/berry_fix_program.c index af21bb929a..5900cb298a 100644 --- a/src/berry_fix_program.c +++ b/src/berry_fix_program.c @@ -117,13 +117,7 @@ static const struct WindowTemplate sBerryFixWindowTemplates[] = { DUMMY_WIN_TEMPLATE }; -static const u16 sBerryFixPalColors[] = { - RGB_WHITE, RGB_WHITE, RGB(12, 12, 12), RGB(26, 26, 25), - RGB(28, 1, 1), RGB(31, 23, 14), RGB(4, 19, 1), RGB(18, 30, 18), - RGB(6, 10, 25), RGB(20, 24, 30), RGB_WHITE, RGB(12, 12, 12), - RGB(26, 26, 25), RGB_BLACK, RGB_BLACK, RGB_BLACK -}; - +static const u16 ALIGNED(4) sText_Pal[] = INCBIN_U16("graphics/berry_fix/text.gbapal"); static const u8 sBerryProgramTextColors[] = {TEXT_DYNAMIC_COLOR_1, TEXT_DYNAMIC_COLOR_2, TEXT_DYNAMIC_COLOR_3}; static const u8 sGameTitleTextColors[] = { TEXT_COLOR_TRANSPARENT, TEXT_DYNAMIC_COLOR_1, TEXT_DYNAMIC_COLOR_4}; @@ -152,9 +146,9 @@ static const struct { const u16 *palette; } sBerryFixGraphics[] = { [SCENE_ENSURE_CONNECT] = { - gBerryFixGameboy_Gfx, - gBerryFixGameboy_Tilemap, - gBerryFixGameboy_Pal + gBerryFixGbaConnect_Gfx, + gBerryFixGbaConnect_Tilemap, + gBerryFixGbaConnect_Pal }, [SCENE_TURN_OFF_POWER] = { gBerryFixGameboyLogo_Gfx, @@ -304,7 +298,7 @@ static void BerryFix_GpuSet(void) InitWindows(sBerryFixWindowTemplates); DeactivateAllTextPrinters(); - DmaCopy32(3, sBerryFixPalColors, BG_PLTT + 0x1E0, sizeof(sBerryFixPalColors)); + DmaCopy32(3, sText_Pal, BG_PLTT + PLTT_OFFSET_4BPP(15), sizeof(sText_Pal)); SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_OBJ_1D_MAP); FillWindowPixelBuffer(WIN_GAME_NAMES, PIXEL_FILL(0)); FillWindowPixelBuffer(WIN_TURN_OFF_TITLE, PIXEL_FILL(0)); @@ -374,7 +368,9 @@ static void BerryFix_SetScene(int scene) CopyBgTilemapBufferToVram(0); LZ77UnCompVram(sBerryFixGraphics[scene].gfx, (void *)BG_CHAR_ADDR(1)); LZ77UnCompVram(sBerryFixGraphics[scene].tilemap, (void *)BG_SCREEN_ADDR(31)); - CpuCopy32(sBerryFixGraphics[scene].palette, (void *)BG_PLTT, 0x100); + // These palettes range in size from 32-48 colors, so the below is interpreting whatever + // follows the palette (by default, the corresponding tiles) as the remaining 80-96. + CpuCopy32(sBerryFixGraphics[scene].palette, (void *)BG_PLTT, PLTT_SIZEOF(128)); ShowBg(0); ShowBg(1); } diff --git a/src/berry_tag_screen.c b/src/berry_tag_screen.c index e43d686001..415f22e59e 100644 --- a/src/berry_tag_screen.c +++ b/src/berry_tag_screen.c @@ -310,6 +310,8 @@ static void HandleInitBackgrounds(void) ShowBg(3); } +#define BG_TILE 0x42 + static bool8 LoadBerryTagGfx(void) { u16 i; @@ -333,15 +335,16 @@ static bool8 LoadBerryTagGfx(void) sBerryTag->gfxState++; break; case 3: + // Palette of the bg tiles changes depending on the player's gender if (gSaveBlock2Ptr->playerGender == MALE) { for (i = 0; i < ARRAY_COUNT(sBerryTag->tilemapBuffers[1]); i++) - sBerryTag->tilemapBuffers[1][i] = 0x4042; + sBerryTag->tilemapBuffers[1][i] = (4 << 12) | BG_TILE; } else { for (i = 0; i < ARRAY_COUNT(sBerryTag->tilemapBuffers[1]); i++) - sBerryTag->tilemapBuffers[1][i] = 0x5042; + sBerryTag->tilemapBuffers[1][i] = (5 << 12) | BG_TILE; } sBerryTag->gfxState++; break; @@ -367,7 +370,7 @@ static void HandleInitWindows(void) InitWindows(sWindowTemplates); DeactivateAllTextPrinters(); - LoadPalette(sFontPalette, BG_PLTT_ID(15), PLTT_SIZE_4BPP); + LoadPalette(sFontPalette, BG_PLTT_ID(15), sizeof(sFontPalette)); for (i = 0; i < ARRAY_COUNT(sWindowTemplates) - 1; i++) PutWindowTilemap(i); ScheduleBgCopyTilemapToVram(0); @@ -545,6 +548,9 @@ static void Task_HandleInput(u8 taskId) } } +#define tBerryY data[0] +#define tBgOp data[1] + static void TryChangeDisplayedBerry(u8 taskId, s8 toMove) { s16 *data = gTasks[taskId].data; @@ -553,11 +559,11 @@ static void TryChangeDisplayedBerry(u8 taskId, s8 toMove) if (newPocketPosition < ITEM_TO_BERRY(MAX_BERRY_INDEX) && BagGetItemIdByPocketPosition(POCKET_BERRIES, newPocketPosition) != ITEM_NONE) { if (toMove < 0) - data[1] = 2; + tBgOp = BG_COORD_SUB; else - data[1] = 1; + tBgOp = BG_COORD_ADD; - data[0] = 0; + tBerryY = 0; PlaySE(SE_SELECT); HandleBagCursorPositionChange(toMove); gTasks[taskId].func = Task_DisplayAnotherBerry; @@ -586,101 +592,103 @@ static void HandleBagCursorPositionChange(s8 toMove) sBerryTag->berryId = ItemIdToBerryType(BagGetItemIdByPocketPosition(POCKET_BERRIES, *scrollPos + *cursorPos)); } +#define DISPLAY_SPEED 16 + static void Task_DisplayAnotherBerry(u8 taskId) { u16 i; - s16 posY; + s16 y; s16 *data = gTasks[taskId].data; - data[0] += 0x10; - data[0] &= 0xFF; + tBerryY += DISPLAY_SPEED; + tBerryY &= 0xFF; - if (data[1] == 1) + if (tBgOp == BG_COORD_ADD) { - switch (data[0]) + switch (tBerryY) { - case 0x30: + case 3 * DISPLAY_SPEED: FillWindowPixelBuffer(WIN_BERRY_NAME, PIXEL_FILL(0)); break; - case 0x40: + case 4 * DISPLAY_SPEED: PrintBerryNumberAndName(); break; - case 0x50: + case 5 * DISPLAY_SPEED: DestroyBerrySprite(); CreateBerrySprite(); break; - case 0x60: + case 6 * DISPLAY_SPEED: FillWindowPixelBuffer(WIN_SIZE_FIRM, PIXEL_FILL(0)); break; - case 0x70: + case 7 * DISPLAY_SPEED: PrintBerrySize(); break; - case 0x80: + case 8 * DISPLAY_SPEED: PrintBerryFirmness(); break; - case 0x90: + case 9 * DISPLAY_SPEED: SetFlavorCirclesVisiblity(); break; - case 0xA0: + case 10 * DISPLAY_SPEED: FillWindowPixelBuffer(WIN_DESC, PIXEL_FILL(0)); break; - case 0xB0: + case 11 * DISPLAY_SPEED: PrintBerryDescription1(); break; - case 0xC0: + case 12 * DISPLAY_SPEED: PrintBerryDescription2(); break; } } - else + else // BG_COORD_SUB { - switch (data[0]) + switch (tBerryY) { - case 0x30: + case 3 * DISPLAY_SPEED: FillWindowPixelBuffer(WIN_DESC, PIXEL_FILL(0)); break; - case 0x40: + case 4 * DISPLAY_SPEED: PrintBerryDescription2(); break; - case 0x50: + case 5 * DISPLAY_SPEED: PrintBerryDescription1(); break; - case 0x60: + case 6 * DISPLAY_SPEED: SetFlavorCirclesVisiblity(); break; - case 0x70: + case 7 * DISPLAY_SPEED: FillWindowPixelBuffer(WIN_SIZE_FIRM, PIXEL_FILL(0)); break; - case 0x80: + case 8 * DISPLAY_SPEED: PrintBerryFirmness(); break; - case 0x90: + case 9 * DISPLAY_SPEED: PrintBerrySize(); break; - case 0xA0: + case 10 * DISPLAY_SPEED: DestroyBerrySprite(); CreateBerrySprite(); break; - case 0xB0: + case 11 * DISPLAY_SPEED: FillWindowPixelBuffer(WIN_BERRY_NAME, PIXEL_FILL(0)); break; - case 0xC0: + case 12 * DISPLAY_SPEED: PrintBerryNumberAndName(); break; } } - if (data[1] == 1) - posY = -data[0]; + if (tBgOp == BG_COORD_ADD) + y = -tBerryY; else - posY = data[0]; + y = tBerryY; - gSprites[sBerryTag->berrySpriteId].y2 = posY; + gSprites[sBerryTag->berrySpriteId].y2 = y; for (i = 0; i < FLAVOR_COUNT; i++) - gSprites[sBerryTag->flavorCircleIds[i]].y2 = posY; + gSprites[sBerryTag->flavorCircleIds[i]].y2 = y; - ChangeBgY(1, 0x1000, data[1]); - ChangeBgY(2, 0x1000, data[1]); + ChangeBgY(1, 0x1000, tBgOp); + ChangeBgY(2, 0x1000, tBgOp); - if (data[0] == 0) + if (tBerryY == 0) gTasks[taskId].func = Task_HandleInput; } diff --git a/src/braille_puzzles.c b/src/braille_puzzles.c index 01d3e82bbd..ae3ecb15ac 100644 --- a/src/braille_puzzles.c +++ b/src/braille_puzzles.c @@ -281,6 +281,8 @@ bool8 FldEff_UsePuzzleEffect(void) return FALSE; } +// The puzzle to unlock Regice's cave requires the player to interact with the braille message on the back wall, +// step on every space on the perimeter of the cave (and only those spaces) then return to the back wall. bool8 ShouldDoBrailleRegicePuzzle(void) { u8 i; @@ -290,9 +292,11 @@ bool8 ShouldDoBrailleRegicePuzzle(void) { if (FlagGet(FLAG_SYS_BRAILLE_REGICE_COMPLETED)) return FALSE; - if (FlagGet(FLAG_TEMP_2) == FALSE) + // Set when the player interacts with the braille message + if (FlagGet(FLAG_TEMP_REGICE_PUZZLE_STARTED) == FALSE) return FALSE; - if (FlagGet(FLAG_TEMP_3) == TRUE) + // Cleared when the player interacts with the braille message + if (FlagGet(FLAG_TEMP_REGICE_PUZZLE_FAILED) == TRUE) return FALSE; for (i = 0; i < ARRAY_COUNT(sRegicePathCoords); i++) @@ -301,8 +305,7 @@ bool8 ShouldDoBrailleRegicePuzzle(void) u8 yPos = sRegicePathCoords[i][1]; if (gSaveBlock1Ptr->pos.x == xPos && gSaveBlock1Ptr->pos.y == yPos) { - u16 varValue; - + // Player is standing on a correct space, set the corresponding bit if (i < 16) { u16 val = VarGet(VAR_REGICE_STEPS_1); @@ -322,11 +325,11 @@ bool8 ShouldDoBrailleRegicePuzzle(void) VarSet(VAR_REGICE_STEPS_3, val); } - varValue = VarGet(VAR_REGICE_STEPS_1); - if (varValue != 0xFFFF || VarGet(VAR_REGICE_STEPS_2) != 0xFFFF || VarGet(VAR_REGICE_STEPS_3) != 0xF) + // Make sure a full lap has been completed. There are 36 steps in a lap, so 16+16+4 bits to check across the 3 vars. + if (VarGet(VAR_REGICE_STEPS_1) != 0xFFFF || VarGet(VAR_REGICE_STEPS_2) != 0xFFFF || VarGet(VAR_REGICE_STEPS_3) != 0xF) return FALSE; - // This final check is redundant. + // A lap has been completed, the puzzle is complete when the player returns to the braille message. if (gSaveBlock1Ptr->pos.x == 8 && gSaveBlock1Ptr->pos.y == 21) return TRUE; else @@ -334,8 +337,9 @@ bool8 ShouldDoBrailleRegicePuzzle(void) } } - FlagSet(FLAG_TEMP_3); - FlagClear(FLAG_TEMP_2); + // Player stepped on an incorrect space, puzzle failed. + FlagSet(FLAG_TEMP_REGICE_PUZZLE_FAILED); + FlagClear(FLAG_TEMP_REGICE_PUZZLE_STARTED); } return FALSE; diff --git a/src/cable_car.c b/src/cable_car.c index 28cb316807..347f4e87e8 100644 --- a/src/cable_car.c +++ b/src/cable_car.c @@ -237,7 +237,7 @@ void CableCar(void) { LockPlayerFieldControls(); CreateTask(Task_LoadCableCar, 1); - BeginNormalPaletteFade(PALETTES_ALL, 0, 0, 16, RGB(0, 0, 0)); + BeginNormalPaletteFade(PALETTES_ALL, 0, 0, 16, RGB_BLACK); } static void CB2_LoadCableCar(void) @@ -341,7 +341,7 @@ static void CB2_LoadCableCar(void) gMain.state++; break; case 8: - BeginNormalPaletteFade(PALETTES_ALL, 3, 16, 0, RGB(0, 0, 0)); + BeginNormalPaletteFade(PALETTES_ALL, 3, 16, 0, RGB_BLACK); FadeInNewBGM(MUS_CABLE_CAR, 1); SetBgRegs(TRUE); gMain.state++; @@ -459,7 +459,7 @@ static void Task_CableCar(u8 taskId) if (sCableCar->timer == 570) { sCableCar->state = 3; - BeginNormalPaletteFade(PALETTES_ALL, 3, 0, 16, RGB(0, 0, 0)); + BeginNormalPaletteFade(PALETTES_ALL, 3, 0, 16, RGB_BLACK); FadeOutBGM(4); } break; diff --git a/src/cable_club.c b/src/cable_club.c index 913a1b7287..b12a50920f 100644 --- a/src/cable_club.c +++ b/src/cable_club.c @@ -725,7 +725,7 @@ void TryContestEModeLinkup(void) u8 CreateTask_ReestablishCableClubLink(void) { if (FuncIsActiveTask(Task_ReestablishLink) != FALSE) - return 0xFF; + return TASK_NONE; switch (gSpecialVar_0x8004) { diff --git a/src/contest.c b/src/contest.c index 8a1847f111..09c07536f1 100644 --- a/src/contest.c +++ b/src/contest.c @@ -1076,10 +1076,10 @@ static void LoadContestPalettes(void) { s32 i; - LoadPalette(sText_Pal, BG_PLTT_ID(15), PLTT_SIZE_4BPP); + LoadPalette(sText_Pal, BG_PLTT_ID(15), sizeof(sText_Pal)); SetBackdropFromColor(RGB_BLACK); for (i = 10; i < 14; i++) - LoadPalette(gPlttBufferUnfaded + BG_PLTT_ID(15) + 1, BG_PLTT_ID(15) + i, PLTT_SIZEOF(1)); + LoadPalette(&gPlttBufferUnfaded[BG_PLTT_ID(15) + 1], BG_PLTT_ID(15) + i, PLTT_SIZEOF(1)); FillPalette(RGB(31, 17, 31), BG_PLTT_ID(15) + 3, PLTT_SIZEOF(1)); } @@ -1112,10 +1112,10 @@ static void InitContestResources(void) for (i = 0; i < CONTESTANT_COUNT; i++) { - eContestantStatus[i].nextTurnOrder = 0xFF; + eContestantStatus[i].nextTurnOrder = CONTESTANT_NONE; eContest.prevTurnOrder[i] = gContestantTurnOrder[i]; } - // Calling this here while all the nextTurnOrder values are 0xFF will actually + // Calling this here while all the nextTurnOrder values are CONTESTANT_NONE will actually // just reverse the turn order. ApplyNextTurnOrder(); memset(gContestResources->tv, 0, sizeof(*gContestResources->tv) * CONTESTANT_COUNT); @@ -1301,8 +1301,8 @@ static void Task_ReadyStartLinkContest(u8 taskId) static bool8 SetupContestGraphics(u8 *stateVar) { - u16 tempPalette1[16]; - u16 tempPalette2[16]; + u16 ALIGNED(4) tempPalette1[16]; + u16 ALIGNED(4) tempPalette2[16]; switch (*stateVar) { @@ -1331,10 +1331,10 @@ static bool8 SetupContestGraphics(u8 *stateVar) break; case 5: LoadCompressedPalette(gContestInterfaceAudiencePalette, BG_PLTT_OFFSET, BG_PLTT_SIZE); - CpuCopy32(gPlttBufferUnfaded + BG_PLTT_ID(8), tempPalette1, PLTT_SIZE_4BPP); - CpuCopy32(gPlttBufferUnfaded + BG_PLTT_ID(5 + gContestPlayerMonIndex), tempPalette2, PLTT_SIZE_4BPP); - CpuCopy32(tempPalette2, gPlttBufferUnfaded + BG_PLTT_ID(8), PLTT_SIZE_4BPP); - CpuCopy32(tempPalette1, gPlttBufferUnfaded + BG_PLTT_ID(5 + gContestPlayerMonIndex), PLTT_SIZE_4BPP); + CpuCopy32(&gPlttBufferUnfaded[BG_PLTT_ID(8)], tempPalette1, PLTT_SIZE_4BPP); + CpuCopy32(&gPlttBufferUnfaded[BG_PLTT_ID(5 + gContestPlayerMonIndex)], tempPalette2, PLTT_SIZE_4BPP); + CpuCopy32(tempPalette2, &gPlttBufferUnfaded[BG_PLTT_ID(8)], PLTT_SIZE_4BPP); + CpuCopy32(tempPalette1, &gPlttBufferUnfaded[BG_PLTT_ID(5 + gContestPlayerMonIndex)], PLTT_SIZE_4BPP); DmaCopy32Defvars(3, gPlttBufferUnfaded, eContestTempSave.cachedWindowPalettes, sizeof(eContestTempSave.cachedWindowPalettes)); LoadContestPalettes(); break; @@ -1475,7 +1475,7 @@ static void Task_DisplayAppealNumberText(u8 taskId) gBattle_BG0_Y = 0; gBattle_BG2_Y = 0; ContestDebugDoPrint(); - DmaCopy32Defvars(3, gPlttBufferUnfaded, eContestTempSave.cachedPlttBufferUnfaded, PLTT_BUFFER_SIZE * 2); + DmaCopy32Defvars(3, gPlttBufferUnfaded, eContestTempSave.cachedPlttBufferUnfaded, PLTT_SIZE); ConvertIntToDecimalStringN(gStringVar1, eContest.appealNumber + 1, STR_CONV_MODE_LEFT_ALIGN, 1); if (!Contest_IsMonsTurnDisabled(gContestPlayerMonIndex)) StringCopy(gDisplayedStringBattle, gText_AppealNumWhichMoveWillBePlayed); @@ -1674,8 +1674,8 @@ static void Task_HideMoveSelectScreen(u8 taskId) } Contest_SetBgCopyFlags(0); // This seems to be a bug; it should have just copied PLTT_BUFFER_SIZE. - DmaCopy32Defvars(3, gPlttBufferFaded, eContestTempSave.cachedPlttBufferFaded, PLTT_BUFFER_SIZE * 2); - LoadPalette(eContestTempSave.cachedPlttBufferUnfaded, 0, PLTT_BUFFER_SIZE * 2); + DmaCopy32Defvars(3, gPlttBufferFaded, eContestTempSave.cachedPlttBufferFaded, PLTT_SIZE); + LoadPalette(eContestTempSave.cachedPlttBufferUnfaded, 0, PLTT_SIZE); gTasks[taskId].data[0] = 0; gTasks[taskId].data[1] = 0; gTasks[taskId].func = Task_HideApplauseMeterForAppealStart; @@ -2561,7 +2561,7 @@ static void Task_WaitForHeartSliders(u8 taskId) static void Task_RestorePlttBufferUnfaded(u8 taskId) { - DmaCopy32Defvars(3, eContestTempSave.cachedPlttBufferUnfaded, gPlttBufferUnfaded, PLTT_BUFFER_SIZE * 2); + DmaCopy32Defvars(3, eContestTempSave.cachedPlttBufferUnfaded, gPlttBufferUnfaded, PLTT_SIZE); gTasks[taskId].data[0] = 0; gTasks[taskId].data[1] = 2; gTasks[taskId].func = Task_WaitPrintRoundResult; @@ -2775,7 +2775,7 @@ static bool8 IsPlayerLinkLeader(void) void CreateContestMonFromParty(u8 partyIndex) { - u8 name[20]; + u8 name[max(PLAYER_NAME_LENGTH + 1, POKEMON_NAME_BUFFER_SIZE)]; u16 heldItem; s16 cool; s16 beauty; @@ -2785,10 +2785,8 @@ void CreateContestMonFromParty(u8 partyIndex) StringCopy(name, gSaveBlock2Ptr->playerName); if (gLinkContestFlags & LINK_CONTEST_FLAG_IS_LINK) - { StripPlayerNameForLinkContest(name); - } - memcpy(gContestMons[gContestPlayerMonIndex].trainerName, name, 8); + memcpy(gContestMons[gContestPlayerMonIndex].trainerName, name, PLAYER_NAME_LENGTH + 1); if (gSaveBlock2Ptr->playerGender == MALE) gContestMons[gContestPlayerMonIndex].trainerGfxId = OBJ_EVENT_GFX_LINK_BRENDAN; else @@ -2891,7 +2889,7 @@ void SetContestants(u8 contestType, u8 rank) opponents[opponentsCount++] = i; } } - opponents[opponentsCount] = 0xFF; + opponents[opponentsCount] = CONTESTANT_NONE; // Choose three random opponents from the list for (i = 0; i < CONTESTANT_COUNT - 1; i++) @@ -2900,7 +2898,7 @@ void SetContestants(u8 contestType, u8 rank) s32 j; gContestMons[i] = gContestOpponents[opponents[rnd]]; - for (j = rnd; opponents[j] != 0xFF; j++) + for (j = rnd; opponents[j] != CONTESTANT_NONE; j++) opponents[j] = opponents[j + 1]; opponentsCount--; } @@ -2940,7 +2938,7 @@ void SetLinkAIContestants(u8 contestType, u8 rank, bool32 isPostgame) || (contestType == CONTEST_CATEGORY_TOUGH && gContestOpponents[i].aiPool_Tough)) opponents[opponentsCount++] = i; } - opponents[opponentsCount] = 0xFF; + opponents[opponentsCount] = CONTESTANT_NONE; // Fill remaining contestant slots with random AI opponents from the list for (i = 0; i < CONTESTANT_COUNT - gNumLinkContestPlayers; i++) @@ -2950,7 +2948,7 @@ void SetLinkAIContestants(u8 contestType, u8 rank, bool32 isPostgame) gContestMons[gNumLinkContestPlayers + i] = gContestOpponents[opponents[rnd]]; StripPlayerNameForLinkContest(gContestMons[gNumLinkContestPlayers + i].trainerName); StripMonNameForLinkContest(gContestMons[gNumLinkContestPlayers + i].nickname, GAME_LANGUAGE); - for (j = rnd; opponents[j] != 0xFF; j++) + for (j = rnd; opponents[j] != CONTESTANT_NONE; j++) opponents[j] = opponents[j + 1]; opponentsCount--; } @@ -4068,14 +4066,14 @@ static void UpdateBlendTaskContestantData(u8 contestant) palOffset1 = contestant + 5; DmaCopy16Defvars(3, - gPlttBufferUnfaded + palOffset1 * 16 + 10, - gPlttBufferFaded + palOffset1 * 16 + 10, - 2); - palOffset2 = (contestant + 5) * 16 + 12 + contestant; + &gPlttBufferUnfaded[PLTT_ID(palOffset1) + 10], + &gPlttBufferFaded[PLTT_ID(palOffset1) + 10], + PLTT_SIZEOF(1)); + palOffset2 = PLTT_ID(contestant + 5) + 12 + contestant; DmaCopy16Defvars(3, - gPlttBufferUnfaded + palOffset2, - gPlttBufferFaded + palOffset2, - 2); + &gPlttBufferUnfaded[palOffset2], + &gPlttBufferFaded[palOffset2], + PLTT_SIZEOF(1)); } // See comments on CreateUnusedBlendTask @@ -4370,7 +4368,7 @@ void SortContestants(bool8 useRanking) // Note that ranking is calculated so that shared places still take up a ranking // space. A ranking like [1, 2, 2, 3] is not possible; it would be [1, 2, 2, 4] // instead. - memset(scratch, 0xFF, sizeof(scratch)); + memset(scratch, CONTESTANT_NONE, sizeof(scratch)); for (i = 0; i < CONTESTANT_COUNT; i++) { u8 j = eContestantStatus[i].ranking; @@ -4378,7 +4376,7 @@ void SortContestants(bool8 useRanking) while (1) { u8 *ptr = &scratch[j]; - if (*ptr == 0xFF) + if (*ptr == CONTESTANT_NONE) { *ptr = i; gContestantTurnOrder[i] = j; @@ -4636,7 +4634,7 @@ static void ApplyNextTurnOrder(void) // First, look for the first unassigned contestant. for (j = 0; j < CONTESTANT_COUNT; j++) { - if (!isContestantOrdered[j] && eContestantStatus[j].nextTurnOrder == 0xFF) + if (!isContestantOrdered[j] && eContestantStatus[j].nextTurnOrder == CONTESTANT_NONE) { nextContestant = j; j++; @@ -4647,7 +4645,7 @@ static void ApplyNextTurnOrder(void) // Then, look for a better candidate, with a higher turn order. for (; j < CONTESTANT_COUNT; j++) { - if (!isContestantOrdered[j] && eContestantStatus[j].nextTurnOrder == 0xFF + if (!isContestantOrdered[j] && eContestantStatus[j].nextTurnOrder == CONTESTANT_NONE && gContestantTurnOrder[nextContestant] > gContestantTurnOrder[j]) nextContestant = j; } @@ -4661,7 +4659,7 @@ static void ApplyNextTurnOrder(void) for (i = 0; i < CONTESTANT_COUNT; i++) { eContestAppealResults.turnOrder[i] = newTurnOrder[i]; - eContestantStatus[i].nextTurnOrder = 0xFF; + eContestantStatus[i].nextTurnOrder = CONTESTANT_NONE; eContestantStatus[i].turnOrderMod = 0; gContestantTurnOrder[i] = newTurnOrder[i]; } @@ -6020,8 +6018,10 @@ static u8 GetMonNicknameLanguage(u8 *nickname) if (nickname[0] == EXT_CTRL_CODE_BEGIN && nickname[1] == EXT_CTRL_CODE_JPN) return GAME_LANGUAGE; - if (StringLength(nickname) < PLAYER_NAME_LENGTH - 1) + if (StringLength(nickname) <= 5) { + // Name is short enough that it might be Japanese. + // Make sure all the character values are valid latin name characters. while (*nickname != EOS) { if ((*nickname >= CHAR_A && *nickname <= CHAR_z) @@ -6039,12 +6039,18 @@ static u8 GetMonNicknameLanguage(u8 *nickname) || *nickname == CHAR_DBL_QUOTE_LEFT || *nickname == CHAR_DBL_QUOTE_RIGHT || *nickname == CHAR_SGL_QUOTE_LEFT - || *nickname == CHAR_DBL_QUOTE_LEFT) // Most likely a typo, CHAR_SGL_QUOTE_RIGHT should be here instead. +#ifdef BUGFIX + || *nickname == CHAR_SGL_QUOTE_RIGHT +#else + || *nickname == CHAR_DBL_QUOTE_LEFT // Most likely a typo, CHAR_SGL_QUOTE_RIGHT should be here instead. +#endif + ) { nickname++; } else { + // Invalid latin name character, assume the name was Japanese. ret = LANGUAGE_JAPANESE; break; } @@ -6101,7 +6107,7 @@ void StripPlayerAndMonNamesForLinkContest(struct ContestPokemon *mon, s32 langua name = mon->trainerName; if (language == LANGUAGE_JAPANESE) { - name[PLAYER_NAME_LENGTH] = EOS; + name[7] = EOS; name[6] = name[4]; name[5] = name[3]; name[4] = name[2]; diff --git a/src/contest_ai.c b/src/contest_ai.c index 7aeba828a6..a4bb5b4549 100644 --- a/src/contest_ai.c +++ b/src/contest_ai.c @@ -6,6 +6,8 @@ #include "contest_effect.h" #include "constants/moves.h" +#define AI_ACTION_DONE (1 << 0) + extern const u8 *gAIScriptPtr; extern const u8 *gContestAI_ScriptsTable[]; @@ -324,7 +326,7 @@ u8 ContestAI_GetActionToUse(void) { // Randomly choose a move index. If it's the move // with the highest (or tied highest) score, return - u8 moveIdx = Random() & (MAX_MON_MOVES - 1); // % MAX_MON_MOVES doesn't match + u8 moveIdx = MOD(Random(), MAX_MON_MOVES); u8 score = eContestAI.moveScores[moveIdx]; int i; for (i = 0; i < MAX_MON_MOVES; i++) @@ -362,9 +364,9 @@ static void ContestAI_DoAIProcessing(void) else { eContestAI.moveScores[eContestAI.nextMoveIndex] = 0; // don't consider a move that doesn't exist. - eContestAI.aiAction |= 1; + eContestAI.aiAction |= AI_ACTION_DONE; } - if (eContestAI.aiAction & 1) + if (eContestAI.aiAction & AI_ACTION_DONE) { eContestAI.nextMoveIndex++; if (eContestAI.nextMoveIndex < MAX_MON_MOVES) @@ -372,7 +374,7 @@ static void ContestAI_DoAIProcessing(void) else // aiState = CONTESTAI_FINISHED eContestAI.aiState++; - eContestAI.aiAction &= 0xFE; // TODO: Define action flags + eContestAI.aiAction &= ~AI_ACTION_DONE; } break; } @@ -1667,7 +1669,7 @@ static void ContestAICmd_call(void) static void ContestAICmd_end(void) { if (!AIStackPop()) - eContestAI.aiAction |= 1; + eContestAI.aiAction |= AI_ACTION_DONE; } static void AIStackPushVar(const u8 *ptr) diff --git a/src/contest_effect.c b/src/contest_effect.c index 864805a54f..b927943036 100644 --- a/src/contest_effect.c +++ b/src/contest_effect.c @@ -147,7 +147,7 @@ static void ContestEffect_StartleFrontMon(void) break; } eContestAppealResults.jamQueue[0] = i; - eContestAppealResults.jamQueue[1] = 0xFF; + eContestAppealResults.jamQueue[1] = CONTESTANT_NONE; idx = WasAtLeastOneOpponentJammed(); } if (idx == 0) @@ -171,7 +171,7 @@ static void ContestEffect_StartlePrevMons(void) eContestAppealResults.jamQueue[j++] = i; } - eContestAppealResults.jamQueue[j] = 0xFF; + eContestAppealResults.jamQueue[j] = CONTESTANT_NONE; idx = WasAtLeastOneOpponentJammed(); } if (idx == 0) @@ -214,7 +214,7 @@ static void ContestEffect_StartlePrevMons2(void) u8 rval, jam; eContestAppealResults.jamQueue[0] = i; - eContestAppealResults.jamQueue[1] = 0xFF; + eContestAppealResults.jamQueue[1] = CONTESTANT_NONE; rval = Random() % 10; if (rval == 0) @@ -291,7 +291,7 @@ static void ContestEffect_StartleMonWithJudgesAttention(void) else eContestAppealResults.jam = 10; eContestAppealResults.jamQueue[0] = i; - eContestAppealResults.jamQueue[1] = 0xFF; + eContestAppealResults.jamQueue[1] = CONTESTANT_NONE; if (WasAtLeastOneOpponentJammed()) numStartled++; } @@ -396,7 +396,7 @@ static void ContestEffect_MakeFollowingMonsNervous(void) s16 oddsMod[CONTESTANT_COUNT]; s16 odds[CONTESTANT_COUNT]; - memset(contestantIds, 0xFF, ARRAY_COUNT(contestantIds)); + memset(contestantIds, CONTESTANT_NONE, ARRAY_COUNT(contestantIds)); for (i = 0, numAfter = 0; i < CONTESTANT_COUNT; i++) { if (eContestAppealResults.turnOrder[eContestAppealResults.contestant] < eContestAppealResults.turnOrder[i] && @@ -434,7 +434,7 @@ static void ContestEffect_MakeFollowingMonsNervous(void) } if (odds[0] != 0) { - for (i = 0; contestantIds[i] != 0xFF; i++) + for (i = 0; contestantIds[i] != CONTESTANT_NONE; i++) { if (Random() % 100 < odds[i] + oddsMod[contestantIds[i]]) { @@ -507,7 +507,7 @@ static void ContestEffect_BadlyStartlesMonsInGoodCondition(void) else eContestAppealResults.jam = 10; eContestAppealResults.jamQueue[0] = i; - eContestAppealResults.jamQueue[1] = 0xFF; + eContestAppealResults.jamQueue[1] = CONTESTANT_NONE; if (WasAtLeastOneOpponentJammed()) numHit++; } @@ -758,7 +758,7 @@ static void ContestEffect_NextAppealEarlier(void) for (i = 0; i < CONTESTANT_COUNT; i++) turnOrder[i] = eContestantStatus[i].nextTurnOrder; - turnOrder[eContestAppealResults.contestant] = 0xFF; + turnOrder[eContestAppealResults.contestant] = CONTESTANT_NONE; for (i = 0; i < CONTESTANT_COUNT; i++) { @@ -800,7 +800,7 @@ static void ContestEffect_NextAppealLater(void) for (i = 0; i < CONTESTANT_COUNT; i++) turnOrder[i] = eContestantStatus[i].nextTurnOrder; - turnOrder[eContestAppealResults.contestant] = 0xFF; + turnOrder[eContestAppealResults.contestant] = CONTESTANT_NONE; for (i = CONTESTANT_COUNT - 1; i > -1; i--) { @@ -858,12 +858,12 @@ static void ContestEffect_ScrambleNextTurnOrder(void) for (j = 0; j < CONTESTANT_COUNT; j++) { - if (unselectedContestants[j] != 0xFF) + if (unselectedContestants[j] != CONTESTANT_NONE) { if (rval == 0) { turnOrder[j] = i; - unselectedContestants[j] = 0xFF; + unselectedContestants[j] = CONTESTANT_NONE; break; } else @@ -909,7 +909,7 @@ static void ContestEffect_BadlyStartleMonsWithGoodAppeals(void) else eContestAppealResults.jam = 10; eContestAppealResults.jamQueue[0] = i; - eContestAppealResults.jamQueue[1] = 0xFF; + eContestAppealResults.jamQueue[1] = CONTESTANT_NONE; if (WasAtLeastOneOpponentJammed()) numJammed++; } @@ -977,7 +977,7 @@ static void JamByMoveCategory(u8 category) else eContestAppealResults.jam = 10; eContestAppealResults.jamQueue[0] = i; - eContestAppealResults.jamQueue[1] = 0xFF; + eContestAppealResults.jamQueue[1] = CONTESTANT_NONE; if (WasAtLeastOneOpponentJammed()) numJammed++; } @@ -1016,7 +1016,7 @@ static bool8 WasAtLeastOneOpponentJammed(void) s16 jamBuffer[CONTESTANT_COUNT] = {0}; int i; - for (i = 0; eContestAppealResults.jamQueue[i] != 0xFF; i++) + for (i = 0; eContestAppealResults.jamQueue[i] != CONTESTANT_NONE; i++) { u8 contestant = eContestAppealResults.jamQueue[i]; if (CanUnnerveContestant(contestant)) diff --git a/src/contest_painting.c b/src/contest_painting.c index a1a8a51975..30ca51c966 100644 --- a/src/contest_painting.c +++ b/src/contest_painting.c @@ -248,7 +248,7 @@ static void HoldContestPainting(void) if ((JOY_NEW(A_BUTTON)) || (JOY_NEW(B_BUTTON))) { sHoldState++; - BeginNormalPaletteFade(PALETTES_ALL, 0, 0, 16, RGB(0, 0, 0)); + BeginNormalPaletteFade(PALETTES_ALL, 0, 0, 16, RGB_BLACK); } if (sVarsInitialized) diff --git a/src/contest_util.c b/src/contest_util.c index 859ff1a007..eaa53582cc 100644 --- a/src/contest_util.c +++ b/src/contest_util.c @@ -456,7 +456,7 @@ static void LoadContestResultsBgGfx(void) CopyToBgTilemapBuffer(2, gContestResults_Interface_Tilemap, 0, 0); CopyToBgTilemapBuffer(0, gContestResults_WinnerBanner_Tilemap, 0, 0); LoadContestResultsTitleBarTilemaps(); - LoadCompressedPalette(gContestResults_Pal, BG_PLTT_ID(0), 16 * PLTT_SIZE_4BPP); + LoadCompressedPalette(gContestResults_Pal, BG_PLTT_OFFSET, BG_PLTT_SIZE); LoadPalette(sResultsTextWindow_Pal, BG_PLTT_ID(15), sizeof(sResultsTextWindow_Pal)); for (i = 0; i < CONTESTANT_COUNT; i++) @@ -2011,7 +2011,7 @@ void GiveMonContestRibbon(void) { case CONTEST_CATEGORY_COOL: ribbonData = GetMonData(&gPlayerParty[gContestMonPartyIndex], MON_DATA_COOL_RIBBON); - if (ribbonData <= gSpecialVar_ContestRank && ribbonData < 4) + if (ribbonData <= gSpecialVar_ContestRank && ribbonData <= CONTEST_RANK_MASTER) { ribbonData++; SetMonData(&gPlayerParty[gContestMonPartyIndex], MON_DATA_COOL_RIBBON, &ribbonData); @@ -2021,7 +2021,7 @@ void GiveMonContestRibbon(void) break; case CONTEST_CATEGORY_BEAUTY: ribbonData = GetMonData(&gPlayerParty[gContestMonPartyIndex], MON_DATA_BEAUTY_RIBBON); - if (ribbonData <= gSpecialVar_ContestRank && ribbonData < 4) + if (ribbonData <= gSpecialVar_ContestRank && ribbonData <= CONTEST_RANK_MASTER) { ribbonData++; SetMonData(&gPlayerParty[gContestMonPartyIndex], MON_DATA_BEAUTY_RIBBON, &ribbonData); @@ -2031,7 +2031,7 @@ void GiveMonContestRibbon(void) break; case CONTEST_CATEGORY_CUTE: ribbonData = GetMonData(&gPlayerParty[gContestMonPartyIndex], MON_DATA_CUTE_RIBBON); - if (ribbonData <= gSpecialVar_ContestRank && ribbonData < 4) + if (ribbonData <= gSpecialVar_ContestRank && ribbonData <= CONTEST_RANK_MASTER) { ribbonData++; SetMonData(&gPlayerParty[gContestMonPartyIndex], MON_DATA_CUTE_RIBBON, &ribbonData); @@ -2041,7 +2041,7 @@ void GiveMonContestRibbon(void) break; case CONTEST_CATEGORY_SMART: ribbonData = GetMonData(&gPlayerParty[gContestMonPartyIndex], MON_DATA_SMART_RIBBON); - if (ribbonData <= gSpecialVar_ContestRank && ribbonData < 4) + if (ribbonData <= gSpecialVar_ContestRank && ribbonData <= CONTEST_RANK_MASTER) { ribbonData++; SetMonData(&gPlayerParty[gContestMonPartyIndex], MON_DATA_SMART_RIBBON, &ribbonData); @@ -2051,7 +2051,7 @@ void GiveMonContestRibbon(void) break; case CONTEST_CATEGORY_TOUGH: ribbonData = GetMonData(&gPlayerParty[gContestMonPartyIndex], MON_DATA_TOUGH_RIBBON); - if (ribbonData <= gSpecialVar_ContestRank && ribbonData < 4) + if (ribbonData <= gSpecialVar_ContestRank && ribbonData <= CONTEST_RANK_MASTER) { ribbonData++; SetMonData(&gPlayerParty[gContestMonPartyIndex], MON_DATA_TOUGH_RIBBON, &ribbonData); diff --git a/src/credits.c b/src/credits.c index bf636f74f6..b412b29e27 100644 --- a/src/credits.c +++ b/src/credits.c @@ -1370,7 +1370,7 @@ static void SpriteCB_Player(struct Sprite *sprite) break; case 4: StartSpriteAnimIfDifferent(sprite, 0); - if (sprite->x > 120) + if (sprite->x > DISPLAY_WIDTH / 2) sprite->x--; break; case 5: diff --git a/src/data/contest_opponents.h b/src/data/contest_opponents.h index 7c3aad3151..d8241c4f0c 100644 --- a/src/data/contest_opponents.h +++ b/src/data/contest_opponents.h @@ -138,11 +138,14 @@ enum { #define CONTEST_AI_SET_20 (CONTEST_AI_COMMON | CONTEST_AI_DUMMY_12 | CONTEST_AI_DUMMY_25) #define CONTEST_AI_SET_21 (CONTEST_AI_COMMON | CONTEST_AI_DUMMY_7 | CONTEST_AI_DUMMY_25) +// All AI contestants have the same trainer ID +#define CONTEST_AI_TRAINER_ID 0xFFFF + const struct ContestWinner gDefaultContestWinners[] = { [CONTEST_WINNER_HALL_1 - 1] = { .personality = 0, - .trainerId = 0xFFFF, + .trainerId = CONTEST_AI_TRAINER_ID, .species = SPECIES_ELECTRIKE, .contestCategory = CONTEST_CATEGORY_CUTE, .monName = _("ELECTER"), @@ -151,7 +154,7 @@ const struct ContestWinner gDefaultContestWinners[] = }, [CONTEST_WINNER_HALL_2 - 1] = { .personality = 0, - .trainerId = 0xFFFF, + .trainerId = CONTEST_AI_TRAINER_ID, .species = SPECIES_TROPIUS, .contestCategory = CONTEST_CATEGORY_COOL, .monName = _("TROPO"), @@ -160,7 +163,7 @@ const struct ContestWinner gDefaultContestWinners[] = }, [CONTEST_WINNER_HALL_3 - 1] = { .personality = 0, - .trainerId = 0xFFFF, + .trainerId = CONTEST_AI_TRAINER_ID, .species = SPECIES_XATU, .contestCategory = CONTEST_CATEGORY_BEAUTY, .monName = _("TUXA"), @@ -169,7 +172,7 @@ const struct ContestWinner gDefaultContestWinners[] = }, [CONTEST_WINNER_HALL_4 - 1] = { .personality = 0, - .trainerId = 0xFFFF, + .trainerId = CONTEST_AI_TRAINER_ID, .species = SPECIES_PLUSLE, .contestCategory = CONTEST_CATEGORY_TOUGH, .monName = _("PULSE"), @@ -178,7 +181,7 @@ const struct ContestWinner gDefaultContestWinners[] = }, [CONTEST_WINNER_HALL_5 - 1] = { .personality = 0, - .trainerId = 0xFFFF, + .trainerId = CONTEST_AI_TRAINER_ID, .species = SPECIES_SHUPPET, .contestCategory = CONTEST_CATEGORY_SMART, .monName = _("SHUPUP"), @@ -187,7 +190,7 @@ const struct ContestWinner gDefaultContestWinners[] = }, [CONTEST_WINNER_HALL_6 - 1] = { .personality = 0, - .trainerId = 0xFFFF, + .trainerId = CONTEST_AI_TRAINER_ID, .species = SPECIES_ZANGOOSE, .contestCategory = CONTEST_CATEGORY_COOL, .monName = _("GOOZAN"), @@ -196,7 +199,7 @@ const struct ContestWinner gDefaultContestWinners[] = }, [CONTEST_WINNER_HALL_UNUSED_1 - 1] = { .personality = 0, - .trainerId = 0xFFFF, + .trainerId = CONTEST_AI_TRAINER_ID, .species = SPECIES_LOUDRED, .contestCategory = CONTEST_CATEGORY_BEAUTY, .monName = _("LOUDED"), @@ -205,7 +208,7 @@ const struct ContestWinner gDefaultContestWinners[] = }, [CONTEST_WINNER_HALL_UNUSED_2 - 1] = { .personality = 0, - .trainerId = 0xFFFF, + .trainerId = CONTEST_AI_TRAINER_ID, .species = SPECIES_DELCATTY, .contestCategory = CONTEST_CATEGORY_CUTE, .monName = _("KITSY"), @@ -242,7 +245,7 @@ const struct ContestPokemon gContestOpponents[] = .tough = 4, .sheen = 50, .personality = 0, - .otId = 0xFFFF + .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_EDITH] = { .species = SPECIES_ILLUMISE, @@ -270,7 +273,7 @@ const struct ContestPokemon gContestOpponents[] = .tough = 2, .sheen = 60, .personality = 0, - .otId = 0xFFFF + .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_EVAN] = { .species = SPECIES_DUSTOX, @@ -298,7 +301,7 @@ const struct ContestPokemon gContestOpponents[] = .tough = 4, .sheen = 70, .personality = 0, - .otId = 0xFFFF + .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_KELSEY] = { .species = SPECIES_SEEDOT, @@ -326,7 +329,7 @@ const struct ContestPokemon gContestOpponents[] = .tough = 7, .sheen = 80, .personality = 0, - .otId = 0xFFFF + .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_MADISON] = { .species = SPECIES_TAILLOW, @@ -354,7 +357,7 @@ const struct ContestPokemon gContestOpponents[] = .tough = 4, .sheen = 90, .personality = 0, - .otId = 0xFFFF + .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_RAYMOND] = { .species = SPECIES_NINCADA, @@ -382,7 +385,7 @@ const struct ContestPokemon gContestOpponents[] = .tough = 8, .sheen = 100, .personality = 0, - .otId = 0xFFFF + .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_GRANT] = { .species = SPECIES_SHROOMISH, @@ -410,7 +413,7 @@ const struct ContestPokemon gContestOpponents[] = .tough = 2, .sheen = 50, .personality = 0, - .otId = 0xFFFF + .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_PAIGE] = { .species = SPECIES_SPHEAL, @@ -438,7 +441,7 @@ const struct ContestPokemon gContestOpponents[] = .tough = 10, .sheen = 60, .personality = 0, - .otId = 0xFFFF + .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_ALEC] = { .species = SPECIES_SLAKOTH, @@ -466,7 +469,7 @@ const struct ContestPokemon gContestOpponents[] = .tough = 18, .sheen = 70, .personality = 0, - .otId = 0xFFFF + .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_SYDNEY] = { .species = SPECIES_WHISMUR, @@ -494,7 +497,7 @@ const struct ContestPokemon gContestOpponents[] = .tough = 7, .sheen = 80, .personality = 0, - .otId = 0xFFFF + .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_MORRIS] = { .species = SPECIES_MAKUHITA, @@ -522,7 +525,7 @@ const struct ContestPokemon gContestOpponents[] = .tough = 1, .sheen = 90, .personality = 0, - .otId = 0xFFFF + .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_MARIAH] = { .species = SPECIES_ARON, @@ -550,7 +553,7 @@ const struct ContestPokemon gContestOpponents[] = .tough = 2, .sheen = 100, .personality = 0, - .otId = 0xFFFF + .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_RUSSELL] = { .species = SPECIES_CROBAT, @@ -578,7 +581,7 @@ const struct ContestPokemon gContestOpponents[] = .tough = 10, .sheen = 50, .personality = 0, - .otId = 0xFFFF + .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_MELANIE] = { .species = SPECIES_GULPIN, @@ -606,7 +609,7 @@ const struct ContestPokemon gContestOpponents[] = .tough = 5, .sheen = 60, .personality = 0, - .otId = 0xFFFF + .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_CHANCE] = { .species = SPECIES_MANECTRIC, @@ -634,7 +637,7 @@ const struct ContestPokemon gContestOpponents[] = .tough = 1, .sheen = 70, .personality = 0, - .otId = 0xFFFF + .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_AGATHA] = { .species = SPECIES_BULBASAUR, @@ -662,7 +665,7 @@ const struct ContestPokemon gContestOpponents[] = .tough = 4, .sheen = 50, .personality = 0, - .otId = 0xFFFF + .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_BEAU] = { .species = SPECIES_BUTTERFREE, @@ -690,7 +693,7 @@ const struct ContestPokemon gContestOpponents[] = .tough = 4, .sheen = 60, .personality = 0, - .otId = 0xFFFF + .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_KAY] = { .species = SPECIES_PIDGEOTTO, @@ -718,7 +721,7 @@ const struct ContestPokemon gContestOpponents[] = .tough = 3, .sheen = 70, .personality = 0, - .otId = 0xFFFF + .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_CALE] = { .species = SPECIES_DIGLETT, @@ -746,7 +749,7 @@ const struct ContestPokemon gContestOpponents[] = .tough = 10, .sheen = 80, .personality = 0, - .otId = 0xFFFF + .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_CAITLIN] = { .species = SPECIES_POLIWAG, @@ -774,7 +777,7 @@ const struct ContestPokemon gContestOpponents[] = .tough = 10, .sheen = 90, .personality = 0, - .otId = 0xFFFF + .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_COLBY] = { .species = SPECIES_TOTODILE, @@ -802,7 +805,7 @@ const struct ContestPokemon gContestOpponents[] = .tough = 5, .sheen = 100, .personality = 0, - .otId = 0xFFFF + .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_KYLIE] = { .species = SPECIES_LEDYBA, @@ -830,7 +833,7 @@ const struct ContestPokemon gContestOpponents[] = .tough = 2, .sheen = 90, .personality = 0, - .otId = 0xFFFF + .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_LIAM] = { .species = SPECIES_DELIBIRD, @@ -858,7 +861,7 @@ const struct ContestPokemon gContestOpponents[] = .tough = 3, .sheen = 80, .personality = 0, - .otId = 0xFFFF + .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_MILO] = { .species = SPECIES_LARVITAR, @@ -886,7 +889,7 @@ const struct ContestPokemon gContestOpponents[] = .tough = 10, .sheen = 70, .personality = 0, - .otId = 0xFFFF + .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_KARINA] = { .species = SPECIES_ROSELIA, @@ -914,7 +917,7 @@ const struct ContestPokemon gContestOpponents[] = .tough = 20, .sheen = 100, .personality = 0, - .otId = 0xFFFF + .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_BOBBY] = { .species = SPECIES_DODRIO, @@ -942,7 +945,7 @@ const struct ContestPokemon gContestOpponents[] = .tough = 35, .sheen = 110, .personality = 0, - .otId = 0xFFFF + .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_CLAIRE] = { .species = SPECIES_TRAPINCH, @@ -970,7 +973,7 @@ const struct ContestPokemon gContestOpponents[] = .tough = 25, .sheen = 120, .personality = 0, - .otId = 0xFFFF + .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_WILLIE] = { .species = SPECIES_CACNEA, @@ -998,7 +1001,7 @@ const struct ContestPokemon gContestOpponents[] = .tough = 25, .sheen = 130, .personality = 0, - .otId = 0xFFFF + .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_CASSIDY] = { .species = SPECIES_SANDSLASH, @@ -1026,7 +1029,7 @@ const struct ContestPokemon gContestOpponents[] = .tough = 100, .sheen = 140, .personality = 0, - .otId = 0xFFFF + .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_MORGAN] = { .species = SPECIES_BALTOY, @@ -1054,7 +1057,7 @@ const struct ContestPokemon gContestOpponents[] = .tough = 35, .sheen = 150, .personality = 0, - .otId = 0xFFFF + .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_SUMMER] = { .species = SPECIES_MEDICHAM, @@ -1082,7 +1085,7 @@ const struct ContestPokemon gContestOpponents[] = .tough = 40, .sheen = 100, .personality = 0, - .otId = 0xFFFF + .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_MILES] = { .species = SPECIES_SPINDA, @@ -1110,7 +1113,7 @@ const struct ContestPokemon gContestOpponents[] = .tough = 25, .sheen = 110, .personality = 0, - .otId = 0xFFFF + .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_AUDREY] = { .species = SPECIES_SWABLU, @@ -1138,7 +1141,7 @@ const struct ContestPokemon gContestOpponents[] = .tough = 25, .sheen = 120, .personality = 0, - .otId = 0xFFFF + .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_AVERY] = { .species = SPECIES_SPOINK, @@ -1166,7 +1169,7 @@ const struct ContestPokemon gContestOpponents[] = .tough = 30, .sheen = 130, .personality = 0, - .otId = 0xFFFF + .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_ARIANA] = { .species = SPECIES_KECLEON, @@ -1194,7 +1197,7 @@ const struct ContestPokemon gContestOpponents[] = .tough = 35, .sheen = 140, .personality = 0, - .otId = 0xFFFF + .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_ASHTON] = { .species = SPECIES_GOLDEEN, @@ -1222,7 +1225,7 @@ const struct ContestPokemon gContestOpponents[] = .tough = 25, .sheen = 150, .personality = 0, - .otId = 0xFFFF + .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_SANDRA] = { .species = SPECIES_BARBOACH, @@ -1250,7 +1253,7 @@ const struct ContestPokemon gContestOpponents[] = .tough = 15, .sheen = 100, .personality = 0, - .otId = 0xFFFF + .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_CARSON] = { .species = SPECIES_SKARMORY, @@ -1278,7 +1281,7 @@ const struct ContestPokemon gContestOpponents[] = .tough = 20, .sheen = 110, .personality = 0, - .otId = 0xFFFF + .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_KATRINA] = { .species = SPECIES_LOTAD, @@ -1306,7 +1309,7 @@ const struct ContestPokemon gContestOpponents[] = .tough = 75, .sheen = 120, .personality = 0, - .otId = 0xFFFF + .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_LUKE] = { .species = SPECIES_SLOWBRO, @@ -1334,7 +1337,7 @@ const struct ContestPokemon gContestOpponents[] = .tough = 20, .sheen = 100, .personality = 0, - .otId = 0xFFFF + .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_RAUL] = { .species = SPECIES_FARFETCHD, @@ -1362,7 +1365,7 @@ const struct ContestPokemon gContestOpponents[] = .tough = 20, .sheen = 110, .personality = 0, - .otId = 0xFFFF + .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_JADA] = { .species = SPECIES_SEEL, @@ -1390,7 +1393,7 @@ const struct ContestPokemon gContestOpponents[] = .tough = 20, .sheen = 120, .personality = 0, - .otId = 0xFFFF + .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_ZEEK] = { .species = SPECIES_DROWZEE, @@ -1418,7 +1421,7 @@ const struct ContestPokemon gContestOpponents[] = .tough = 45, .sheen = 130, .personality = 0, - .otId = 0xFFFF + .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_DIEGO] = { .species = SPECIES_HITMONCHAN, @@ -1446,7 +1449,7 @@ const struct ContestPokemon gContestOpponents[] = .tough = 45, .sheen = 140, .personality = 0, - .otId = 0xFFFF + .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_ALIYAH] = { .species = SPECIES_BLISSEY, @@ -1474,7 +1477,7 @@ const struct ContestPokemon gContestOpponents[] = .tough = 20, .sheen = 150, .personality = 0, - .otId = 0xFFFF + .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_NATALIA] = { .species = SPECIES_ELEKID, @@ -1502,7 +1505,7 @@ const struct ContestPokemon gContestOpponents[] = .tough = 25, .sheen = 140, .personality = 0, - .otId = 0xFFFF + .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_DEVIN] = { .species = SPECIES_SNUBBULL, @@ -1530,7 +1533,7 @@ const struct ContestPokemon gContestOpponents[] = .tough = 20, .sheen = 130, .personality = 0, - .otId = 0xFFFF + .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_TYLOR] = { .species = SPECIES_MISDREAVUS, @@ -1558,7 +1561,7 @@ const struct ContestPokemon gContestOpponents[] = .tough = 20, .sheen = 120, .personality = 0, - .otId = 0xFFFF + .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_RONNIE] = { .species = SPECIES_LAIRON, @@ -1586,7 +1589,7 @@ const struct ContestPokemon gContestOpponents[] = .tough = 90, .sheen = 200, .personality = 0, - .otId = 0xFFFF + .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_CLAUDIA] = { .species = SPECIES_SHIFTRY, @@ -1614,7 +1617,7 @@ const struct ContestPokemon gContestOpponents[] = .tough = 70, .sheen = 210, .personality = 0, - .otId = 0xFFFF + .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_ELIAS] = { .species = SPECIES_NINJASK, @@ -1642,7 +1645,7 @@ const struct ContestPokemon gContestOpponents[] = .tough = 70, .sheen = 220, .personality = 0, - .otId = 0xFFFF + .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_JADE] = { .species = SPECIES_SWELLOW, @@ -1670,7 +1673,7 @@ const struct ContestPokemon gContestOpponents[] = .tough = 40, .sheen = 230, .personality = 0, - .otId = 0xFFFF + .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_FRANCIS] = { .species = SPECIES_MIGHTYENA, @@ -1698,7 +1701,7 @@ const struct ContestPokemon gContestOpponents[] = .tough = 70, .sheen = 240, .personality = 0, - .otId = 0xFFFF + .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_ALISHA] = { .species = SPECIES_BEAUTIFLY, @@ -1726,7 +1729,7 @@ const struct ContestPokemon gContestOpponents[] = .tough = 100, .sheen = 250, .personality = 0, - .otId = 0xFFFF + .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_SAUL] = { .species = SPECIES_SEAKING, @@ -1754,7 +1757,7 @@ const struct ContestPokemon gContestOpponents[] = .tough = 90, .sheen = 200, .personality = 0, - .otId = 0xFFFF + .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_FELICIA] = { .species = SPECIES_CASTFORM, @@ -1782,7 +1785,7 @@ const struct ContestPokemon gContestOpponents[] = .tough = 65, .sheen = 210, .personality = 0, - .otId = 0xFFFF + .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_EMILIO] = { .species = SPECIES_MACHOKE, @@ -1810,7 +1813,7 @@ const struct ContestPokemon gContestOpponents[] = .tough = 50, .sheen = 220, .personality = 0, - .otId = 0xFFFF + .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_KARLA] = { .species = SPECIES_LOMBRE, @@ -1838,7 +1841,7 @@ const struct ContestPokemon gContestOpponents[] = .tough = 70, .sheen = 230, .personality = 0, - .otId = 0xFFFF + .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_DARRYL] = { .species = SPECIES_SEVIPER, @@ -1866,7 +1869,7 @@ const struct ContestPokemon gContestOpponents[] = .tough = 100, .sheen = 240, .personality = 0, - .otId = 0xFFFF + .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_SELENA] = { .species = SPECIES_WAILMER, @@ -1894,7 +1897,7 @@ const struct ContestPokemon gContestOpponents[] = .tough = 30, .sheen = 250, .personality = 0, - .otId = 0xFFFF + .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_NOEL] = { .species = SPECIES_MAGIKARP, @@ -1922,7 +1925,7 @@ const struct ContestPokemon gContestOpponents[] = .tough = 160, .sheen = 255, .personality = 0, - .otId = 0xFFFF + .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_LACEY] = { .species = SPECIES_LUNATONE, @@ -1950,7 +1953,7 @@ const struct ContestPokemon gContestOpponents[] = .tough = 50, .sheen = 210, .personality = 0, - .otId = 0xFFFF + .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_CORBIN] = { .species = SPECIES_ABSOL, @@ -1978,7 +1981,7 @@ const struct ContestPokemon gContestOpponents[] = .tough = 35, .sheen = 220, .personality = 0, - .otId = 0xFFFF + .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_GRACIE] = { .species = SPECIES_EXEGGUTOR, @@ -2006,7 +2009,7 @@ const struct ContestPokemon gContestOpponents[] = .tough = 80, .sheen = 200, .personality = 0, - .otId = 0xFFFF + .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_COLTIN] = { .species = SPECIES_CUBONE, @@ -2034,7 +2037,7 @@ const struct ContestPokemon gContestOpponents[] = .tough = 100, .sheen = 210, .personality = 0, - .otId = 0xFFFF + .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_ELLIE] = { .species = SPECIES_HITMONLEE, @@ -2062,7 +2065,7 @@ const struct ContestPokemon gContestOpponents[] = .tough = 100, .sheen = 220, .personality = 0, - .otId = 0xFFFF + .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_MARCUS] = { .species = SPECIES_SQUIRTLE, @@ -2090,7 +2093,7 @@ const struct ContestPokemon gContestOpponents[] = .tough = 95, .sheen = 230, .personality = 0, - .otId = 0xFFFF + .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_KIARA] = { .species = SPECIES_KANGASKHAN, @@ -2118,7 +2121,7 @@ const struct ContestPokemon gContestOpponents[] = .tough = 100, .sheen = 240, .personality = 0, - .otId = 0xFFFF + .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_BRYCE] = { .species = SPECIES_PINECO, @@ -2146,7 +2149,7 @@ const struct ContestPokemon gContestOpponents[] = .tough = 80, .sheen = 250, .personality = 0, - .otId = 0xFFFF + .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_JAMIE] = { .species = SPECIES_DUNSPARCE, @@ -2174,7 +2177,7 @@ const struct ContestPokemon gContestOpponents[] = .tough = 110, .sheen = 240, .personality = 0, - .otId = 0xFFFF + .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_JORGE] = { .species = SPECIES_HOUNDOOM, @@ -2202,7 +2205,7 @@ const struct ContestPokemon gContestOpponents[] = .tough = 80, .sheen = 230, .personality = 0, - .otId = 0xFFFF + .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_DEVON] = { .species = SPECIES_MILTANK, @@ -2230,7 +2233,7 @@ const struct ContestPokemon gContestOpponents[] = .tough = 40, .sheen = 220, .personality = 0, - .otId = 0xFFFF + .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_JUSTINA] = { .species = SPECIES_GYARADOS, @@ -2258,7 +2261,7 @@ const struct ContestPokemon gContestOpponents[] = .tough = 160, .sheen = 255, .personality = 0, - .otId = 0xFFFF + .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_RALPH] = { .species = SPECIES_LOUDRED, @@ -2286,7 +2289,7 @@ const struct ContestPokemon gContestOpponents[] = .tough = 160, .sheen = 255, .personality = 0, - .otId = 0xFFFF + .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_ROSA] = { .species = SPECIES_SKITTY, @@ -2314,7 +2317,7 @@ const struct ContestPokemon gContestOpponents[] = .tough = 60, .sheen = 255, .personality = 0, - .otId = 0xFFFF + .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_KEATON] = { .species = SPECIES_SLAKING, @@ -2342,7 +2345,7 @@ const struct ContestPokemon gContestOpponents[] = .tough = 150, .sheen = 255, .personality = 0, - .otId = 0xFFFF + .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_MAYRA] = { .species = SPECIES_ALTARIA, @@ -2370,7 +2373,7 @@ const struct ContestPokemon gContestOpponents[] = .tough = 90, .sheen = 255, .personality = 0, - .otId = 0xFFFF + .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_LAMAR] = { .species = SPECIES_KIRLIA, @@ -2398,7 +2401,7 @@ const struct ContestPokemon gContestOpponents[] = .tough = 80, .sheen = 255, .personality = 0, - .otId = 0xFFFF + .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_AUBREY] = { .species = SPECIES_BELLOSSOM, @@ -2426,7 +2429,7 @@ const struct ContestPokemon gContestOpponents[] = .tough = 40, .sheen = 255, .personality = 0, - .otId = 0xFFFF + .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_NIGEL] = { .species = SPECIES_SABLEYE, @@ -2454,7 +2457,7 @@ const struct ContestPokemon gContestOpponents[] = .tough = 160, .sheen = 255, .personality = 0, - .otId = 0xFFFF + .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_CAMILLE] = { .species = SPECIES_NATU, @@ -2482,7 +2485,7 @@ const struct ContestPokemon gContestOpponents[] = .tough = 170, .sheen = 255, .personality = 0, - .otId = 0xFFFF + .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_DEON] = { .species = SPECIES_SHARPEDO, @@ -2510,7 +2513,7 @@ const struct ContestPokemon gContestOpponents[] = .tough = 100, .sheen = 255, .personality = 0, - .otId = 0xFFFF + .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_JANELLE] = { .species = SPECIES_LUVDISC, @@ -2538,7 +2541,7 @@ const struct ContestPokemon gContestOpponents[] = .tough = 190, .sheen = 255, .personality = 0, - .otId = 0xFFFF + .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_HEATH] = { .species = SPECIES_HERACROSS, @@ -2566,7 +2569,7 @@ const struct ContestPokemon gContestOpponents[] = .tough = 140, .sheen = 255, .personality = 0, - .otId = 0xFFFF + .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_SASHA] = { .species = SPECIES_ELECTRODE, @@ -2594,7 +2597,7 @@ const struct ContestPokemon gContestOpponents[] = .tough = 50, .sheen = 255, .personality = 0, - .otId = 0xFFFF + .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_FRANKIE] = { .species = SPECIES_PICHU, @@ -2622,7 +2625,7 @@ const struct ContestPokemon gContestOpponents[] = .tough = 120, .sheen = 255, .personality = 0, - .otId = 0xFFFF + .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_HELEN] = { .species = SPECIES_WOBBUFFET, @@ -2650,7 +2653,7 @@ const struct ContestPokemon gContestOpponents[] = .tough = 210, .sheen = 255, .personality = 0, - .otId = 0xFFFF + .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_CAMILE] = { .species = SPECIES_GENGAR, @@ -2678,7 +2681,7 @@ const struct ContestPokemon gContestOpponents[] = .tough = 180, .sheen = 255, .personality = 0, - .otId = 0xFFFF + .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_MARTIN] = { .species = SPECIES_PORYGON, @@ -2706,7 +2709,7 @@ const struct ContestPokemon gContestOpponents[] = .tough = 130, .sheen = 255, .personality = 0, - .otId = 0xFFFF + .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_SERGIO] = { .species = SPECIES_DRAGONITE, @@ -2734,7 +2737,7 @@ const struct ContestPokemon gContestOpponents[] = .tough = 150, .sheen = 255, .personality = 0, - .otId = 0xFFFF + .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_KAILEY] = { .species = SPECIES_MEOWTH, @@ -2762,7 +2765,7 @@ const struct ContestPokemon gContestOpponents[] = .tough = 80, .sheen = 255, .personality = 0, - .otId = 0xFFFF + .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_PERLA] = { .species = SPECIES_JYNX, @@ -2790,7 +2793,7 @@ const struct ContestPokemon gContestOpponents[] = .tough = 120, .sheen = 255, .personality = 0, - .otId = 0xFFFF + .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_CLARA] = { .species = SPECIES_TOGEPI, @@ -2818,7 +2821,7 @@ const struct ContestPokemon gContestOpponents[] = .tough = 80, .sheen = 255, .personality = 0, - .otId = 0xFFFF + .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_JAKOB] = { .species = SPECIES_ESPEON, @@ -2846,7 +2849,7 @@ const struct ContestPokemon gContestOpponents[] = .tough = 150, .sheen = 255, .personality = 0, - .otId = 0xFFFF + .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_TREY] = { .species = SPECIES_SLOWKING, @@ -2874,7 +2877,7 @@ const struct ContestPokemon gContestOpponents[] = .tough = 170, .sheen = 255, .personality = 0, - .otId = 0xFFFF + .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_LANE] = { .species = SPECIES_URSARING, @@ -2902,7 +2905,7 @@ const struct ContestPokemon gContestOpponents[] = .tough = 190, .sheen = 255, .personality = 0, - .otId = 0xFFFF + .otId = CONTEST_AI_TRAINER_ID, } }; diff --git a/src/data/graphics/berry_fix.h b/src/data/graphics/berry_fix.h index 07e2cbf51c..0c26f7e92b 100644 --- a/src/data/graphics/berry_fix.h +++ b/src/data/graphics/berry_fix.h @@ -1,6 +1,6 @@ -const u16 gBerryFixGameboy_Pal[] = INCBIN_U16("graphics/berry_fix/gba_small.gbapal"); -const u32 gBerryFixGameboy_Gfx[] = INCBIN_U32("graphics/berry_fix/gba_small.4bpp.lz"); -const u32 gBerryFixGameboy_Tilemap[] = INCBIN_U32("graphics/berry_fix/gba_small.bin.lz"); +const u16 gBerryFixGbaConnect_Pal[] = INCBIN_U16("graphics/berry_fix/gba_connect.gbapal"); +const u32 gBerryFixGbaConnect_Gfx[] = INCBIN_U32("graphics/berry_fix/gba_connect.4bpp.lz"); +const u32 gBerryFixGbaConnect_Tilemap[] = INCBIN_U32("graphics/berry_fix/gba_connect.bin.lz"); const u16 gBerryFixGameboyLogo_Pal[] = INCBIN_U16("graphics/berry_fix/logo.gbapal"); const u32 gBerryFixGameboyLogo_Gfx[] = INCBIN_U32("graphics/berry_fix/logo.4bpp.lz"); diff --git a/src/data/items.h b/src/data/items.h index 072ec1bf5e..27326e07f9 100644 --- a/src/data/items.h +++ b/src/data/items.h @@ -3513,10 +3513,10 @@ const struct Item gItems[] = // TMs/HMs - [ITEM_TM01_FOCUS_PUNCH] = + [ITEM_TM_FOCUS_PUNCH] = { .name = _("TM01"), - .itemId = ITEM_TM01_FOCUS_PUNCH, + .itemId = ITEM_TM01, .price = 3000, .description = sTM01Desc, .pocket = POCKET_TM_HM, @@ -3524,10 +3524,10 @@ const struct Item gItems[] = .fieldUseFunc = ItemUseOutOfBattle_TMHM, }, - [ITEM_TM02_DRAGON_CLAW] = + [ITEM_TM_DRAGON_CLAW] = { .name = _("TM02"), - .itemId = ITEM_TM02_DRAGON_CLAW, + .itemId = ITEM_TM02, .price = 3000, .description = sTM02Desc, .pocket = POCKET_TM_HM, @@ -3535,10 +3535,10 @@ const struct Item gItems[] = .fieldUseFunc = ItemUseOutOfBattle_TMHM, }, - [ITEM_TM03_WATER_PULSE] = + [ITEM_TM_WATER_PULSE] = { .name = _("TM03"), - .itemId = ITEM_TM03_WATER_PULSE, + .itemId = ITEM_TM03, .price = 3000, .description = sTM03Desc, .pocket = POCKET_TM_HM, @@ -3546,10 +3546,10 @@ const struct Item gItems[] = .fieldUseFunc = ItemUseOutOfBattle_TMHM, }, - [ITEM_TM04_CALM_MIND] = + [ITEM_TM_CALM_MIND] = { .name = _("TM04"), - .itemId = ITEM_TM04_CALM_MIND, + .itemId = ITEM_TM04, .price = 3000, .description = sTM04Desc, .pocket = POCKET_TM_HM, @@ -3557,10 +3557,10 @@ const struct Item gItems[] = .fieldUseFunc = ItemUseOutOfBattle_TMHM, }, - [ITEM_TM05_ROAR] = + [ITEM_TM_ROAR] = { .name = _("TM05"), - .itemId = ITEM_TM05_ROAR, + .itemId = ITEM_TM05, .price = 1000, .description = sTM05Desc, .pocket = POCKET_TM_HM, @@ -3568,10 +3568,10 @@ const struct Item gItems[] = .fieldUseFunc = ItemUseOutOfBattle_TMHM, }, - [ITEM_TM06_TOXIC] = + [ITEM_TM_TOXIC] = { .name = _("TM06"), - .itemId = ITEM_TM06_TOXIC, + .itemId = ITEM_TM06, .price = 3000, .description = sTM06Desc, .pocket = POCKET_TM_HM, @@ -3579,10 +3579,10 @@ const struct Item gItems[] = .fieldUseFunc = ItemUseOutOfBattle_TMHM, }, - [ITEM_TM07_HAIL] = + [ITEM_TM_HAIL] = { .name = _("TM07"), - .itemId = ITEM_TM07_HAIL, + .itemId = ITEM_TM07, .price = 3000, .description = sTM07Desc, .pocket = POCKET_TM_HM, @@ -3590,10 +3590,10 @@ const struct Item gItems[] = .fieldUseFunc = ItemUseOutOfBattle_TMHM, }, - [ITEM_TM08_BULK_UP] = + [ITEM_TM_BULK_UP] = { .name = _("TM08"), - .itemId = ITEM_TM08_BULK_UP, + .itemId = ITEM_TM08, .price = 3000, .description = sTM08Desc, .pocket = POCKET_TM_HM, @@ -3601,10 +3601,10 @@ const struct Item gItems[] = .fieldUseFunc = ItemUseOutOfBattle_TMHM, }, - [ITEM_TM09_BULLET_SEED] = + [ITEM_TM_BULLET_SEED] = { .name = _("TM09"), - .itemId = ITEM_TM09_BULLET_SEED, + .itemId = ITEM_TM09, .price = 3000, .description = sTM09Desc, .pocket = POCKET_TM_HM, @@ -3612,10 +3612,10 @@ const struct Item gItems[] = .fieldUseFunc = ItemUseOutOfBattle_TMHM, }, - [ITEM_TM10_HIDDEN_POWER] = + [ITEM_TM_HIDDEN_POWER] = { .name = _("TM10"), - .itemId = ITEM_TM10_HIDDEN_POWER, + .itemId = ITEM_TM10, .price = 3000, .description = sTM10Desc, .pocket = POCKET_TM_HM, @@ -3623,10 +3623,10 @@ const struct Item gItems[] = .fieldUseFunc = ItemUseOutOfBattle_TMHM, }, - [ITEM_TM11_SUNNY_DAY] = + [ITEM_TM_SUNNY_DAY] = { .name = _("TM11"), - .itemId = ITEM_TM11_SUNNY_DAY, + .itemId = ITEM_TM11, .price = 2000, .description = sTM11Desc, .pocket = POCKET_TM_HM, @@ -3634,10 +3634,10 @@ const struct Item gItems[] = .fieldUseFunc = ItemUseOutOfBattle_TMHM, }, - [ITEM_TM12_TAUNT] = + [ITEM_TM_TAUNT] = { .name = _("TM12"), - .itemId = ITEM_TM12_TAUNT, + .itemId = ITEM_TM12, .price = 3000, .description = sTM12Desc, .pocket = POCKET_TM_HM, @@ -3645,10 +3645,10 @@ const struct Item gItems[] = .fieldUseFunc = ItemUseOutOfBattle_TMHM, }, - [ITEM_TM13_ICE_BEAM] = + [ITEM_TM_ICE_BEAM] = { .name = _("TM13"), - .itemId = ITEM_TM13_ICE_BEAM, + .itemId = ITEM_TM13, .price = 3000, .description = sTM13Desc, .pocket = POCKET_TM_HM, @@ -3656,10 +3656,10 @@ const struct Item gItems[] = .fieldUseFunc = ItemUseOutOfBattle_TMHM, }, - [ITEM_TM14_BLIZZARD] = + [ITEM_TM_BLIZZARD] = { .name = _("TM14"), - .itemId = ITEM_TM14_BLIZZARD, + .itemId = ITEM_TM14, .price = 5500, .description = sTM14Desc, .pocket = POCKET_TM_HM, @@ -3667,10 +3667,10 @@ const struct Item gItems[] = .fieldUseFunc = ItemUseOutOfBattle_TMHM, }, - [ITEM_TM15_HYPER_BEAM] = + [ITEM_TM_HYPER_BEAM] = { .name = _("TM15"), - .itemId = ITEM_TM15_HYPER_BEAM, + .itemId = ITEM_TM15, .price = 7500, .description = sTM15Desc, .pocket = POCKET_TM_HM, @@ -3678,10 +3678,10 @@ const struct Item gItems[] = .fieldUseFunc = ItemUseOutOfBattle_TMHM, }, - [ITEM_TM16_LIGHT_SCREEN] = + [ITEM_TM_LIGHT_SCREEN] = { .name = _("TM16"), - .itemId = ITEM_TM16_LIGHT_SCREEN, + .itemId = ITEM_TM16, .price = 3000, .description = sTM16Desc, .pocket = POCKET_TM_HM, @@ -3689,10 +3689,10 @@ const struct Item gItems[] = .fieldUseFunc = ItemUseOutOfBattle_TMHM, }, - [ITEM_TM17_PROTECT] = + [ITEM_TM_PROTECT] = { .name = _("TM17"), - .itemId = ITEM_TM17_PROTECT, + .itemId = ITEM_TM17, .price = 3000, .description = sTM17Desc, .pocket = POCKET_TM_HM, @@ -3700,10 +3700,10 @@ const struct Item gItems[] = .fieldUseFunc = ItemUseOutOfBattle_TMHM, }, - [ITEM_TM18_RAIN_DANCE] = + [ITEM_TM_RAIN_DANCE] = { .name = _("TM18"), - .itemId = ITEM_TM18_RAIN_DANCE, + .itemId = ITEM_TM18, .price = 2000, .description = sTM18Desc, .pocket = POCKET_TM_HM, @@ -3711,10 +3711,10 @@ const struct Item gItems[] = .fieldUseFunc = ItemUseOutOfBattle_TMHM, }, - [ITEM_TM19_GIGA_DRAIN] = + [ITEM_TM_GIGA_DRAIN] = { .name = _("TM19"), - .itemId = ITEM_TM19_GIGA_DRAIN, + .itemId = ITEM_TM19, .price = 3000, .description = sTM19Desc, .pocket = POCKET_TM_HM, @@ -3722,10 +3722,10 @@ const struct Item gItems[] = .fieldUseFunc = ItemUseOutOfBattle_TMHM, }, - [ITEM_TM20_SAFEGUARD] = + [ITEM_TM_SAFEGUARD] = { .name = _("TM20"), - .itemId = ITEM_TM20_SAFEGUARD, + .itemId = ITEM_TM20, .price = 3000, .description = sTM20Desc, .pocket = POCKET_TM_HM, @@ -3733,10 +3733,10 @@ const struct Item gItems[] = .fieldUseFunc = ItemUseOutOfBattle_TMHM, }, - [ITEM_TM21_FRUSTRATION] = + [ITEM_TM_FRUSTRATION] = { .name = _("TM21"), - .itemId = ITEM_TM21_FRUSTRATION, + .itemId = ITEM_TM21, .price = 1000, .description = sTM21Desc, .pocket = POCKET_TM_HM, @@ -3744,10 +3744,10 @@ const struct Item gItems[] = .fieldUseFunc = ItemUseOutOfBattle_TMHM, }, - [ITEM_TM22_SOLAR_BEAM] = + [ITEM_TM_SOLAR_BEAM] = { .name = _("TM22"), - .itemId = ITEM_TM22_SOLAR_BEAM, + .itemId = ITEM_TM22, .price = 3000, .description = sTM22Desc, .pocket = POCKET_TM_HM, @@ -3755,10 +3755,10 @@ const struct Item gItems[] = .fieldUseFunc = ItemUseOutOfBattle_TMHM, }, - [ITEM_TM23_IRON_TAIL] = + [ITEM_TM_IRON_TAIL] = { .name = _("TM23"), - .itemId = ITEM_TM23_IRON_TAIL, + .itemId = ITEM_TM23, .price = 3000, .description = sTM23Desc, .pocket = POCKET_TM_HM, @@ -3766,10 +3766,10 @@ const struct Item gItems[] = .fieldUseFunc = ItemUseOutOfBattle_TMHM, }, - [ITEM_TM24_THUNDERBOLT] = + [ITEM_TM_THUNDERBOLT] = { .name = _("TM24"), - .itemId = ITEM_TM24_THUNDERBOLT, + .itemId = ITEM_TM24, .price = 3000, .description = sTM24Desc, .pocket = POCKET_TM_HM, @@ -3777,10 +3777,10 @@ const struct Item gItems[] = .fieldUseFunc = ItemUseOutOfBattle_TMHM, }, - [ITEM_TM25_THUNDER] = + [ITEM_TM_THUNDER] = { .name = _("TM25"), - .itemId = ITEM_TM25_THUNDER, + .itemId = ITEM_TM25, .price = 5500, .description = sTM25Desc, .pocket = POCKET_TM_HM, @@ -3788,10 +3788,10 @@ const struct Item gItems[] = .fieldUseFunc = ItemUseOutOfBattle_TMHM, }, - [ITEM_TM26_EARTHQUAKE] = + [ITEM_TM_EARTHQUAKE] = { .name = _("TM26"), - .itemId = ITEM_TM26_EARTHQUAKE, + .itemId = ITEM_TM26, .price = 3000, .description = sTM26Desc, .pocket = POCKET_TM_HM, @@ -3799,10 +3799,10 @@ const struct Item gItems[] = .fieldUseFunc = ItemUseOutOfBattle_TMHM, }, - [ITEM_TM27_RETURN] = + [ITEM_TM_RETURN] = { .name = _("TM27"), - .itemId = ITEM_TM27_RETURN, + .itemId = ITEM_TM27, .price = 1000, .description = sTM27Desc, .pocket = POCKET_TM_HM, @@ -3810,10 +3810,10 @@ const struct Item gItems[] = .fieldUseFunc = ItemUseOutOfBattle_TMHM, }, - [ITEM_TM28_DIG] = + [ITEM_TM_DIG] = { .name = _("TM28"), - .itemId = ITEM_TM28_DIG, + .itemId = ITEM_TM28, .price = 2000, .description = sTM28Desc, .pocket = POCKET_TM_HM, @@ -3821,10 +3821,10 @@ const struct Item gItems[] = .fieldUseFunc = ItemUseOutOfBattle_TMHM, }, - [ITEM_TM29_PSYCHIC] = + [ITEM_TM_PSYCHIC] = { .name = _("TM29"), - .itemId = ITEM_TM29_PSYCHIC, + .itemId = ITEM_TM29, .price = 2000, .description = sTM29Desc, .pocket = POCKET_TM_HM, @@ -3832,10 +3832,10 @@ const struct Item gItems[] = .fieldUseFunc = ItemUseOutOfBattle_TMHM, }, - [ITEM_TM30_SHADOW_BALL] = + [ITEM_TM_SHADOW_BALL] = { .name = _("TM30"), - .itemId = ITEM_TM30_SHADOW_BALL, + .itemId = ITEM_TM30, .price = 3000, .description = sTM30Desc, .pocket = POCKET_TM_HM, @@ -3843,10 +3843,10 @@ const struct Item gItems[] = .fieldUseFunc = ItemUseOutOfBattle_TMHM, }, - [ITEM_TM31_BRICK_BREAK] = + [ITEM_TM_BRICK_BREAK] = { .name = _("TM31"), - .itemId = ITEM_TM31_BRICK_BREAK, + .itemId = ITEM_TM31, .price = 3000, .description = sTM31Desc, .pocket = POCKET_TM_HM, @@ -3854,10 +3854,10 @@ const struct Item gItems[] = .fieldUseFunc = ItemUseOutOfBattle_TMHM, }, - [ITEM_TM32_DOUBLE_TEAM] = + [ITEM_TM_DOUBLE_TEAM] = { .name = _("TM32"), - .itemId = ITEM_TM32_DOUBLE_TEAM, + .itemId = ITEM_TM32, .price = 2000, .description = sTM32Desc, .pocket = POCKET_TM_HM, @@ -3865,10 +3865,10 @@ const struct Item gItems[] = .fieldUseFunc = ItemUseOutOfBattle_TMHM, }, - [ITEM_TM33_REFLECT] = + [ITEM_TM_REFLECT] = { .name = _("TM33"), - .itemId = ITEM_TM33_REFLECT, + .itemId = ITEM_TM33, .price = 3000, .description = sTM33Desc, .pocket = POCKET_TM_HM, @@ -3876,10 +3876,10 @@ const struct Item gItems[] = .fieldUseFunc = ItemUseOutOfBattle_TMHM, }, - [ITEM_TM34_SHOCK_WAVE] = + [ITEM_TM_SHOCK_WAVE] = { .name = _("TM34"), - .itemId = ITEM_TM34_SHOCK_WAVE, + .itemId = ITEM_TM34, .price = 3000, .description = sTM34Desc, .pocket = POCKET_TM_HM, @@ -3887,10 +3887,10 @@ const struct Item gItems[] = .fieldUseFunc = ItemUseOutOfBattle_TMHM, }, - [ITEM_TM35_FLAMETHROWER] = + [ITEM_TM_FLAMETHROWER] = { .name = _("TM35"), - .itemId = ITEM_TM35_FLAMETHROWER, + .itemId = ITEM_TM35, .price = 3000, .description = sTM35Desc, .pocket = POCKET_TM_HM, @@ -3898,10 +3898,10 @@ const struct Item gItems[] = .fieldUseFunc = ItemUseOutOfBattle_TMHM, }, - [ITEM_TM36_SLUDGE_BOMB] = + [ITEM_TM_SLUDGE_BOMB] = { .name = _("TM36"), - .itemId = ITEM_TM36_SLUDGE_BOMB, + .itemId = ITEM_TM36, .price = 1000, .description = sTM36Desc, .pocket = POCKET_TM_HM, @@ -3909,10 +3909,10 @@ const struct Item gItems[] = .fieldUseFunc = ItemUseOutOfBattle_TMHM, }, - [ITEM_TM37_SANDSTORM] = + [ITEM_TM_SANDSTORM] = { .name = _("TM37"), - .itemId = ITEM_TM37_SANDSTORM, + .itemId = ITEM_TM37, .price = 2000, .description = sTM37Desc, .pocket = POCKET_TM_HM, @@ -3920,10 +3920,10 @@ const struct Item gItems[] = .fieldUseFunc = ItemUseOutOfBattle_TMHM, }, - [ITEM_TM38_FIRE_BLAST] = + [ITEM_TM_FIRE_BLAST] = { .name = _("TM38"), - .itemId = ITEM_TM38_FIRE_BLAST, + .itemId = ITEM_TM38, .price = 5500, .description = sTM38Desc, .pocket = POCKET_TM_HM, @@ -3931,10 +3931,10 @@ const struct Item gItems[] = .fieldUseFunc = ItemUseOutOfBattle_TMHM, }, - [ITEM_TM39_ROCK_TOMB] = + [ITEM_TM_ROCK_TOMB] = { .name = _("TM39"), - .itemId = ITEM_TM39_ROCK_TOMB, + .itemId = ITEM_TM39, .price = 3000, .description = sTM39Desc, .pocket = POCKET_TM_HM, @@ -3942,10 +3942,10 @@ const struct Item gItems[] = .fieldUseFunc = ItemUseOutOfBattle_TMHM, }, - [ITEM_TM40_AERIAL_ACE] = + [ITEM_TM_AERIAL_ACE] = { .name = _("TM40"), - .itemId = ITEM_TM40_AERIAL_ACE, + .itemId = ITEM_TM40, .price = 3000, .description = sTM40Desc, .pocket = POCKET_TM_HM, @@ -3953,10 +3953,10 @@ const struct Item gItems[] = .fieldUseFunc = ItemUseOutOfBattle_TMHM, }, - [ITEM_TM41_TORMENT] = + [ITEM_TM_TORMENT] = { .name = _("TM41"), - .itemId = ITEM_TM41_TORMENT, + .itemId = ITEM_TM41, .price = 3000, .description = sTM41Desc, .pocket = POCKET_TM_HM, @@ -3964,10 +3964,10 @@ const struct Item gItems[] = .fieldUseFunc = ItemUseOutOfBattle_TMHM, }, - [ITEM_TM42_FACADE] = + [ITEM_TM_FACADE] = { .name = _("TM42"), - .itemId = ITEM_TM42_FACADE, + .itemId = ITEM_TM42, .price = 3000, .description = sTM42Desc, .pocket = POCKET_TM_HM, @@ -3975,10 +3975,10 @@ const struct Item gItems[] = .fieldUseFunc = ItemUseOutOfBattle_TMHM, }, - [ITEM_TM43_SECRET_POWER] = + [ITEM_TM_SECRET_POWER] = { .name = _("TM43"), - .itemId = ITEM_TM43_SECRET_POWER, + .itemId = ITEM_TM43, .price = 3000, .description = sTM43Desc, .pocket = POCKET_TM_HM, @@ -3986,10 +3986,10 @@ const struct Item gItems[] = .fieldUseFunc = ItemUseOutOfBattle_TMHM, }, - [ITEM_TM44_REST] = + [ITEM_TM_REST] = { .name = _("TM44"), - .itemId = ITEM_TM44_REST, + .itemId = ITEM_TM44, .price = 3000, .description = sTM44Desc, .pocket = POCKET_TM_HM, @@ -3997,10 +3997,10 @@ const struct Item gItems[] = .fieldUseFunc = ItemUseOutOfBattle_TMHM, }, - [ITEM_TM45_ATTRACT] = + [ITEM_TM_ATTRACT] = { .name = _("TM45"), - .itemId = ITEM_TM45_ATTRACT, + .itemId = ITEM_TM45, .price = 3000, .description = sTM45Desc, .pocket = POCKET_TM_HM, @@ -4008,10 +4008,10 @@ const struct Item gItems[] = .fieldUseFunc = ItemUseOutOfBattle_TMHM, }, - [ITEM_TM46_THIEF] = + [ITEM_TM_THIEF] = { .name = _("TM46"), - .itemId = ITEM_TM46_THIEF, + .itemId = ITEM_TM46, .price = 3000, .description = sTM46Desc, .pocket = POCKET_TM_HM, @@ -4019,10 +4019,10 @@ const struct Item gItems[] = .fieldUseFunc = ItemUseOutOfBattle_TMHM, }, - [ITEM_TM47_STEEL_WING] = + [ITEM_TM_STEEL_WING] = { .name = _("TM47"), - .itemId = ITEM_TM47_STEEL_WING, + .itemId = ITEM_TM47, .price = 3000, .description = sTM47Desc, .pocket = POCKET_TM_HM, @@ -4030,10 +4030,10 @@ const struct Item gItems[] = .fieldUseFunc = ItemUseOutOfBattle_TMHM, }, - [ITEM_TM48_SKILL_SWAP] = + [ITEM_TM_SKILL_SWAP] = { .name = _("TM48"), - .itemId = ITEM_TM48_SKILL_SWAP, + .itemId = ITEM_TM48, .price = 3000, .description = sTM48Desc, .pocket = POCKET_TM_HM, @@ -4041,10 +4041,10 @@ const struct Item gItems[] = .fieldUseFunc = ItemUseOutOfBattle_TMHM, }, - [ITEM_TM49_SNATCH] = + [ITEM_TM_SNATCH] = { .name = _("TM49"), - .itemId = ITEM_TM49_SNATCH, + .itemId = ITEM_TM49, .price = 3000, .description = sTM49Desc, .pocket = POCKET_TM_HM, @@ -4052,10 +4052,10 @@ const struct Item gItems[] = .fieldUseFunc = ItemUseOutOfBattle_TMHM, }, - [ITEM_TM50_OVERHEAT] = + [ITEM_TM_OVERHEAT] = { .name = _("TM50"), - .itemId = ITEM_TM50_OVERHEAT, + .itemId = ITEM_TM50, .price = 3000, .description = sTM50Desc, .pocket = POCKET_TM_HM, @@ -4063,10 +4063,10 @@ const struct Item gItems[] = .fieldUseFunc = ItemUseOutOfBattle_TMHM, }, - [ITEM_HM01_CUT] = + [ITEM_HM_CUT] = { .name = _("HM01"), - .itemId = ITEM_HM01_CUT, + .itemId = ITEM_HM01, .price = 0, .description = sHM01Desc, .importance = 1, @@ -4075,10 +4075,10 @@ const struct Item gItems[] = .fieldUseFunc = ItemUseOutOfBattle_TMHM, }, - [ITEM_HM02_FLY] = + [ITEM_HM_FLY] = { .name = _("HM02"), - .itemId = ITEM_HM02_FLY, + .itemId = ITEM_HM02, .price = 0, .description = sHM02Desc, .importance = 1, @@ -4087,10 +4087,10 @@ const struct Item gItems[] = .fieldUseFunc = ItemUseOutOfBattle_TMHM, }, - [ITEM_HM03_SURF] = + [ITEM_HM_SURF] = { .name = _("HM03"), - .itemId = ITEM_HM03_SURF, + .itemId = ITEM_HM03, .price = 0, .description = sHM03Desc, .importance = 1, @@ -4099,10 +4099,10 @@ const struct Item gItems[] = .fieldUseFunc = ItemUseOutOfBattle_TMHM, }, - [ITEM_HM04_STRENGTH] = + [ITEM_HM_STRENGTH] = { .name = _("HM04"), - .itemId = ITEM_HM04_STRENGTH, + .itemId = ITEM_HM04, .price = 0, .description = sHM04Desc, .importance = 1, @@ -4111,10 +4111,10 @@ const struct Item gItems[] = .fieldUseFunc = ItemUseOutOfBattle_TMHM, }, - [ITEM_HM05_FLASH] = + [ITEM_HM_FLASH] = { .name = _("HM05"), - .itemId = ITEM_HM05_FLASH, + .itemId = ITEM_HM05, .price = 0, .description = sHM05Desc, .importance = 1, @@ -4123,10 +4123,10 @@ const struct Item gItems[] = .fieldUseFunc = ItemUseOutOfBattle_TMHM, }, - [ITEM_HM06_ROCK_SMASH] = + [ITEM_HM_ROCK_SMASH] = { .name = _("HM06"), - .itemId = ITEM_HM06_ROCK_SMASH, + .itemId = ITEM_HM06, .price = 0, .description = sHM06Desc, .importance = 1, @@ -4135,10 +4135,10 @@ const struct Item gItems[] = .fieldUseFunc = ItemUseOutOfBattle_TMHM, }, - [ITEM_HM07_WATERFALL] = + [ITEM_HM_WATERFALL] = { .name = _("HM07"), - .itemId = ITEM_HM07_WATERFALL, + .itemId = ITEM_HM07, .price = 0, .description = sHM07Desc, .importance = 1, @@ -4147,10 +4147,10 @@ const struct Item gItems[] = .fieldUseFunc = ItemUseOutOfBattle_TMHM, }, - [ITEM_HM08_DIVE] = + [ITEM_HM_DIVE] = { .name = _("HM08"), - .itemId = ITEM_HM08_DIVE, + .itemId = ITEM_HM08, .price = 0, .description = sHM08Desc, .importance = 1, diff --git a/src/data/lilycove_lady.h b/src/data/lilycove_lady.h index 4a3a7a7194..fdfb83478f 100644 --- a/src/data/lilycove_lady.h +++ b/src/data/lilycove_lady.h @@ -279,7 +279,7 @@ static const u16 sQuizLadyPrizes[] = ITEM_BELUE_BERRY, ITEM_DURIN_BERRY, ITEM_LUXURY_BALL, - ITEM_TM15_HYPER_BEAM, + ITEM_TM_HYPER_BEAM, ITEM_BIG_PEARL, ITEM_STAR_PIECE, ITEM_RARE_CANDY, diff --git a/src/data/object_events/object_event_graphics.h b/src/data/object_events/object_event_graphics.h index 9c702c80eb..3d37376682 100755 --- a/src/data/object_events/object_event_graphics.h +++ b/src/data/object_events/object_event_graphics.h @@ -722,11 +722,11 @@ const u32 gObjectEventPic_Feebas[] = INCBIN_U32("graphics/object_events/pics/pok const u32 gObjectEventPic_Milotic[] = INCBIN_U32("graphics/object_events/pics/pokemon/milotic.4bpp"); const u32 gObjectEventPic_Castform[] = INCBIN_U32("graphics/object_events/pics/pokemon/castform.4bpp"); const u32 gObjectEventPic_CastformSunny[] = INCBIN_U32("graphics/object_events/pics/pokemon/castform_sunny.4bpp"); -const u16 gObjectEventPal_CastformSunny[] = INCBIN_U16("graphics/pokemon/castform/normal_sunny_form.gbapal"); +const u16 gObjectEventPal_CastformSunny[] = INCBIN_U16("graphics/pokemon/castform/sunny/normal.gbapal"); const u32 gObjectEventPic_CastformRainy[] = INCBIN_U32("graphics/object_events/pics/pokemon/castform_rainy.4bpp"); -const u16 gObjectEventPal_CastformRainy[] = INCBIN_U16("graphics/pokemon/castform/normal_rainy_form.gbapal"); +const u16 gObjectEventPal_CastformRainy[] = INCBIN_U16("graphics/pokemon/castform/rainy/normal.gbapal"); const u32 gObjectEventPic_CastformSnowy[] = INCBIN_U32("graphics/object_events/pics/pokemon/castform_snowy.4bpp"); -const u16 gObjectEventPal_CastformSnowy[] = INCBIN_U16("graphics/pokemon/castform/normal_snowy_form.gbapal"); +const u16 gObjectEventPal_CastformSnowy[] = INCBIN_U16("graphics/pokemon/castform/snowy/normal.gbapal"); const u32 gObjectEventPic_Kecleon[] = INCBIN_U32("graphics/object_events/pics/pokemon/kecleon.4bpp"); const u32 gObjectEventPic_Shuppet[] = INCBIN_U32("graphics/object_events/pics/pokemon/shuppet.4bpp"); const u32 gObjectEventPic_Banette[] = INCBIN_U32("graphics/object_events/pics/pokemon/banette.4bpp"); diff --git a/src/data/object_events/object_event_subsprites.h b/src/data/object_events/object_event_subsprites.h index 8084919927..7a3c90dc4d 100755 --- a/src/data/object_events/object_event_subsprites.h +++ b/src/data/object_events/object_event_subsprites.h @@ -279,6 +279,204 @@ static const struct SubspriteTable sOamTables_32x32[] = { }; static const struct Subsprite sOamTable_48x48[] = { + { + .x = -24, + .y = -24, + .shape = SPRITE_SHAPE(32x8), + .size = SPRITE_SIZE(32x8), + .tileOffset = 0, + .priority = 1 + }, + { + .x = 8, + .y = -24, + .shape = SPRITE_SHAPE(16x8), + .size = SPRITE_SIZE(16x8), + .tileOffset = 4, + .priority = 1 + }, + { + .x = -24, + .y = -16, + .shape = SPRITE_SHAPE(32x8), + .size = SPRITE_SIZE(32x8), + .tileOffset = 6, + .priority = 1 + }, + { + .x = 8, + .y = -16, + .shape = SPRITE_SHAPE(16x8), + .size = SPRITE_SIZE(16x8), + .tileOffset = 10, + .priority = 1 + }, + { + .x = -24, + .y = -8, + .shape = SPRITE_SHAPE(32x8), + .size = SPRITE_SIZE(32x8), + .tileOffset = 12, + .priority = 2 + }, + { + .x = 8, + .y = -8, + .shape = SPRITE_SHAPE(16x8), + .size = SPRITE_SIZE(16x8), + .tileOffset = 16, + .priority = 2 + }, + { + .x = -24, + .y = 0, + .shape = SPRITE_SHAPE(32x8), + .size = SPRITE_SIZE(32x8), + .tileOffset = 18, + .priority = 2 + }, + { + .x = 8, + .y = 0, + .shape = SPRITE_SHAPE(16x8), + .size = SPRITE_SIZE(16x8), + .tileOffset = 22, + .priority = 2 + }, + { + .x = -24, + .y = 8, + .shape = SPRITE_SHAPE(32x8), + .size = SPRITE_SIZE(32x8), + .tileOffset = 24, + .priority = 2 + }, + { + .x = 8, + .y = 8, + .shape = SPRITE_SHAPE(16x8), + .size = SPRITE_SIZE(16x8), + .tileOffset = 28, + .priority = 2 + }, + { + .x = -24, + .y = 16, + .shape = SPRITE_SHAPE(32x8), + .size = SPRITE_SIZE(32x8), + .tileOffset = 30, + .priority = 2 + }, + { + .x = 8, + .y = 16, + .shape = SPRITE_SHAPE(16x8), + .size = SPRITE_SIZE(16x8), + .tileOffset = 34, + .priority = 2 + } +}; + +static const struct Subsprite sOamTable_48x48_4[] = { + { + .x = -24, + .y = -24, + .shape = SPRITE_SHAPE(32x8), + .size = SPRITE_SIZE(32x8), + .tileOffset = 0, + .priority = 1 + }, + { + .x = 8, + .y = -24, + .shape = SPRITE_SHAPE(16x8), + .size = SPRITE_SIZE(16x8), + .tileOffset = 4, + .priority = 1 + }, + { + .x = -24, + .y = -16, + .shape = SPRITE_SHAPE(32x8), + .size = SPRITE_SIZE(32x8), + .tileOffset = 6, + .priority = 1 + }, + { + .x = 8, + .y = -16, + .shape = SPRITE_SHAPE(16x8), + .size = SPRITE_SIZE(16x8), + .tileOffset = 10, + .priority = 1 + }, + { + .x = -24, + .y = -8, + .shape = SPRITE_SHAPE(32x8), + .size = SPRITE_SIZE(32x8), + .tileOffset = 12, + .priority = 1 + }, + { + .x = 8, + .y = -8, + .shape = SPRITE_SHAPE(16x8), + .size = SPRITE_SIZE(16x8), + .tileOffset = 16, + .priority = 1 + }, + { + .x = -24, + .y = 0, + .shape = SPRITE_SHAPE(32x8), + .size = SPRITE_SIZE(32x8), + .tileOffset = 18, + .priority = 1 + }, + { + .x = 8, + .y = 0, + .shape = SPRITE_SHAPE(16x8), + .size = SPRITE_SIZE(16x8), + .tileOffset = 22, + .priority = 1 + }, + { + .x = -24, + .y = 8, + .shape = SPRITE_SHAPE(32x8), + .size = SPRITE_SIZE(32x8), + .tileOffset = 24, + .priority = 1 + }, + { + .x = 8, + .y = 8, + .shape = SPRITE_SHAPE(16x8), + .size = SPRITE_SIZE(16x8), + .tileOffset = 28, + .priority = 1 + }, + { + .x = -24, + .y = 16, + .shape = SPRITE_SHAPE(32x8), + .size = SPRITE_SIZE(32x8), + .tileOffset = 30, + .priority = 1 + }, + { + .x = 8, + .y = 16, + .shape = SPRITE_SHAPE(16x8), + .size = SPRITE_SIZE(16x8), + .tileOffset = 34, + .priority = 1 + } +}; + +static const struct Subsprite sOamTable_48x48_HotSprings[] = { { .x = -24, .y = -24, @@ -365,7 +563,7 @@ static const struct Subsprite sOamTable_48x48[] = { .shape = SPRITE_SHAPE(32x8), .size = SPRITE_SIZE(32x8), .tileOffset = 30, - .priority = 2 + .priority = 3 }, { .x = 8, @@ -373,17 +571,215 @@ static const struct Subsprite sOamTable_48x48[] = { .shape = SPRITE_SHAPE(16x8), .size = SPRITE_SIZE(16x8), .tileOffset = 34, + .priority = 3 + } +}; + +static const struct Subsprite sOamTable_48x48_Grass2[] = { + { + .x = -24, + .y = -24, + .shape = SPRITE_SHAPE(32x8), + .size = SPRITE_SIZE(32x8), + .tileOffset = 0, .priority = 2 + }, + { + .x = 8, + .y = -24, + .shape = SPRITE_SHAPE(16x8), + .size = SPRITE_SIZE(16x8), + .tileOffset = 4, + .priority = 2 + }, + { + .x = -24, + .y = -16, + .shape = SPRITE_SHAPE(32x8), + .size = SPRITE_SIZE(32x8), + .tileOffset = 6, + .priority = 2 + }, + { + .x = 8, + .y = -16, + .shape = SPRITE_SHAPE(16x8), + .size = SPRITE_SIZE(16x8), + .tileOffset = 10, + .priority = 2 + }, + { + .x = -24, + .y = -8, + .shape = SPRITE_SHAPE(32x8), + .size = SPRITE_SIZE(32x8), + .tileOffset = 12, + .priority = 2 + }, + { + .x = 8, + .y = -8, + .shape = SPRITE_SHAPE(16x8), + .size = SPRITE_SIZE(16x8), + .tileOffset = 16, + .priority = 2 + }, + { + .x = -24, + .y = 0, + .shape = SPRITE_SHAPE(32x8), + .size = SPRITE_SIZE(32x8), + .tileOffset = 18, + .priority = 2 + }, + { + .x = 8, + .y = 0, + .shape = SPRITE_SHAPE(16x8), + .size = SPRITE_SIZE(16x8), + .tileOffset = 22, + .priority = 2 + }, + { + .x = -24, + .y = 8, + .shape = SPRITE_SHAPE(32x8), + .size = SPRITE_SIZE(32x8), + .tileOffset = 24, + .priority = 3 + }, + { + .x = 8, + .y = 8, + .shape = SPRITE_SHAPE(16x8), + .size = SPRITE_SIZE(16x8), + .tileOffset = 28, + .priority = 3 + }, + { + .x = -24, + .y = 16, + .shape = SPRITE_SHAPE(32x8), + .size = SPRITE_SIZE(32x8), + .tileOffset = 30, + .priority = 3 + }, + { + .x = 8, + .y = 16, + .shape = SPRITE_SHAPE(16x8), + .size = SPRITE_SIZE(16x8), + .tileOffset = 34, + .priority = 3 + } +}; + +static const struct Subsprite sOamTable_48x48_Grass1[] = { + { + .x = -24, + .y = -24, + .shape = SPRITE_SHAPE(32x8), + .size = SPRITE_SIZE(32x8), + .tileOffset = 0, + .priority = 1 + }, + { + .x = 8, + .y = -24, + .shape = SPRITE_SHAPE(16x8), + .size = SPRITE_SIZE(16x8), + .tileOffset = 4, + .priority = 1 + }, + { + .x = -24, + .y = -16, + .shape = SPRITE_SHAPE(32x8), + .size = SPRITE_SIZE(32x8), + .tileOffset = 6, + .priority = 1 + }, + { + .x = 8, + .y = -16, + .shape = SPRITE_SHAPE(16x8), + .size = SPRITE_SIZE(16x8), + .tileOffset = 10, + .priority = 1 + }, + { + .x = -24, + .y = -8, + .shape = SPRITE_SHAPE(32x8), + .size = SPRITE_SIZE(32x8), + .tileOffset = 12, + .priority = 1 + }, + { + .x = 8, + .y = -8, + .shape = SPRITE_SHAPE(16x8), + .size = SPRITE_SIZE(16x8), + .tileOffset = 16, + .priority = 1 + }, + { + .x = -24, + .y = 0, + .shape = SPRITE_SHAPE(32x8), + .size = SPRITE_SIZE(32x8), + .tileOffset = 18, + .priority = 1 + }, + { + .x = 8, + .y = 0, + .shape = SPRITE_SHAPE(16x8), + .size = SPRITE_SIZE(16x8), + .tileOffset = 22, + .priority = 1 + }, + { + .x = -24, + .y = 8, + .shape = SPRITE_SHAPE(32x8), + .size = SPRITE_SIZE(32x8), + .tileOffset = 24, + .priority = 3 + }, + { + .x = 8, + .y = 8, + .shape = SPRITE_SHAPE(16x8), + .size = SPRITE_SIZE(16x8), + .tileOffset = 28, + .priority = 3 + }, + { + .x = -24, + .y = 16, + .shape = SPRITE_SHAPE(32x8), + .size = SPRITE_SIZE(32x8), + .tileOffset = 30, + .priority = 3 + }, + { + .x = 8, + .y = 16, + .shape = SPRITE_SHAPE(16x8), + .size = SPRITE_SIZE(16x8), + .tileOffset = 34, + .priority = 3 } }; static const struct SubspriteTable sOamTables_48x48[] = { {ARRAY_COUNT(sOamTable_48x48), sOamTable_48x48}, - {ARRAY_COUNT(sOamTable_48x48), sOamTable_48x48}, - {ARRAY_COUNT(sOamTable_48x48), sOamTable_48x48}, - {ARRAY_COUNT(sOamTable_48x48), sOamTable_48x48}, - {ARRAY_COUNT(sOamTable_48x48), sOamTable_48x48}, - {ARRAY_COUNT(sOamTable_48x48), sOamTable_48x48} + {ARRAY_COUNT(sOamTable_48x48), sOamTable_48x48}, // elevation 3 + {ARRAY_COUNT(sOamTable_48x48_4), sOamTable_48x48_4}, // elevation 4 + {ARRAY_COUNT(sOamTable_48x48_HotSprings), sOamTable_48x48_HotSprings}, // hot springs + {ARRAY_COUNT(sOamTable_48x48_Grass2), sOamTable_48x48_Grass2}, // long grass + {ARRAY_COUNT(sOamTable_48x48_Grass1), sOamTable_48x48_Grass1} // long grass priority 1 }; static const struct Subsprite sOamTable_64x32_0[] = { @@ -493,6 +889,263 @@ static const struct SubspriteTable sOamTables_64x64[] = { {ARRAY_COUNT(sOamTable_64x64_3), sOamTable_64x64_3} }; +static const struct Subsprite sOamTable_64x64_Follower[] = { + { + .x = -32, + .y = -32, + .shape = SPRITE_SHAPE(64x32), + .size = SPRITE_SIZE(64x32), + .tileOffset = 0, + .priority = 1 + }, + { + .x = -32, + .y = 0, + .shape = SPRITE_SHAPE(64x32), + .size = SPRITE_SIZE(64x32), + .tileOffset = 32, + .priority = 2 + } +}; + +static const struct Subsprite sOamTable_64x64_HotSprings[] = { + { + .x = -32, + .y = -32, + .shape = SPRITE_SHAPE(64x32), + .size = SPRITE_SIZE(64x32), + .tileOffset = 0, + .priority = 2 + }, + { + .x = -32, + .y = 0, + .shape = SPRITE_SHAPE(32x8), + .size = SPRITE_SIZE(32x8), + .tileOffset = 32, + .priority = 2 + }, + { + .x = 0, + .y = 0, + .shape = SPRITE_SHAPE(32x8), + .size = SPRITE_SIZE(32x8), + .tileOffset = 36, + .priority = 2 + }, + { + .x = -32, + .y = 8, + .shape = SPRITE_SHAPE(32x8), + .size = SPRITE_SIZE(32x8), + .tileOffset = 40, + .priority = 2 + }, + { + .x = 0, + .y = 8, + .shape = SPRITE_SHAPE(32x8), + .size = SPRITE_SIZE(32x8), + .tileOffset = 44, + .priority = 2 + }, + { + .x = -32, + .y = 16, + .shape = SPRITE_SHAPE(32x8), + .size = SPRITE_SIZE(32x8), + .tileOffset = 48, + .priority = 2 + }, + { + .x = 0, + .y = 16, + .shape = SPRITE_SHAPE(32x8), + .size = SPRITE_SIZE(32x8), + .tileOffset = 52, + .priority = 2 + }, + { + .x = -32, + .y = 24, + .shape = SPRITE_SHAPE(32x8), + .size = SPRITE_SIZE(32x8), + .tileOffset = 56, + .priority = 3 + }, + { + .x = 0, + .y = 24, + .shape = SPRITE_SHAPE(32x8), + .size = SPRITE_SIZE(32x8), + .tileOffset = 60, + .priority = 3 + }, +}; + +static const struct Subsprite sOamTable_64x64_Grass2[] = { + { + .x = -32, + .y = -32, + .shape = SPRITE_SHAPE(64x32), + .size = SPRITE_SIZE(64x32), + .tileOffset = 0, + .priority = 2 + }, + { + .x = -32, + .y = 0, + .shape = SPRITE_SHAPE(32x8), + .size = SPRITE_SIZE(32x8), + .tileOffset = 32, + .priority = 2 + }, + { + .x = 0, + .y = 0, + .shape = SPRITE_SHAPE(32x8), + .size = SPRITE_SIZE(32x8), + .tileOffset = 36, + .priority = 2 + }, + { + .x = -32, + .y = 8, + .shape = SPRITE_SHAPE(32x8), + .size = SPRITE_SIZE(32x8), + .tileOffset = 40, + .priority = 2 + }, + { + .x = 0, + .y = 8, + .shape = SPRITE_SHAPE(32x8), + .size = SPRITE_SIZE(32x8), + .tileOffset = 44, + .priority = 2 + }, + { + .x = -32, + .y = 16, + .shape = SPRITE_SHAPE(32x8), + .size = SPRITE_SIZE(32x8), + .tileOffset = 48, + .priority = 3 + }, + { + .x = 0, + .y = 16, + .shape = SPRITE_SHAPE(32x8), + .size = SPRITE_SIZE(32x8), + .tileOffset = 52, + .priority = 3 + }, + { + .x = -32, + .y = 24, + .shape = SPRITE_SHAPE(32x8), + .size = SPRITE_SIZE(32x8), + .tileOffset = 56, + .priority = 3 + }, + { + .x = 0, + .y = 24, + .shape = SPRITE_SHAPE(32x8), + .size = SPRITE_SIZE(32x8), + .tileOffset = 60, + .priority = 3 + }, +}; + +static const struct Subsprite sOamTable_64x64_Grass1[] = { + { + .x = -32, + .y = -32, + .shape = SPRITE_SHAPE(64x32), + .size = SPRITE_SIZE(64x32), + .tileOffset = 0, + .priority = 1 + }, + { + .x = -32, + .y = 0, + .shape = SPRITE_SHAPE(32x8), + .size = SPRITE_SIZE(32x8), + .tileOffset = 32, + .priority = 1 + }, + { + .x = 0, + .y = 0, + .shape = SPRITE_SHAPE(32x8), + .size = SPRITE_SIZE(32x8), + .tileOffset = 36, + .priority = 1 + }, + { + .x = -32, + .y = 8, + .shape = SPRITE_SHAPE(32x8), + .size = SPRITE_SIZE(32x8), + .tileOffset = 40, + .priority = 1 + }, + { + .x = 0, + .y = 8, + .shape = SPRITE_SHAPE(32x8), + .size = SPRITE_SIZE(32x8), + .tileOffset = 44, + .priority = 1 + }, + { + .x = -32, + .y = 16, + .shape = SPRITE_SHAPE(32x8), + .size = SPRITE_SIZE(32x8), + .tileOffset = 48, + .priority = 3 + }, + { + .x = 0, + .y = 16, + .shape = SPRITE_SHAPE(32x8), + .size = SPRITE_SIZE(32x8), + .tileOffset = 52, + .priority = 3 + }, + { + .x = -32, + .y = 24, + .shape = SPRITE_SHAPE(32x8), + .size = SPRITE_SIZE(32x8), + .tileOffset = 56, + .priority = 3 + }, + { + .x = 0, + .y = 24, + .shape = SPRITE_SHAPE(32x8), + .size = SPRITE_SIZE(32x8), + .tileOffset = 60, + .priority = 3 + }, +}; + +// For following pokemon +// Makes the top 32 pixels priority 1, +// so that very tall pokemon's heads +// will appear on top of buildings, etc. +static const struct SubspriteTable sOamTables_64x64_Follower[] = { + {}, // unused + {ARRAY_COUNT(sOamTable_64x64_Follower), sOamTable_64x64_Follower}, // elevation 3 + {ARRAY_COUNT(sOamTable_64x64_1), sOamTable_64x64_1}, // elevation 4 + {ARRAY_COUNT(sOamTable_64x64_HotSprings), sOamTable_64x64_HotSprings}, // hot springs + {ARRAY_COUNT(sOamTable_64x64_Grass2), sOamTable_64x64_Grass2}, // long grass + {ARRAY_COUNT(sOamTable_64x64_Grass1), sOamTable_64x64_Grass1} // long grass priority 1 +}; + static const struct Subsprite sOamTable_96x40_0[] = { { .x = -48, diff --git a/src/data/party_menu.h b/src/data/party_menu.h index 7a9efce0b8..90faab0777 100644 --- a/src/data/party_menu.h +++ b/src/data/party_menu.h @@ -1117,64 +1117,17 @@ static const u8 *const sUnused_StatStrings[] = gText_Speed2 }; +/* Expands to: + * static const u16 sTMHMMoves[] = + * { + * MOVE_FOCUS_PUNCH, + * ... + * MOVE_CUT, + * ... + * }; */ +#define TMHM_MOVE(id) CAT(MOVE_, id), static const u16 sTMHMMoves[] = { - [ITEM_TM01 - ITEM_TM01] = MOVE_FOCUS_PUNCH, - [ITEM_TM02 - ITEM_TM01] = MOVE_DRAGON_CLAW, - [ITEM_TM03 - ITEM_TM01] = MOVE_WATER_PULSE, - [ITEM_TM04 - ITEM_TM01] = MOVE_CALM_MIND, - [ITEM_TM05 - ITEM_TM01] = MOVE_ROAR, - [ITEM_TM06 - ITEM_TM01] = MOVE_TOXIC, - [ITEM_TM07 - ITEM_TM01] = MOVE_HAIL, - [ITEM_TM08 - ITEM_TM01] = MOVE_BULK_UP, - [ITEM_TM09 - ITEM_TM01] = MOVE_BULLET_SEED, - [ITEM_TM10 - ITEM_TM01] = MOVE_HIDDEN_POWER, - [ITEM_TM11 - ITEM_TM01] = MOVE_SUNNY_DAY, - [ITEM_TM12 - ITEM_TM01] = MOVE_TAUNT, - [ITEM_TM13 - ITEM_TM01] = MOVE_ICE_BEAM, - [ITEM_TM14 - ITEM_TM01] = MOVE_BLIZZARD, - [ITEM_TM15 - ITEM_TM01] = MOVE_HYPER_BEAM, - [ITEM_TM16 - ITEM_TM01] = MOVE_LIGHT_SCREEN, - [ITEM_TM17 - ITEM_TM01] = MOVE_PROTECT, - [ITEM_TM18 - ITEM_TM01] = MOVE_RAIN_DANCE, - [ITEM_TM19 - ITEM_TM01] = MOVE_GIGA_DRAIN, - [ITEM_TM20 - ITEM_TM01] = MOVE_SAFEGUARD, - [ITEM_TM21 - ITEM_TM01] = MOVE_FRUSTRATION, - [ITEM_TM22 - ITEM_TM01] = MOVE_SOLAR_BEAM, - [ITEM_TM23 - ITEM_TM01] = MOVE_IRON_TAIL, - [ITEM_TM24 - ITEM_TM01] = MOVE_THUNDERBOLT, - [ITEM_TM25 - ITEM_TM01] = MOVE_THUNDER, - [ITEM_TM26 - ITEM_TM01] = MOVE_EARTHQUAKE, - [ITEM_TM27 - ITEM_TM01] = MOVE_RETURN, - [ITEM_TM28 - ITEM_TM01] = MOVE_DIG, - [ITEM_TM29 - ITEM_TM01] = MOVE_PSYCHIC, - [ITEM_TM30 - ITEM_TM01] = MOVE_SHADOW_BALL, - [ITEM_TM31 - ITEM_TM01] = MOVE_BRICK_BREAK, - [ITEM_TM32 - ITEM_TM01] = MOVE_DOUBLE_TEAM, - [ITEM_TM33 - ITEM_TM01] = MOVE_REFLECT, - [ITEM_TM34 - ITEM_TM01] = MOVE_SHOCK_WAVE, - [ITEM_TM35 - ITEM_TM01] = MOVE_FLAMETHROWER, - [ITEM_TM36 - ITEM_TM01] = MOVE_SLUDGE_BOMB, - [ITEM_TM37 - ITEM_TM01] = MOVE_SANDSTORM, - [ITEM_TM38 - ITEM_TM01] = MOVE_FIRE_BLAST, - [ITEM_TM39 - ITEM_TM01] = MOVE_ROCK_TOMB, - [ITEM_TM40 - ITEM_TM01] = MOVE_AERIAL_ACE, - [ITEM_TM41 - ITEM_TM01] = MOVE_TORMENT, - [ITEM_TM42 - ITEM_TM01] = MOVE_FACADE, - [ITEM_TM43 - ITEM_TM01] = MOVE_SECRET_POWER, - [ITEM_TM44 - ITEM_TM01] = MOVE_REST, - [ITEM_TM45 - ITEM_TM01] = MOVE_ATTRACT, - [ITEM_TM46 - ITEM_TM01] = MOVE_THIEF, - [ITEM_TM47 - ITEM_TM01] = MOVE_STEEL_WING, - [ITEM_TM48 - ITEM_TM01] = MOVE_SKILL_SWAP, - [ITEM_TM49 - ITEM_TM01] = MOVE_SNATCH, - [ITEM_TM50 - ITEM_TM01] = MOVE_OVERHEAT, - [ITEM_HM01 - ITEM_TM01] = MOVE_CUT, - [ITEM_HM02 - ITEM_TM01] = MOVE_FLY, - [ITEM_HM03 - ITEM_TM01] = MOVE_SURF, - [ITEM_HM04 - ITEM_TM01] = MOVE_STRENGTH, - [ITEM_HM05 - ITEM_TM01] = MOVE_FLASH, - [ITEM_HM06 - ITEM_TM01] = MOVE_ROCK_SMASH, - [ITEM_HM07 - ITEM_TM01] = MOVE_WATERFALL, - [ITEM_HM08 - ITEM_TM01] = MOVE_DIVE, + FOREACH_TMHM(TMHM_MOVE) }; +#undef TMHM_MOVE diff --git a/src/data/pokemon/tmhm_learnsets.h b/src/data/pokemon/tmhm_learnsets.h index cb42d7c6fc..4357cdd1a3 100644 --- a/src/data/pokemon/tmhm_learnsets.h +++ b/src/data/pokemon/tmhm_learnsets.h @@ -1,9388 +1,10183 @@ -#define TMHM_LEARNSET(moves) {(u32)(moves), ((u64)(moves) >> 32)} -#define TMHM(tmhm) ((u64)1 << (ITEM_##tmhm - ITEM_TM01_FOCUS_PUNCH)) - -// This table determines which TMs and HMs a species is capable of learning. -// Each entry is a 64-bit bit array spread across two 32-bit values, with -// each bit corresponding to a TM or HM. -const u32 gTMHMLearnsets[][2] = +/* Expands to: + * struct TMHMLearnset + * { + * u32 FOCUS_PUNCH:1; + * ... + * u32 CUT:1; + * ... + * }; */ +#define TMHM_LEARN(id) u32 id:1; +struct TMHMLearnset { - [SPECIES_NONE] = TMHM_LEARNSET(0), - - [SPECIES_BULBASAUR] = TMHM_LEARNSET(TMHM(TM06_TOXIC) - | TMHM(TM09_BULLET_SEED) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM17_PROTECT) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM27_RETURN) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM01_CUT) - | TMHM(HM04_STRENGTH) - | TMHM(HM05_FLASH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_IVYSAUR] = TMHM_LEARNSET(TMHM(TM06_TOXIC) - | TMHM(TM09_BULLET_SEED) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM17_PROTECT) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM27_RETURN) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM01_CUT) - | TMHM(HM04_STRENGTH) - | TMHM(HM05_FLASH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_VENUSAUR] = TMHM_LEARNSET(TMHM(TM05_ROAR) - | TMHM(TM06_TOXIC) - | TMHM(TM09_BULLET_SEED) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM01_CUT) - | TMHM(HM04_STRENGTH) - | TMHM(HM05_FLASH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_CHARMANDER] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM02_DRAGON_CLAW) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM17_PROTECT) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM50_OVERHEAT) - | TMHM(HM01_CUT) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_CHARMELEON] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM02_DRAGON_CLAW) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM17_PROTECT) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM50_OVERHEAT) - | TMHM(HM01_CUT) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_CHARIZARD] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM02_DRAGON_CLAW) - | TMHM(TM05_ROAR) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM47_STEEL_WING) - | TMHM(TM50_OVERHEAT) - | TMHM(HM01_CUT) - | TMHM(HM02_FLY) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_SQUIRTLE] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM03_WATER_PULSE) - | TMHM(TM06_TOXIC) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM03_SURF) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH) - | TMHM(HM07_WATERFALL) - | TMHM(HM08_DIVE)), - - [SPECIES_WARTORTLE] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM03_WATER_PULSE) - | TMHM(TM06_TOXIC) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM03_SURF) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH) - | TMHM(HM07_WATERFALL) - | TMHM(HM08_DIVE)), - - [SPECIES_BLASTOISE] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM03_WATER_PULSE) - | TMHM(TM05_ROAR) - | TMHM(TM06_TOXIC) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM03_SURF) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH) - | TMHM(HM07_WATERFALL) - | TMHM(HM08_DIVE)), - - [SPECIES_CATERPIE] = TMHM_LEARNSET(0), - - [SPECIES_METAPOD] = TMHM_LEARNSET(0), - - [SPECIES_BUTTERFREE] = TMHM_LEARNSET(TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM27_RETURN) - | TMHM(TM29_PSYCHIC) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(TM48_SKILL_SWAP) - | TMHM(HM05_FLASH)), - - [SPECIES_WEEDLE] = TMHM_LEARNSET(0), - - [SPECIES_KAKUNA] = TMHM_LEARNSET(0), - - [SPECIES_BEEDRILL] = TMHM_LEARNSET(TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM27_RETURN) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(HM01_CUT) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_PIDGEY] = TMHM_LEARNSET(TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM27_RETURN) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(TM47_STEEL_WING) - | TMHM(HM02_FLY)), - - [SPECIES_PIDGEOTTO] = TMHM_LEARNSET(TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM27_RETURN) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(TM47_STEEL_WING) - | TMHM(HM02_FLY)), - - [SPECIES_PIDGEOT] = TMHM_LEARNSET(TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM27_RETURN) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(TM47_STEEL_WING) - | TMHM(HM02_FLY)), - - [SPECIES_RATTATA] = TMHM_LEARNSET(TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM25_THUNDER) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(HM01_CUT) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_RATICATE] = TMHM_LEARNSET(TMHM(TM05_ROAR) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM25_THUNDER) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(HM01_CUT) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_SPEAROW] = TMHM_LEARNSET(TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM27_RETURN) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(TM47_STEEL_WING) - | TMHM(HM02_FLY)), - - [SPECIES_FEAROW] = TMHM_LEARNSET(TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM27_RETURN) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(TM47_STEEL_WING) - | TMHM(HM02_FLY)), - - [SPECIES_EKANS] = TMHM_LEARNSET(TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM41_TORMENT) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(TM49_SNATCH) - | TMHM(HM04_STRENGTH)), - - [SPECIES_ARBOK] = TMHM_LEARNSET(TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM41_TORMENT) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(TM49_SNATCH) - | TMHM(HM04_STRENGTH)), - - [SPECIES_PIKACHU] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM25_THUNDER) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM04_STRENGTH) - | TMHM(HM05_FLASH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_RAICHU] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM25_THUNDER) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(HM04_STRENGTH) - | TMHM(HM05_FLASH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_SANDSHREW] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM17_PROTECT) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM37_SANDSTORM) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(HM01_CUT) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_SANDSLASH] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM37_SANDSTORM) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(HM01_CUT) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_NIDORAN_F] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM25_THUNDER) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(HM01_CUT) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_NIDORINA] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM25_THUNDER) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(HM01_CUT) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_NIDOQUEEN] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM03_WATER_PULSE) - | TMHM(TM05_ROAR) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM25_THUNDER) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM37_SANDSTORM) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM41_TORMENT) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(HM01_CUT) - | TMHM(HM03_SURF) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_NIDORAN_M] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM25_THUNDER) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(HM01_CUT) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_NIDORINO] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM25_THUNDER) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(HM01_CUT) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_NIDOKING] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM03_WATER_PULSE) - | TMHM(TM05_ROAR) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM25_THUNDER) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM37_SANDSTORM) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM41_TORMENT) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(HM01_CUT) - | TMHM(HM03_SURF) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_CLEFAIRY] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM03_WATER_PULSE) - | TMHM(TM04_CALM_MIND) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM25_THUNDER) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM29_PSYCHIC) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM33_REFLECT) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM49_SNATCH) - | TMHM(HM04_STRENGTH) - | TMHM(HM05_FLASH)), - - [SPECIES_CLEFABLE] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM03_WATER_PULSE) - | TMHM(TM04_CALM_MIND) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM25_THUNDER) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM29_PSYCHIC) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM33_REFLECT) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM49_SNATCH) - | TMHM(HM04_STRENGTH) - | TMHM(HM05_FLASH)), - - [SPECIES_VULPIX] = TMHM_LEARNSET(TMHM(TM05_ROAR) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM17_PROTECT) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM50_OVERHEAT)), - - [SPECIES_NINETALES] = TMHM_LEARNSET(TMHM(TM05_ROAR) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM50_OVERHEAT)), - - [SPECIES_JIGGLYPUFF] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM03_WATER_PULSE) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM25_THUNDER) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM29_PSYCHIC) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM33_REFLECT) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM49_SNATCH) - | TMHM(HM04_STRENGTH) - | TMHM(HM05_FLASH)), - - [SPECIES_WIGGLYTUFF] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM03_WATER_PULSE) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM25_THUNDER) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM29_PSYCHIC) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM33_REFLECT) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM49_SNATCH) - | TMHM(HM04_STRENGTH) - | TMHM(HM05_FLASH)), - - [SPECIES_ZUBAT] = TMHM_LEARNSET(TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM27_RETURN) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM41_TORMENT) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(TM47_STEEL_WING) - | TMHM(TM49_SNATCH)), - - [SPECIES_GOLBAT] = TMHM_LEARNSET(TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM27_RETURN) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM41_TORMENT) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(TM47_STEEL_WING) - | TMHM(TM49_SNATCH)), - - [SPECIES_ODDISH] = TMHM_LEARNSET(TMHM(TM06_TOXIC) - | TMHM(TM09_BULLET_SEED) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM17_PROTECT) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM27_RETURN) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM01_CUT) - | TMHM(HM05_FLASH)), - - [SPECIES_GLOOM] = TMHM_LEARNSET(TMHM(TM06_TOXIC) - | TMHM(TM09_BULLET_SEED) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM17_PROTECT) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM27_RETURN) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM01_CUT) - | TMHM(HM05_FLASH)), - - [SPECIES_VILEPLUME] = TMHM_LEARNSET(TMHM(TM06_TOXIC) - | TMHM(TM09_BULLET_SEED) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM27_RETURN) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM01_CUT) - | TMHM(HM05_FLASH)), - - [SPECIES_PARAS] = TMHM_LEARNSET(TMHM(TM06_TOXIC) - | TMHM(TM09_BULLET_SEED) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM17_PROTECT) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(HM01_CUT) - | TMHM(HM05_FLASH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_PARASECT] = TMHM_LEARNSET(TMHM(TM06_TOXIC) - | TMHM(TM09_BULLET_SEED) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(HM01_CUT) - | TMHM(HM05_FLASH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_VENONAT] = TMHM_LEARNSET(TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM17_PROTECT) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM27_RETURN) - | TMHM(TM29_PSYCHIC) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(TM48_SKILL_SWAP) - | TMHM(HM05_FLASH)), - - [SPECIES_VENOMOTH] = TMHM_LEARNSET(TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM27_RETURN) - | TMHM(TM29_PSYCHIC) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(TM48_SKILL_SWAP) - | TMHM(HM05_FLASH)), - - [SPECIES_DIGLETT] = TMHM_LEARNSET(TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM17_PROTECT) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(HM01_CUT) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_DUGTRIO] = TMHM_LEARNSET(TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(HM01_CUT) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_MEOWTH] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM25_THUNDER) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM41_TORMENT) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(TM49_SNATCH) - | TMHM(HM01_CUT) - | TMHM(HM05_FLASH)), - - [SPECIES_PERSIAN] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) - | TMHM(TM05_ROAR) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM25_THUNDER) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM41_TORMENT) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(TM49_SNATCH) - | TMHM(HM01_CUT) - | TMHM(HM05_FLASH)), - - [SPECIES_PSYDUCK] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM03_WATER_PULSE) - | TMHM(TM04_CALM_MIND) - | TMHM(TM06_TOXIC) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM03_SURF) - | TMHM(HM04_STRENGTH) - | TMHM(HM05_FLASH) - | TMHM(HM06_ROCK_SMASH) - | TMHM(HM07_WATERFALL) - | TMHM(HM08_DIVE)), - - [SPECIES_GOLDUCK] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM03_WATER_PULSE) - | TMHM(TM04_CALM_MIND) - | TMHM(TM06_TOXIC) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM03_SURF) - | TMHM(HM04_STRENGTH) - | TMHM(HM05_FLASH) - | TMHM(HM06_ROCK_SMASH) - | TMHM(HM07_WATERFALL) - | TMHM(HM08_DIVE)), - - [SPECIES_MANKEY] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM06_TOXIC) - | TMHM(TM08_BULK_UP) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM25_THUNDER) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(TM50_OVERHEAT) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_PRIMEAPE] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM06_TOXIC) - | TMHM(TM08_BULK_UP) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM25_THUNDER) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(TM50_OVERHEAT) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_GROWLITHE] = TMHM_LEARNSET(TMHM(TM05_ROAR) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM17_PROTECT) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(TM50_OVERHEAT) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_ARCANINE] = TMHM_LEARNSET(TMHM(TM05_ROAR) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(TM50_OVERHEAT) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_POLIWAG] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) - | TMHM(TM06_TOXIC) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM29_PSYCHIC) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(HM03_SURF) - | TMHM(HM07_WATERFALL) - | TMHM(HM08_DIVE)), - - [SPECIES_POLIWHIRL] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM03_WATER_PULSE) - | TMHM(TM06_TOXIC) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM29_PSYCHIC) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(HM03_SURF) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH) - | TMHM(HM07_WATERFALL) - | TMHM(HM08_DIVE)), - - [SPECIES_POLIWRATH] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM03_WATER_PULSE) - | TMHM(TM06_TOXIC) - | TMHM(TM07_HAIL) - | TMHM(TM08_BULK_UP) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM29_PSYCHIC) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(HM03_SURF) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH) - | TMHM(HM07_WATERFALL) - | TMHM(HM08_DIVE)), - - [SPECIES_ABRA] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM04_CALM_MIND) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM27_RETURN) - | TMHM(TM29_PSYCHIC) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM33_REFLECT) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM41_TORMENT) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(TM48_SKILL_SWAP) - | TMHM(TM49_SNATCH) - | TMHM(HM05_FLASH)), - - [SPECIES_KADABRA] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM04_CALM_MIND) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM27_RETURN) - | TMHM(TM29_PSYCHIC) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM33_REFLECT) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM41_TORMENT) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(TM48_SKILL_SWAP) - | TMHM(TM49_SNATCH) - | TMHM(HM05_FLASH)), - - [SPECIES_ALAKAZAM] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM04_CALM_MIND) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM27_RETURN) - | TMHM(TM29_PSYCHIC) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM33_REFLECT) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM41_TORMENT) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(TM48_SKILL_SWAP) - | TMHM(TM49_SNATCH) - | TMHM(HM05_FLASH)), - - [SPECIES_MACHOP] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM06_TOXIC) - | TMHM(TM08_BULK_UP) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_MACHOKE] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM06_TOXIC) - | TMHM(TM08_BULK_UP) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_MACHAMP] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM06_TOXIC) - | TMHM(TM08_BULK_UP) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_BELLSPROUT] = TMHM_LEARNSET(TMHM(TM06_TOXIC) - | TMHM(TM09_BULLET_SEED) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM17_PROTECT) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM27_RETURN) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(HM01_CUT) - | TMHM(HM05_FLASH)), - - [SPECIES_WEEPINBELL] = TMHM_LEARNSET(TMHM(TM06_TOXIC) - | TMHM(TM09_BULLET_SEED) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM17_PROTECT) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM27_RETURN) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(HM01_CUT) - | TMHM(HM05_FLASH)), - - [SPECIES_VICTREEBEL] = TMHM_LEARNSET(TMHM(TM06_TOXIC) - | TMHM(TM09_BULLET_SEED) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM27_RETURN) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(HM01_CUT) - | TMHM(HM05_FLASH)), - - [SPECIES_TENTACOOL] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) - | TMHM(TM06_TOXIC) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM27_RETURN) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(HM01_CUT) - | TMHM(HM03_SURF) - | TMHM(HM07_WATERFALL) - | TMHM(HM08_DIVE)), - - [SPECIES_TENTACRUEL] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) - | TMHM(TM06_TOXIC) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM27_RETURN) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(HM01_CUT) - | TMHM(HM03_SURF) - | TMHM(HM07_WATERFALL) - | TMHM(HM08_DIVE)), - - [SPECIES_GEODUDE] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM17_PROTECT) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM37_SANDSTORM) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_GRAVELER] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM17_PROTECT) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM37_SANDSTORM) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_GOLEM] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM05_ROAR) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM37_SANDSTORM) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_PONYTA] = TMHM_LEARNSET(TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM17_PROTECT) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM27_RETURN) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM50_OVERHEAT) - | TMHM(HM04_STRENGTH)), - - [SPECIES_RAPIDASH] = TMHM_LEARNSET(TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM27_RETURN) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM50_OVERHEAT) - | TMHM(HM04_STRENGTH)), - - [SPECIES_SLOWPOKE] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) - | TMHM(TM04_CALM_MIND) - | TMHM(TM06_TOXIC) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM29_PSYCHIC) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM48_SKILL_SWAP) - | TMHM(HM03_SURF) - | TMHM(HM04_STRENGTH) - | TMHM(HM05_FLASH) - | TMHM(HM08_DIVE)), - - [SPECIES_SLOWBRO] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM03_WATER_PULSE) - | TMHM(TM04_CALM_MIND) - | TMHM(TM06_TOXIC) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM29_PSYCHIC) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM48_SKILL_SWAP) - | TMHM(HM03_SURF) - | TMHM(HM04_STRENGTH) - | TMHM(HM05_FLASH) - | TMHM(HM06_ROCK_SMASH) - | TMHM(HM08_DIVE)), - - [SPECIES_MAGNEMITE] = TMHM_LEARNSET(TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM25_THUNDER) - | TMHM(TM27_RETURN) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM33_REFLECT) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(HM05_FLASH)), - - [SPECIES_MAGNETON] = TMHM_LEARNSET(TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM25_THUNDER) - | TMHM(TM27_RETURN) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM33_REFLECT) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(HM05_FLASH)), - - [SPECIES_FARFETCHD] = TMHM_LEARNSET(TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM17_PROTECT) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM27_RETURN) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(TM47_STEEL_WING) - | TMHM(HM01_CUT) - | TMHM(HM02_FLY)), - - [SPECIES_DODUO] = TMHM_LEARNSET(TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM17_PROTECT) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM27_RETURN) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(TM47_STEEL_WING) - | TMHM(HM02_FLY)), - - [SPECIES_DODRIO] = TMHM_LEARNSET(TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM27_RETURN) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM41_TORMENT) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(TM47_STEEL_WING) - | TMHM(HM02_FLY)), - - [SPECIES_SEEL] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) - | TMHM(TM06_TOXIC) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM27_RETURN) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(HM03_SURF) - | TMHM(HM07_WATERFALL) - | TMHM(HM08_DIVE)), - - [SPECIES_DEWGONG] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) - | TMHM(TM06_TOXIC) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM27_RETURN) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(HM03_SURF) - | TMHM(HM07_WATERFALL) - | TMHM(HM08_DIVE)), - - [SPECIES_GRIMER] = TMHM_LEARNSET(TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM25_THUNDER) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM41_TORMENT) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF)), - - [SPECIES_MUK] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM25_THUNDER) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM41_TORMENT) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_SHELLDER] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) - | TMHM(TM06_TOXIC) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM27_RETURN) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM03_SURF) - | TMHM(HM08_DIVE)), - - [SPECIES_CLOYSTER] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) - | TMHM(TM06_TOXIC) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM27_RETURN) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM41_TORMENT) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM03_SURF) - | TMHM(HM08_DIVE)), - - [SPECIES_GASTLY] = TMHM_LEARNSET(TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM27_RETURN) - | TMHM(TM29_PSYCHIC) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM41_TORMENT) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(TM48_SKILL_SWAP) - | TMHM(TM49_SNATCH)), - - [SPECIES_HAUNTER] = TMHM_LEARNSET(TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM27_RETURN) - | TMHM(TM29_PSYCHIC) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM41_TORMENT) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(TM48_SKILL_SWAP) - | TMHM(TM49_SNATCH)), - - [SPECIES_GENGAR] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM25_THUNDER) - | TMHM(TM27_RETURN) - | TMHM(TM29_PSYCHIC) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM41_TORMENT) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(TM48_SKILL_SWAP) - | TMHM(TM49_SNATCH) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_ONIX] = TMHM_LEARNSET(TMHM(TM05_ROAR) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM17_PROTECT) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM37_SANDSTORM) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM41_TORMENT) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_DROWZEE] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM04_CALM_MIND) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM27_RETURN) - | TMHM(TM29_PSYCHIC) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM33_REFLECT) - | TMHM(TM41_TORMENT) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(TM48_SKILL_SWAP) - | TMHM(TM49_SNATCH) - | TMHM(HM05_FLASH)), - - [SPECIES_HYPNO] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM04_CALM_MIND) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM27_RETURN) - | TMHM(TM29_PSYCHIC) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM33_REFLECT) - | TMHM(TM41_TORMENT) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(TM48_SKILL_SWAP) - | TMHM(TM49_SNATCH) - | TMHM(HM05_FLASH)), - - [SPECIES_KRABBY] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) - | TMHM(TM06_TOXIC) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(HM01_CUT) - | TMHM(HM03_SURF) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH) - | TMHM(HM08_DIVE)), - - [SPECIES_KINGLER] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) - | TMHM(TM06_TOXIC) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(HM01_CUT) - | TMHM(HM03_SURF) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH) - | TMHM(HM08_DIVE)), - - [SPECIES_VOLTORB] = TMHM_LEARNSET(TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM12_TAUNT) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM25_THUNDER) - | TMHM(TM27_RETURN) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM41_TORMENT) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM46_THIEF) - | TMHM(HM05_FLASH)), - - [SPECIES_ELECTRODE] = TMHM_LEARNSET(TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM12_TAUNT) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM25_THUNDER) - | TMHM(TM27_RETURN) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM41_TORMENT) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM46_THIEF) - | TMHM(HM05_FLASH)), - - [SPECIES_EXEGGCUTE] = TMHM_LEARNSET(TMHM(TM06_TOXIC) - | TMHM(TM09_BULLET_SEED) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM27_RETURN) - | TMHM(TM29_PSYCHIC) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM33_REFLECT) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(TM48_SKILL_SWAP) - | TMHM(HM04_STRENGTH) - | TMHM(HM05_FLASH)), - - [SPECIES_EXEGGUTOR] = TMHM_LEARNSET(TMHM(TM06_TOXIC) - | TMHM(TM09_BULLET_SEED) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM27_RETURN) - | TMHM(TM29_PSYCHIC) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM33_REFLECT) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(TM48_SKILL_SWAP) - | TMHM(HM04_STRENGTH) - | TMHM(HM05_FLASH)), - - [SPECIES_CUBONE] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM17_PROTECT) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM37_SANDSTORM) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_MAROWAK] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM37_SANDSTORM) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_HITMONLEE] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM06_TOXIC) - | TMHM(TM08_BULK_UP) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_HITMONCHAN] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM06_TOXIC) - | TMHM(TM08_BULK_UP) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_LICKITUNG] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM03_WATER_PULSE) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM25_THUNDER) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM37_SANDSTORM) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(HM01_CUT) - | TMHM(HM03_SURF) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_KOFFING] = TMHM_LEARNSET(TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM25_THUNDER) - | TMHM(TM27_RETURN) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM41_TORMENT) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(HM05_FLASH)), - - [SPECIES_WEEZING] = TMHM_LEARNSET(TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM25_THUNDER) - | TMHM(TM27_RETURN) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM41_TORMENT) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(HM05_FLASH)), - - [SPECIES_RHYHORN] = TMHM_LEARNSET(TMHM(TM05_ROAR) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM25_THUNDER) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM37_SANDSTORM) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_RHYDON] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM05_ROAR) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM25_THUNDER) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM37_SANDSTORM) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(HM01_CUT) - | TMHM(HM03_SURF) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_CHANSEY] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM03_WATER_PULSE) - | TMHM(TM04_CALM_MIND) - | TMHM(TM06_TOXIC) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM25_THUNDER) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM29_PSYCHIC) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM37_SANDSTORM) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM48_SKILL_SWAP) - | TMHM(TM49_SNATCH) - | TMHM(HM04_STRENGTH) - | TMHM(HM05_FLASH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_TANGELA] = TMHM_LEARNSET(TMHM(TM06_TOXIC) - | TMHM(TM09_BULLET_SEED) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM27_RETURN) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(HM01_CUT) - | TMHM(HM05_FLASH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_KANGASKHAN] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM03_WATER_PULSE) - | TMHM(TM05_ROAR) - | TMHM(TM06_TOXIC) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM25_THUNDER) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM37_SANDSTORM) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(HM01_CUT) - | TMHM(HM03_SURF) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_HORSEA] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) - | TMHM(TM06_TOXIC) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM27_RETURN) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM03_SURF) - | TMHM(HM07_WATERFALL) - | TMHM(HM08_DIVE)), - - [SPECIES_SEADRA] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) - | TMHM(TM06_TOXIC) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM27_RETURN) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM03_SURF) - | TMHM(HM07_WATERFALL) - | TMHM(HM08_DIVE)), - - [SPECIES_GOLDEEN] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) - | TMHM(TM06_TOXIC) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM27_RETURN) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM03_SURF) - | TMHM(HM07_WATERFALL) - | TMHM(HM08_DIVE)), - - [SPECIES_SEAKING] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) - | TMHM(TM06_TOXIC) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM27_RETURN) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM03_SURF) - | TMHM(HM07_WATERFALL) - | TMHM(HM08_DIVE)), - - [SPECIES_STARYU] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) - | TMHM(TM06_TOXIC) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM25_THUNDER) - | TMHM(TM27_RETURN) - | TMHM(TM29_PSYCHIC) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM33_REFLECT) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(HM03_SURF) - | TMHM(HM05_FLASH) - | TMHM(HM07_WATERFALL) - | TMHM(HM08_DIVE)), - - [SPECIES_STARMIE] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) - | TMHM(TM06_TOXIC) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM25_THUNDER) - | TMHM(TM27_RETURN) - | TMHM(TM29_PSYCHIC) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM33_REFLECT) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM48_SKILL_SWAP) - | TMHM(HM03_SURF) - | TMHM(HM05_FLASH) - | TMHM(HM07_WATERFALL) - | TMHM(HM08_DIVE)), - - [SPECIES_MR_MIME] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM04_CALM_MIND) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM25_THUNDER) - | TMHM(TM27_RETURN) - | TMHM(TM29_PSYCHIC) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM33_REFLECT) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM41_TORMENT) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(TM48_SKILL_SWAP) - | TMHM(TM49_SNATCH) - | TMHM(HM05_FLASH)), - - [SPECIES_SCYTHER] = TMHM_LEARNSET(TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM27_RETURN) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(TM47_STEEL_WING) - | TMHM(HM01_CUT) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_JYNX] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM03_WATER_PULSE) - | TMHM(TM04_CALM_MIND) - | TMHM(TM06_TOXIC) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM12_TAUNT) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM27_RETURN) - | TMHM(TM29_PSYCHIC) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM33_REFLECT) - | TMHM(TM41_TORMENT) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(TM48_SKILL_SWAP) - | TMHM(HM05_FLASH)), - - [SPECIES_ELECTABUZZ] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM25_THUNDER) - | TMHM(TM27_RETURN) - | TMHM(TM29_PSYCHIC) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(HM04_STRENGTH) - | TMHM(HM05_FLASH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_MAGMAR] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM27_RETURN) - | TMHM(TM29_PSYCHIC) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_PINSIR] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM06_TOXIC) - | TMHM(TM08_BULK_UP) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(HM01_CUT) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_TAUROS] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM25_THUNDER) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM37_SANDSTORM) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM03_SURF) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_MAGIKARP] = TMHM_LEARNSET(0), - - [SPECIES_GYARADOS] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) - | TMHM(TM05_ROAR) - | TMHM(TM06_TOXIC) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM12_TAUNT) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM25_THUNDER) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM37_SANDSTORM) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM41_TORMENT) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM03_SURF) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH) - | TMHM(HM07_WATERFALL) - | TMHM(HM08_DIVE)), - - [SPECIES_LAPRAS] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) - | TMHM(TM05_ROAR) - | TMHM(TM06_TOXIC) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM25_THUNDER) - | TMHM(TM27_RETURN) - | TMHM(TM29_PSYCHIC) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM03_SURF) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH) - | TMHM(HM07_WATERFALL) - | TMHM(HM08_DIVE)), - - [SPECIES_DITTO] = TMHM_LEARNSET(0), - - [SPECIES_EEVEE] = TMHM_LEARNSET(TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT)), - - [SPECIES_VAPOREON] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) - | TMHM(TM05_ROAR) - | TMHM(TM06_TOXIC) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM03_SURF) - | TMHM(HM07_WATERFALL) - | TMHM(HM08_DIVE)), - - [SPECIES_JOLTEON] = TMHM_LEARNSET(TMHM(TM05_ROAR) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM25_THUNDER) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM05_FLASH)), - - [SPECIES_FLAREON] = TMHM_LEARNSET(TMHM(TM05_ROAR) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM50_OVERHEAT)), - - [SPECIES_PORYGON] = TMHM_LEARNSET(TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM25_THUNDER) - | TMHM(TM27_RETURN) - | TMHM(TM29_PSYCHIC) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM46_THIEF) - | TMHM(HM05_FLASH)), - - [SPECIES_OMANYTE] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) - | TMHM(TM06_TOXIC) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM27_RETURN) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM37_SANDSTORM) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(HM03_SURF) - | TMHM(HM06_ROCK_SMASH) - | TMHM(HM07_WATERFALL) - | TMHM(HM08_DIVE)), - - [SPECIES_OMASTAR] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) - | TMHM(TM06_TOXIC) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM27_RETURN) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM37_SANDSTORM) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(HM03_SURF) - | TMHM(HM06_ROCK_SMASH) - | TMHM(HM07_WATERFALL) - | TMHM(HM08_DIVE)), - - [SPECIES_KABUTO] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) - | TMHM(TM06_TOXIC) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM37_SANDSTORM) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(HM03_SURF) - | TMHM(HM06_ROCK_SMASH) - | TMHM(HM07_WATERFALL)), - - [SPECIES_KABUTOPS] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) - | TMHM(TM06_TOXIC) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM37_SANDSTORM) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(HM01_CUT) - | TMHM(HM03_SURF) - | TMHM(HM06_ROCK_SMASH) - | TMHM(HM07_WATERFALL) - | TMHM(HM08_DIVE)), - - [SPECIES_AERODACTYL] = TMHM_LEARNSET(TMHM(TM02_DRAGON_CLAW) - | TMHM(TM05_ROAR) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM37_SANDSTORM) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM41_TORMENT) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(TM47_STEEL_WING) - | TMHM(HM02_FLY) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_SNORLAX] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM03_WATER_PULSE) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM25_THUNDER) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM29_PSYCHIC) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM37_SANDSTORM) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM03_SURF) - | TMHM(HM04_STRENGTH)), - - [SPECIES_ARTICUNO] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) - | TMHM(TM05_ROAR) - | TMHM(TM06_TOXIC) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM27_RETURN) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM33_REFLECT) - | TMHM(TM37_SANDSTORM) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM47_STEEL_WING) - | TMHM(HM02_FLY) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_ZAPDOS] = TMHM_LEARNSET(TMHM(TM05_ROAR) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM25_THUNDER) - | TMHM(TM27_RETURN) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM37_SANDSTORM) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM47_STEEL_WING) - | TMHM(HM02_FLY) - | TMHM(HM05_FLASH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_MOLTRES] = TMHM_LEARNSET(TMHM(TM05_ROAR) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM27_RETURN) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM37_SANDSTORM) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM47_STEEL_WING) - | TMHM(TM50_OVERHEAT) - | TMHM(HM02_FLY) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_DRATINI] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) - | TMHM(TM06_TOXIC) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM25_THUNDER) - | TMHM(TM27_RETURN) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM03_SURF) - | TMHM(HM07_WATERFALL)), - - [SPECIES_DRAGONAIR] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) - | TMHM(TM06_TOXIC) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM25_THUNDER) - | TMHM(TM27_RETURN) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM03_SURF) - | TMHM(HM07_WATERFALL)), - - [SPECIES_DRAGONITE] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM02_DRAGON_CLAW) - | TMHM(TM03_WATER_PULSE) - | TMHM(TM05_ROAR) - | TMHM(TM06_TOXIC) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM25_THUNDER) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM37_SANDSTORM) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM47_STEEL_WING) - | TMHM(HM01_CUT) - | TMHM(HM02_FLY) - | TMHM(HM03_SURF) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH) - | TMHM(HM07_WATERFALL) - | TMHM(HM08_DIVE)), - - [SPECIES_MEWTWO] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM03_WATER_PULSE) - | TMHM(TM04_CALM_MIND) - | TMHM(TM06_TOXIC) - | TMHM(TM07_HAIL) - | TMHM(TM08_BULK_UP) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM25_THUNDER) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM29_PSYCHIC) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM33_REFLECT) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM37_SANDSTORM) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM41_TORMENT) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM48_SKILL_SWAP) - | TMHM(TM49_SNATCH) - | TMHM(HM04_STRENGTH) - | TMHM(HM05_FLASH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_MEW] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM02_DRAGON_CLAW) - | TMHM(TM03_WATER_PULSE) - | TMHM(TM04_CALM_MIND) - | TMHM(TM05_ROAR) - | TMHM(TM06_TOXIC) - | TMHM(TM07_HAIL) - | TMHM(TM08_BULK_UP) - | TMHM(TM09_BULLET_SEED) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM25_THUNDER) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM29_PSYCHIC) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM33_REFLECT) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM37_SANDSTORM) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM41_TORMENT) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(TM47_STEEL_WING) - | TMHM(TM48_SKILL_SWAP) - | TMHM(TM49_SNATCH) - | TMHM(TM50_OVERHEAT) - | TMHM(HM01_CUT) - | TMHM(HM02_FLY) - | TMHM(HM03_SURF) - | TMHM(HM04_STRENGTH) - | TMHM(HM05_FLASH) - | TMHM(HM06_ROCK_SMASH) - | TMHM(HM07_WATERFALL) - | TMHM(HM08_DIVE)), - - [SPECIES_CHIKORITA] = TMHM_LEARNSET(TMHM(TM06_TOXIC) - | TMHM(TM09_BULLET_SEED) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM27_RETURN) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM33_REFLECT) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM01_CUT) - | TMHM(HM05_FLASH)), - - [SPECIES_BAYLEEF] = TMHM_LEARNSET(TMHM(TM06_TOXIC) - | TMHM(TM09_BULLET_SEED) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM27_RETURN) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM33_REFLECT) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM01_CUT) - | TMHM(HM04_STRENGTH) - | TMHM(HM05_FLASH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_MEGANIUM] = TMHM_LEARNSET(TMHM(TM06_TOXIC) - | TMHM(TM09_BULLET_SEED) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM33_REFLECT) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM01_CUT) - | TMHM(HM04_STRENGTH) - | TMHM(HM05_FLASH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_CYNDAQUIL] = TMHM_LEARNSET(TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM17_PROTECT) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM50_OVERHEAT) - | TMHM(HM01_CUT)), - - [SPECIES_QUILAVA] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM05_ROAR) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM17_PROTECT) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM50_OVERHEAT) - | TMHM(HM01_CUT) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_TYPHLOSION] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM05_ROAR) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM50_OVERHEAT) - | TMHM(HM01_CUT) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_TOTODILE] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM03_WATER_PULSE) - | TMHM(TM06_TOXIC) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM01_CUT) - | TMHM(HM03_SURF) - | TMHM(HM07_WATERFALL) - | TMHM(HM08_DIVE)), - - [SPECIES_CROCONAW] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM03_WATER_PULSE) - | TMHM(TM05_ROAR) - | TMHM(TM06_TOXIC) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM01_CUT) - | TMHM(HM03_SURF) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH) - | TMHM(HM07_WATERFALL) - | TMHM(HM08_DIVE)), - - [SPECIES_FERALIGATR] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM02_DRAGON_CLAW) - | TMHM(TM03_WATER_PULSE) - | TMHM(TM05_ROAR) - | TMHM(TM06_TOXIC) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM01_CUT) - | TMHM(HM03_SURF) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH) - | TMHM(HM07_WATERFALL) - | TMHM(HM08_DIVE)), - - [SPECIES_SENTRET] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM03_WATER_PULSE) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(HM01_CUT) - | TMHM(HM03_SURF)), - - [SPECIES_FURRET] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM03_WATER_PULSE) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM25_THUNDER) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(HM01_CUT) - | TMHM(HM03_SURF) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_HOOTHOOT] = TMHM_LEARNSET(TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM27_RETURN) - | TMHM(TM29_PSYCHIC) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM33_REFLECT) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(TM47_STEEL_WING) - | TMHM(HM02_FLY) - | TMHM(HM05_FLASH)), - - [SPECIES_NOCTOWL] = TMHM_LEARNSET(TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM27_RETURN) - | TMHM(TM29_PSYCHIC) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM33_REFLECT) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(TM47_STEEL_WING) - | TMHM(HM02_FLY) - | TMHM(HM05_FLASH)), - - [SPECIES_LEDYBA] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM33_REFLECT) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(HM05_FLASH)), - - [SPECIES_LEDIAN] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM33_REFLECT) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(HM05_FLASH)), - - [SPECIES_SPINARAK] = TMHM_LEARNSET(TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM17_PROTECT) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM29_PSYCHIC) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(HM05_FLASH)), - - [SPECIES_ARIADOS] = TMHM_LEARNSET(TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM29_PSYCHIC) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(HM05_FLASH)), - - [SPECIES_CROBAT] = TMHM_LEARNSET(TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM27_RETURN) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM41_TORMENT) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(TM47_STEEL_WING) - | TMHM(TM49_SNATCH) - | TMHM(HM02_FLY)), - - [SPECIES_CHINCHOU] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) - | TMHM(TM06_TOXIC) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM25_THUNDER) - | TMHM(TM27_RETURN) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM03_SURF) - | TMHM(HM05_FLASH) - | TMHM(HM07_WATERFALL) - | TMHM(HM08_DIVE)), - - [SPECIES_LANTURN] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) - | TMHM(TM06_TOXIC) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM25_THUNDER) - | TMHM(TM27_RETURN) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM03_SURF) - | TMHM(HM05_FLASH) - | TMHM(HM07_WATERFALL) - | TMHM(HM08_DIVE)), - - [SPECIES_PICHU] = TMHM_LEARNSET(TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM25_THUNDER) - | TMHM(TM27_RETURN) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM05_FLASH)), - - [SPECIES_CLEFFA] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM29_PSYCHIC) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM33_REFLECT) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM05_FLASH)), - - [SPECIES_IGGLYBUFF] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM29_PSYCHIC) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM33_REFLECT) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM05_FLASH)), - - [SPECIES_TOGEPI] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM27_RETURN) - | TMHM(TM29_PSYCHIC) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM33_REFLECT) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM05_FLASH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_TOGETIC] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM03_WATER_PULSE) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM27_RETURN) - | TMHM(TM29_PSYCHIC) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM33_REFLECT) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM47_STEEL_WING) - | TMHM(HM02_FLY) - | TMHM(HM05_FLASH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_NATU] = TMHM_LEARNSET(TMHM(TM04_CALM_MIND) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM27_RETURN) - | TMHM(TM29_PSYCHIC) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM33_REFLECT) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(TM47_STEEL_WING) - | TMHM(TM48_SKILL_SWAP) - | TMHM(HM05_FLASH)), - - [SPECIES_XATU] = TMHM_LEARNSET(TMHM(TM04_CALM_MIND) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM27_RETURN) - | TMHM(TM29_PSYCHIC) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM33_REFLECT) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(TM47_STEEL_WING) - | TMHM(TM48_SKILL_SWAP) - | TMHM(HM02_FLY) - | TMHM(HM05_FLASH)), - - [SPECIES_MAREEP] = TMHM_LEARNSET(TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM25_THUNDER) - | TMHM(TM27_RETURN) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM05_FLASH)), - - [SPECIES_FLAAFFY] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM25_THUNDER) - | TMHM(TM27_RETURN) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM04_STRENGTH) - | TMHM(HM05_FLASH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_AMPHAROS] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM25_THUNDER) - | TMHM(TM27_RETURN) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM04_STRENGTH) - | TMHM(HM05_FLASH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_BELLOSSOM] = TMHM_LEARNSET(TMHM(TM06_TOXIC) - | TMHM(TM09_BULLET_SEED) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM27_RETURN) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM01_CUT) - | TMHM(HM05_FLASH)), - - [SPECIES_MARILL] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM03_WATER_PULSE) - | TMHM(TM06_TOXIC) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM03_SURF) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH) - | TMHM(HM07_WATERFALL) - | TMHM(HM08_DIVE)), - - [SPECIES_AZUMARILL] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM03_WATER_PULSE) - | TMHM(TM06_TOXIC) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM03_SURF) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH) - | TMHM(HM07_WATERFALL) - | TMHM(HM08_DIVE)), - - [SPECIES_SUDOWOODO] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM04_CALM_MIND) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM17_PROTECT) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM37_SANDSTORM) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_POLITOED] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM03_WATER_PULSE) - | TMHM(TM06_TOXIC) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM29_PSYCHIC) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(HM03_SURF) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH) - | TMHM(HM07_WATERFALL) - | TMHM(HM08_DIVE)), - - [SPECIES_HOPPIP] = TMHM_LEARNSET(TMHM(TM06_TOXIC) - | TMHM(TM09_BULLET_SEED) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM17_PROTECT) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM27_RETURN) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM05_FLASH)), - - [SPECIES_SKIPLOOM] = TMHM_LEARNSET(TMHM(TM06_TOXIC) - | TMHM(TM09_BULLET_SEED) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM17_PROTECT) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM27_RETURN) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM05_FLASH)), - - [SPECIES_JUMPLUFF] = TMHM_LEARNSET(TMHM(TM06_TOXIC) - | TMHM(TM09_BULLET_SEED) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM27_RETURN) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM05_FLASH)), - - [SPECIES_AIPOM] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM03_WATER_PULSE) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM25_THUNDER) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(TM49_SNATCH) - | TMHM(HM01_CUT) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_SUNKERN] = TMHM_LEARNSET(TMHM(TM06_TOXIC) - | TMHM(TM09_BULLET_SEED) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM27_RETURN) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM01_CUT) - | TMHM(HM05_FLASH)), - - [SPECIES_SUNFLORA] = TMHM_LEARNSET(TMHM(TM06_TOXIC) - | TMHM(TM09_BULLET_SEED) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM27_RETURN) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM01_CUT) - | TMHM(HM05_FLASH)), - - [SPECIES_YANMA] = TMHM_LEARNSET(TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM17_PROTECT) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM27_RETURN) - | TMHM(TM29_PSYCHIC) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(TM47_STEEL_WING) - | TMHM(HM05_FLASH)), - - [SPECIES_WOOPER] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) - | TMHM(TM06_TOXIC) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM37_SANDSTORM) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM03_SURF) - | TMHM(HM05_FLASH) - | TMHM(HM06_ROCK_SMASH) - | TMHM(HM07_WATERFALL) - | TMHM(HM08_DIVE)), - - [SPECIES_QUAGSIRE] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM03_WATER_PULSE) - | TMHM(TM06_TOXIC) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM37_SANDSTORM) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM03_SURF) - | TMHM(HM04_STRENGTH) - | TMHM(HM05_FLASH) - | TMHM(HM06_ROCK_SMASH) - | TMHM(HM07_WATERFALL) - | TMHM(HM08_DIVE)), - - [SPECIES_ESPEON] = TMHM_LEARNSET(TMHM(TM04_CALM_MIND) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM29_PSYCHIC) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM33_REFLECT) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM48_SKILL_SWAP) - | TMHM(HM01_CUT) - | TMHM(HM05_FLASH)), - - [SPECIES_UMBREON] = TMHM_LEARNSET(TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM29_PSYCHIC) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM41_TORMENT) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM49_SNATCH) - | TMHM(HM01_CUT) - | TMHM(HM05_FLASH)), - - [SPECIES_MURKROW] = TMHM_LEARNSET(TMHM(TM04_CALM_MIND) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM27_RETURN) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM41_TORMENT) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(TM47_STEEL_WING) - | TMHM(TM49_SNATCH) - | TMHM(HM02_FLY)), - - [SPECIES_SLOWKING] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM03_WATER_PULSE) - | TMHM(TM04_CALM_MIND) - | TMHM(TM06_TOXIC) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM29_PSYCHIC) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM48_SKILL_SWAP) - | TMHM(HM03_SURF) - | TMHM(HM04_STRENGTH) - | TMHM(HM05_FLASH) - | TMHM(HM06_ROCK_SMASH) - | TMHM(HM08_DIVE)), - - [SPECIES_MISDREAVUS] = TMHM_LEARNSET(TMHM(TM04_CALM_MIND) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM25_THUNDER) - | TMHM(TM27_RETURN) - | TMHM(TM29_PSYCHIC) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM41_TORMENT) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(TM48_SKILL_SWAP) - | TMHM(TM49_SNATCH) - | TMHM(HM05_FLASH)), - - [SPECIES_UNOWN] = TMHM_LEARNSET(0), - - [SPECIES_WOBBUFFET] = TMHM_LEARNSET(0), - - [SPECIES_GIRAFARIG] = TMHM_LEARNSET(TMHM(TM04_CALM_MIND) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM25_THUNDER) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM29_PSYCHIC) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM33_REFLECT) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(TM48_SKILL_SWAP) - | TMHM(HM04_STRENGTH) - | TMHM(HM05_FLASH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_PINECO] = TMHM_LEARNSET(TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM33_REFLECT) - | TMHM(TM37_SANDSTORM) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_FORRETRESS] = TMHM_LEARNSET(TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM33_REFLECT) - | TMHM(TM37_SANDSTORM) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_DUNSPARCE] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) - | TMHM(TM04_CALM_MIND) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM25_THUNDER) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_GLIGAR] = TMHM_LEARNSET(TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM37_SANDSTORM) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(TM47_STEEL_WING) - | TMHM(HM01_CUT) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_STEELIX] = TMHM_LEARNSET(TMHM(TM05_ROAR) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM37_SANDSTORM) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM41_TORMENT) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM01_CUT) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_SNUBBULL] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM03_WATER_PULSE) - | TMHM(TM05_ROAR) - | TMHM(TM06_TOXIC) - | TMHM(TM08_BULK_UP) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM25_THUNDER) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM41_TORMENT) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(TM50_OVERHEAT) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_GRANBULL] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM03_WATER_PULSE) - | TMHM(TM05_ROAR) - | TMHM(TM06_TOXIC) - | TMHM(TM08_BULK_UP) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM25_THUNDER) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM41_TORMENT) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(TM50_OVERHEAT) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_QWILFISH] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) - | TMHM(TM06_TOXIC) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM27_RETURN) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM03_SURF) - | TMHM(HM07_WATERFALL) - | TMHM(HM08_DIVE)), - - [SPECIES_SCIZOR] = TMHM_LEARNSET(TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM27_RETURN) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM37_SANDSTORM) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(TM47_STEEL_WING) - | TMHM(HM01_CUT) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_SHUCKLE] = TMHM_LEARNSET(TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM17_PROTECT) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM37_SANDSTORM) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM04_STRENGTH) - | TMHM(HM05_FLASH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_HERACROSS] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM06_TOXIC) - | TMHM(TM08_BULK_UP) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(HM01_CUT) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_SNEASEL] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM04_CALM_MIND) - | TMHM(TM06_TOXIC) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM41_TORMENT) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(TM49_SNATCH) - | TMHM(HM01_CUT) - | TMHM(HM03_SURF) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_TEDDIURSA] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM05_ROAR) - | TMHM(TM06_TOXIC) - | TMHM(TM08_BULK_UP) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM41_TORMENT) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(HM01_CUT) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_URSARING] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM05_ROAR) - | TMHM(TM06_TOXIC) - | TMHM(TM08_BULK_UP) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM41_TORMENT) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(HM01_CUT) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_SLUGMA] = TMHM_LEARNSET(TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM27_RETURN) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM33_REFLECT) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM50_OVERHEAT) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_MAGCARGO] = TMHM_LEARNSET(TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM33_REFLECT) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM37_SANDSTORM) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM50_OVERHEAT) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_SWINUB] = TMHM_LEARNSET(TMHM(TM05_ROAR) - | TMHM(TM06_TOXIC) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM33_REFLECT) - | TMHM(TM37_SANDSTORM) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_PILOSWINE] = TMHM_LEARNSET(TMHM(TM05_ROAR) - | TMHM(TM06_TOXIC) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM33_REFLECT) - | TMHM(TM37_SANDSTORM) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_CORSOLA] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) - | TMHM(TM04_CALM_MIND) - | TMHM(TM06_TOXIC) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM29_PSYCHIC) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM33_REFLECT) - | TMHM(TM37_SANDSTORM) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM03_SURF) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_REMORAID] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM27_RETURN) - | TMHM(TM29_PSYCHIC) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(HM03_SURF) - | TMHM(HM07_WATERFALL) - | TMHM(HM08_DIVE)), - - [SPECIES_OCTILLERY] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) - | TMHM(TM06_TOXIC) - | TMHM(TM09_BULLET_SEED) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM27_RETURN) - | TMHM(TM29_PSYCHIC) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(HM03_SURF) - | TMHM(HM07_WATERFALL) - | TMHM(HM08_DIVE)), - - [SPECIES_DELIBIRD] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM03_WATER_PULSE) - | TMHM(TM06_TOXIC) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM27_RETURN) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(HM02_FLY)), - - [SPECIES_MANTINE] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) - | TMHM(TM06_TOXIC) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM03_SURF) - | TMHM(HM07_WATERFALL) - | TMHM(HM08_DIVE)), - - [SPECIES_SKARMORY] = TMHM_LEARNSET(TMHM(TM05_ROAR) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM17_PROTECT) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM27_RETURN) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM37_SANDSTORM) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM41_TORMENT) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(TM47_STEEL_WING) - | TMHM(HM01_CUT) - | TMHM(HM02_FLY) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_HOUNDOUR] = TMHM_LEARNSET(TMHM(TM05_ROAR) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM17_PROTECT) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM27_RETURN) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM41_TORMENT) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(TM49_SNATCH) - | TMHM(TM50_OVERHEAT) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_HOUNDOOM] = TMHM_LEARNSET(TMHM(TM05_ROAR) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM27_RETURN) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM41_TORMENT) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(TM49_SNATCH) - | TMHM(TM50_OVERHEAT) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_KINGDRA] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) - | TMHM(TM06_TOXIC) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM27_RETURN) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM03_SURF) - | TMHM(HM07_WATERFALL) - | TMHM(HM08_DIVE)), - - [SPECIES_PHANPY] = TMHM_LEARNSET(TMHM(TM05_ROAR) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM17_PROTECT) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM37_SANDSTORM) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_DONPHAN] = TMHM_LEARNSET(TMHM(TM05_ROAR) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM37_SANDSTORM) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_PORYGON2] = TMHM_LEARNSET(TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM25_THUNDER) - | TMHM(TM27_RETURN) - | TMHM(TM29_PSYCHIC) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM46_THIEF) - | TMHM(HM05_FLASH)), - - [SPECIES_STANTLER] = TMHM_LEARNSET(TMHM(TM04_CALM_MIND) - | TMHM(TM05_ROAR) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM25_THUNDER) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM29_PSYCHIC) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM33_REFLECT) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(TM48_SKILL_SWAP) - | TMHM(HM05_FLASH)), - - [SPECIES_SMEARGLE] = TMHM_LEARNSET(0), - - [SPECIES_TYROGUE] = TMHM_LEARNSET(TMHM(TM06_TOXIC) - | TMHM(TM08_BULK_UP) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_HITMONTOP] = TMHM_LEARNSET(TMHM(TM06_TOXIC) - | TMHM(TM08_BULK_UP) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM37_SANDSTORM) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_SMOOCHUM] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) - | TMHM(TM04_CALM_MIND) - | TMHM(TM06_TOXIC) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM27_RETURN) - | TMHM(TM29_PSYCHIC) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM33_REFLECT) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(TM48_SKILL_SWAP) - | TMHM(HM05_FLASH)), - - [SPECIES_ELEKID] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM25_THUNDER) - | TMHM(TM27_RETURN) - | TMHM(TM29_PSYCHIC) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(HM05_FLASH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_MAGBY] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM17_PROTECT) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM27_RETURN) - | TMHM(TM29_PSYCHIC) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_MILTANK] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM03_WATER_PULSE) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM25_THUNDER) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM37_SANDSTORM) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM03_SURF) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_BLISSEY] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM03_WATER_PULSE) - | TMHM(TM04_CALM_MIND) - | TMHM(TM06_TOXIC) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM25_THUNDER) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM29_PSYCHIC) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM37_SANDSTORM) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM48_SKILL_SWAP) - | TMHM(TM49_SNATCH) - | TMHM(HM04_STRENGTH) - | TMHM(HM05_FLASH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_RAIKOU] = TMHM_LEARNSET(TMHM(TM04_CALM_MIND) - | TMHM(TM05_ROAR) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM25_THUNDER) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM33_REFLECT) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM37_SANDSTORM) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(HM01_CUT) - | TMHM(HM04_STRENGTH) - | TMHM(HM05_FLASH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_ENTEI] = TMHM_LEARNSET(TMHM(TM04_CALM_MIND) - | TMHM(TM05_ROAR) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM33_REFLECT) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM37_SANDSTORM) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(HM01_CUT) - | TMHM(HM04_STRENGTH) - | TMHM(HM05_FLASH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_SUICUNE] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) - | TMHM(TM04_CALM_MIND) - | TMHM(TM05_ROAR) - | TMHM(TM06_TOXIC) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM33_REFLECT) - | TMHM(TM37_SANDSTORM) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(HM01_CUT) - | TMHM(HM03_SURF) - | TMHM(HM06_ROCK_SMASH) - | TMHM(HM07_WATERFALL) - | TMHM(HM08_DIVE)), - - [SPECIES_LARVITAR] = TMHM_LEARNSET(TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM37_SANDSTORM) - | TMHM(TM41_TORMENT) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_PUPITAR] = TMHM_LEARNSET(TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM37_SANDSTORM) - | TMHM(TM41_TORMENT) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_TYRANITAR] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM02_DRAGON_CLAW) - | TMHM(TM03_WATER_PULSE) - | TMHM(TM05_ROAR) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM25_THUNDER) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM37_SANDSTORM) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM41_TORMENT) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM01_CUT) - | TMHM(HM03_SURF) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_LUGIA] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) - | TMHM(TM04_CALM_MIND) - | TMHM(TM05_ROAR) - | TMHM(TM06_TOXIC) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM25_THUNDER) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM29_PSYCHIC) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM33_REFLECT) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM37_SANDSTORM) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM47_STEEL_WING) - | TMHM(TM48_SKILL_SWAP) - | TMHM(HM02_FLY) - | TMHM(HM03_SURF) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH) - | TMHM(HM07_WATERFALL) - | TMHM(HM08_DIVE)), - - [SPECIES_HO_OH] = TMHM_LEARNSET(TMHM(TM04_CALM_MIND) - | TMHM(TM05_ROAR) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM25_THUNDER) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM29_PSYCHIC) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM33_REFLECT) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM37_SANDSTORM) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM47_STEEL_WING) - | TMHM(TM50_OVERHEAT) - | TMHM(HM02_FLY) - | TMHM(HM04_STRENGTH) - | TMHM(HM05_FLASH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_CELEBI] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) - | TMHM(TM04_CALM_MIND) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM27_RETURN) - | TMHM(TM29_PSYCHIC) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM33_REFLECT) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM37_SANDSTORM) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM48_SKILL_SWAP) - | TMHM(HM01_CUT) - | TMHM(HM05_FLASH)), - - [SPECIES_OLD_UNOWN_B] = TMHM_LEARNSET(0), - - [SPECIES_OLD_UNOWN_C] = TMHM_LEARNSET(0), - - [SPECIES_OLD_UNOWN_D] = TMHM_LEARNSET(0), - - [SPECIES_OLD_UNOWN_E] = TMHM_LEARNSET(0), - - [SPECIES_OLD_UNOWN_F] = TMHM_LEARNSET(0), - - [SPECIES_OLD_UNOWN_G] = TMHM_LEARNSET(0), - - [SPECIES_OLD_UNOWN_H] = TMHM_LEARNSET(0), - - [SPECIES_OLD_UNOWN_I] = TMHM_LEARNSET(0), - - [SPECIES_OLD_UNOWN_J] = TMHM_LEARNSET(0), - - [SPECIES_OLD_UNOWN_K] = TMHM_LEARNSET(0), - - [SPECIES_OLD_UNOWN_L] = TMHM_LEARNSET(0), - - [SPECIES_OLD_UNOWN_M] = TMHM_LEARNSET(0), - - [SPECIES_OLD_UNOWN_N] = TMHM_LEARNSET(0), - - [SPECIES_OLD_UNOWN_O] = TMHM_LEARNSET(0), - - [SPECIES_OLD_UNOWN_P] = TMHM_LEARNSET(0), - - [SPECIES_OLD_UNOWN_Q] = TMHM_LEARNSET(0), - - [SPECIES_OLD_UNOWN_R] = TMHM_LEARNSET(0), - - [SPECIES_OLD_UNOWN_S] = TMHM_LEARNSET(0), - - [SPECIES_OLD_UNOWN_T] = TMHM_LEARNSET(0), - - [SPECIES_OLD_UNOWN_U] = TMHM_LEARNSET(0), - - [SPECIES_OLD_UNOWN_V] = TMHM_LEARNSET(0), - - [SPECIES_OLD_UNOWN_W] = TMHM_LEARNSET(0), - - [SPECIES_OLD_UNOWN_X] = TMHM_LEARNSET(0), - - [SPECIES_OLD_UNOWN_Y] = TMHM_LEARNSET(0), - - [SPECIES_OLD_UNOWN_Z] = TMHM_LEARNSET(0), - - [SPECIES_TREECKO] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM06_TOXIC) - | TMHM(TM09_BULLET_SEED) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM17_PROTECT) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM01_CUT) - | TMHM(HM04_STRENGTH) - | TMHM(HM05_FLASH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_GROVYLE] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM06_TOXIC) - | TMHM(TM09_BULLET_SEED) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM17_PROTECT) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM01_CUT) - | TMHM(HM04_STRENGTH) - | TMHM(HM05_FLASH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_SCEPTILE] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM02_DRAGON_CLAW) - | TMHM(TM05_ROAR) - | TMHM(TM06_TOXIC) - | TMHM(TM09_BULLET_SEED) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM01_CUT) - | TMHM(HM04_STRENGTH) - | TMHM(HM05_FLASH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_TORCHIC] = TMHM_LEARNSET(TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM17_PROTECT) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM50_OVERHEAT) - | TMHM(HM01_CUT) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_COMBUSKEN] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM06_TOXIC) - | TMHM(TM08_BULK_UP) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM17_PROTECT) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM50_OVERHEAT) - | TMHM(HM01_CUT) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_BLAZIKEN] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM05_ROAR) - | TMHM(TM06_TOXIC) - | TMHM(TM08_BULK_UP) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM50_OVERHEAT) - | TMHM(HM01_CUT) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_MUDKIP] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) - | TMHM(TM06_TOXIC) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM03_SURF) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH) - | TMHM(HM07_WATERFALL) - | TMHM(HM08_DIVE)), - - [SPECIES_MARSHTOMP] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) - | TMHM(TM06_TOXIC) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM03_SURF) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH) - | TMHM(HM07_WATERFALL) - | TMHM(HM08_DIVE)), - - [SPECIES_SWAMPERT] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM03_WATER_PULSE) - | TMHM(TM05_ROAR) - | TMHM(TM06_TOXIC) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM03_SURF) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH) - | TMHM(HM07_WATERFALL) - | TMHM(HM08_DIVE)), - - [SPECIES_POOCHYENA] = TMHM_LEARNSET(TMHM(TM05_ROAR) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM41_TORMENT) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(TM49_SNATCH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_MIGHTYENA] = TMHM_LEARNSET(TMHM(TM05_ROAR) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM41_TORMENT) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(TM49_SNATCH) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_ZIGZAGOON] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM25_THUNDER) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(HM01_CUT) - | TMHM(HM03_SURF) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_LINOONE] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) - | TMHM(TM05_ROAR) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM25_THUNDER) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(HM01_CUT) - | TMHM(HM03_SURF) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_WURMPLE] = TMHM_LEARNSET(0), - - [SPECIES_SILCOON] = TMHM_LEARNSET(0), - - [SPECIES_BEAUTIFLY] = TMHM_LEARNSET(TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM27_RETURN) - | TMHM(TM29_PSYCHIC) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(HM05_FLASH)), - - [SPECIES_CASCOON] = TMHM_LEARNSET(0), - - [SPECIES_DUSTOX] = TMHM_LEARNSET(TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM27_RETURN) - | TMHM(TM29_PSYCHIC) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(HM05_FLASH)), - - [SPECIES_LOTAD] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) - | TMHM(TM06_TOXIC) - | TMHM(TM07_HAIL) - | TMHM(TM09_BULLET_SEED) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM27_RETURN) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(HM03_SURF) - | TMHM(HM05_FLASH)), - - [SPECIES_LOMBRE] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) - | TMHM(TM06_TOXIC) - | TMHM(TM07_HAIL) - | TMHM(TM09_BULLET_SEED) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM27_RETURN) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(HM03_SURF) - | TMHM(HM04_STRENGTH) - | TMHM(HM05_FLASH) - | TMHM(HM06_ROCK_SMASH) - | TMHM(HM07_WATERFALL) - | TMHM(HM08_DIVE)), - - [SPECIES_LUDICOLO] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM03_WATER_PULSE) - | TMHM(TM06_TOXIC) - | TMHM(TM07_HAIL) - | TMHM(TM09_BULLET_SEED) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM27_RETURN) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(HM03_SURF) - | TMHM(HM04_STRENGTH) - | TMHM(HM05_FLASH) - | TMHM(HM06_ROCK_SMASH) - | TMHM(HM07_WATERFALL) - | TMHM(HM08_DIVE)), - - [SPECIES_SEEDOT] = TMHM_LEARNSET(TMHM(TM06_TOXIC) - | TMHM(TM09_BULLET_SEED) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM17_PROTECT) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM05_FLASH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_NUZLEAF] = TMHM_LEARNSET(TMHM(TM06_TOXIC) - | TMHM(TM09_BULLET_SEED) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM41_TORMENT) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(HM01_CUT) - | TMHM(HM04_STRENGTH) - | TMHM(HM05_FLASH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_SHIFTRY] = TMHM_LEARNSET(TMHM(TM06_TOXIC) - | TMHM(TM09_BULLET_SEED) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM41_TORMENT) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(HM01_CUT) - | TMHM(HM04_STRENGTH) - | TMHM(HM05_FLASH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_NINCADA] = TMHM_LEARNSET(TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM17_PROTECT) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM37_SANDSTORM) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(HM01_CUT) - | TMHM(HM05_FLASH)), - - [SPECIES_NINJASK] = TMHM_LEARNSET(TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM37_SANDSTORM) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(HM01_CUT) - | TMHM(HM05_FLASH)), - - [SPECIES_SHEDINJA] = TMHM_LEARNSET(TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM37_SANDSTORM) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM46_THIEF) - | TMHM(HM01_CUT) - | TMHM(HM05_FLASH)), - - [SPECIES_TAILLOW] = TMHM_LEARNSET(TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM27_RETURN) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(TM47_STEEL_WING) - | TMHM(HM02_FLY)), - - [SPECIES_SWELLOW] = TMHM_LEARNSET(TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM27_RETURN) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(TM47_STEEL_WING) - | TMHM(HM02_FLY)), - - [SPECIES_SHROOMISH] = TMHM_LEARNSET(TMHM(TM06_TOXIC) - | TMHM(TM09_BULLET_SEED) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM17_PROTECT) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM27_RETURN) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM49_SNATCH) - | TMHM(HM05_FLASH)), - - [SPECIES_BRELOOM] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM06_TOXIC) - | TMHM(TM08_BULK_UP) - | TMHM(TM09_BULLET_SEED) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM27_RETURN) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM49_SNATCH) - | TMHM(HM01_CUT) - | TMHM(HM04_STRENGTH) - | TMHM(HM05_FLASH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_SPINDA] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM03_WATER_PULSE) - | TMHM(TM04_CALM_MIND) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM29_PSYCHIC) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(TM48_SKILL_SWAP) - | TMHM(TM49_SNATCH) - | TMHM(HM04_STRENGTH) - | TMHM(HM05_FLASH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_WINGULL] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) - | TMHM(TM06_TOXIC) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM27_RETURN) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(TM47_STEEL_WING) - | TMHM(HM02_FLY)), - - [SPECIES_PELIPPER] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) - | TMHM(TM06_TOXIC) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM27_RETURN) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(TM47_STEEL_WING) - | TMHM(HM02_FLY) - | TMHM(HM03_SURF)), - - [SPECIES_SURSKIT] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM27_RETURN) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(HM05_FLASH)), - - [SPECIES_MASQUERAIN] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM27_RETURN) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(HM05_FLASH)), - - [SPECIES_WAILMER] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) - | TMHM(TM05_ROAR) - | TMHM(TM06_TOXIC) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM03_SURF) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH) - | TMHM(HM07_WATERFALL) - | TMHM(HM08_DIVE)), - - [SPECIES_WAILORD] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) - | TMHM(TM05_ROAR) - | TMHM(TM06_TOXIC) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM03_SURF) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH) - | TMHM(HM07_WATERFALL) - | TMHM(HM08_DIVE)), - - [SPECIES_SKITTY] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) - | TMHM(TM04_CALM_MIND) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM25_THUNDER) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM05_FLASH)), - - [SPECIES_DELCATTY] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) - | TMHM(TM04_CALM_MIND) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM25_THUNDER) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM04_STRENGTH) - | TMHM(HM05_FLASH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_KECLEON] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM03_WATER_PULSE) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM25_THUNDER) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(TM48_SKILL_SWAP) - | TMHM(TM49_SNATCH) - | TMHM(HM01_CUT) - | TMHM(HM04_STRENGTH) - | TMHM(HM05_FLASH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_BALTOY] = TMHM_LEARNSET(TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM29_PSYCHIC) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM33_REFLECT) - | TMHM(TM37_SANDSTORM) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM48_SKILL_SWAP) - | TMHM(HM05_FLASH)), - - [SPECIES_CLAYDOL] = TMHM_LEARNSET(TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM29_PSYCHIC) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM33_REFLECT) - | TMHM(TM37_SANDSTORM) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM48_SKILL_SWAP) - | TMHM(HM04_STRENGTH) - | TMHM(HM05_FLASH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_NOSEPASS] = TMHM_LEARNSET(TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM17_PROTECT) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM25_THUNDER) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM37_SANDSTORM) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM41_TORMENT) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_TORKOAL] = TMHM_LEARNSET(TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM17_PROTECT) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM27_RETURN) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM50_OVERHEAT) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_SABLEYE] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM03_WATER_PULSE) - | TMHM(TM04_CALM_MIND) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM29_PSYCHIC) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM41_TORMENT) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(TM49_SNATCH) - | TMHM(HM01_CUT) - | TMHM(HM05_FLASH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_BARBOACH] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) - | TMHM(TM06_TOXIC) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM37_SANDSTORM) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM03_SURF) - | TMHM(HM07_WATERFALL) - | TMHM(HM08_DIVE)), - - [SPECIES_WHISCASH] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) - | TMHM(TM06_TOXIC) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM37_SANDSTORM) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM03_SURF) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH) - | TMHM(HM07_WATERFALL) - | TMHM(HM08_DIVE)), - - [SPECIES_LUVDISC] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) - | TMHM(TM06_TOXIC) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM27_RETURN) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM03_SURF) - | TMHM(HM07_WATERFALL) - | TMHM(HM08_DIVE)), - - [SPECIES_CORPHISH] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) - | TMHM(TM06_TOXIC) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM12_TAUNT) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM01_CUT) - | TMHM(HM03_SURF) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH) - | TMHM(HM07_WATERFALL)), - - [SPECIES_CRAWDAUNT] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) - | TMHM(TM06_TOXIC) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM12_TAUNT) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM01_CUT) - | TMHM(HM03_SURF) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH) - | TMHM(HM07_WATERFALL) - | TMHM(HM08_DIVE)), - - [SPECIES_FEEBAS] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) - | TMHM(TM06_TOXIC) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM27_RETURN) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM03_SURF) - | TMHM(HM07_WATERFALL) - | TMHM(HM08_DIVE)), - - [SPECIES_MILOTIC] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) - | TMHM(TM06_TOXIC) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM27_RETURN) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM03_SURF) - | TMHM(HM07_WATERFALL) - | TMHM(HM08_DIVE)), - - [SPECIES_CARVANHA] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) - | TMHM(TM06_TOXIC) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM12_TAUNT) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM27_RETURN) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM41_TORMENT) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(HM03_SURF) - | TMHM(HM07_WATERFALL) - | TMHM(HM08_DIVE)), - - [SPECIES_SHARPEDO] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) - | TMHM(TM05_ROAR) - | TMHM(TM06_TOXIC) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM12_TAUNT) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM41_TORMENT) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(HM03_SURF) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH) - | TMHM(HM07_WATERFALL) - | TMHM(HM08_DIVE)), - - [SPECIES_TRAPINCH] = TMHM_LEARNSET(TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM37_SANDSTORM) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_VIBRAVA] = TMHM_LEARNSET(TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM37_SANDSTORM) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM47_STEEL_WING) - | TMHM(HM02_FLY) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_FLYGON] = TMHM_LEARNSET(TMHM(TM02_DRAGON_CLAW) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM37_SANDSTORM) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM47_STEEL_WING) - | TMHM(HM02_FLY) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_MAKUHITA] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM06_TOXIC) - | TMHM(TM08_BULK_UP) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM03_SURF) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_HARIYAMA] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM06_TOXIC) - | TMHM(TM08_BULK_UP) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM03_SURF) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_ELECTRIKE] = TMHM_LEARNSET(TMHM(TM05_ROAR) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM25_THUNDER) - | TMHM(TM27_RETURN) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(HM04_STRENGTH) - | TMHM(HM05_FLASH)), - - [SPECIES_MANECTRIC] = TMHM_LEARNSET(TMHM(TM05_ROAR) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM25_THUNDER) - | TMHM(TM27_RETURN) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(HM04_STRENGTH) - | TMHM(HM05_FLASH)), - - [SPECIES_NUMEL] = TMHM_LEARNSET(TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM17_PROTECT) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM37_SANDSTORM) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM50_OVERHEAT) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_CAMERUPT] = TMHM_LEARNSET(TMHM(TM05_ROAR) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM37_SANDSTORM) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM50_OVERHEAT) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_SPHEAL] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) - | TMHM(TM06_TOXIC) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM03_SURF) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH) - | TMHM(HM07_WATERFALL) - | TMHM(HM08_DIVE)), - - [SPECIES_SEALEO] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) - | TMHM(TM05_ROAR) - | TMHM(TM06_TOXIC) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM03_SURF) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH) - | TMHM(HM07_WATERFALL) - | TMHM(HM08_DIVE)), - - [SPECIES_WALREIN] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) - | TMHM(TM05_ROAR) - | TMHM(TM06_TOXIC) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM03_SURF) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH) - | TMHM(HM07_WATERFALL) - | TMHM(HM08_DIVE)), - - [SPECIES_CACNEA] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM06_TOXIC) - | TMHM(TM09_BULLET_SEED) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM17_PROTECT) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM27_RETURN) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM37_SANDSTORM) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM01_CUT) - | TMHM(HM05_FLASH)), - - [SPECIES_CACTURNE] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM06_TOXIC) - | TMHM(TM09_BULLET_SEED) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM27_RETURN) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM37_SANDSTORM) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM01_CUT) - | TMHM(HM04_STRENGTH) - | TMHM(HM05_FLASH)), - - [SPECIES_SNORUNT] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) - | TMHM(TM06_TOXIC) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM27_RETURN) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM05_FLASH)), - - [SPECIES_GLALIE] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) - | TMHM(TM06_TOXIC) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM12_TAUNT) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM41_TORMENT) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM05_FLASH)), - - [SPECIES_LUNATONE] = TMHM_LEARNSET(TMHM(TM04_CALM_MIND) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM29_PSYCHIC) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM33_REFLECT) - | TMHM(TM37_SANDSTORM) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM48_SKILL_SWAP) - | TMHM(HM05_FLASH)), - - [SPECIES_SOLROCK] = TMHM_LEARNSET(TMHM(TM04_CALM_MIND) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM29_PSYCHIC) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM33_REFLECT) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM37_SANDSTORM) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM48_SKILL_SWAP) - | TMHM(TM50_OVERHEAT) - | TMHM(HM05_FLASH)), - - [SPECIES_AZURILL] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) - | TMHM(TM06_TOXIC) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM27_RETURN) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM03_SURF) - | TMHM(HM07_WATERFALL)), - - [SPECIES_SPOINK] = TMHM_LEARNSET(TMHM(TM04_CALM_MIND) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM27_RETURN) - | TMHM(TM29_PSYCHIC) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM33_REFLECT) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM41_TORMENT) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(TM48_SKILL_SWAP) - | TMHM(TM49_SNATCH) - | TMHM(HM05_FLASH)), - - [SPECIES_GRUMPIG] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM04_CALM_MIND) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM27_RETURN) - | TMHM(TM29_PSYCHIC) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM33_REFLECT) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM41_TORMENT) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(TM48_SKILL_SWAP) - | TMHM(TM49_SNATCH) - | TMHM(HM05_FLASH)), - - [SPECIES_PLUSLE] = TMHM_LEARNSET(TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM25_THUNDER) - | TMHM(TM27_RETURN) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM05_FLASH)), - - [SPECIES_MINUN] = TMHM_LEARNSET(TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM25_THUNDER) - | TMHM(TM27_RETURN) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM05_FLASH)), - - [SPECIES_MAWILE] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM27_RETURN) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM37_SANDSTORM) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM41_TORMENT) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_MEDITITE] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM04_CALM_MIND) - | TMHM(TM06_TOXIC) - | TMHM(TM08_BULK_UP) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM27_RETURN) - | TMHM(TM29_PSYCHIC) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM33_REFLECT) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM04_STRENGTH) - | TMHM(HM05_FLASH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_MEDICHAM] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM04_CALM_MIND) - | TMHM(TM06_TOXIC) - | TMHM(TM08_BULK_UP) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM27_RETURN) - | TMHM(TM29_PSYCHIC) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM33_REFLECT) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM04_STRENGTH) - | TMHM(HM05_FLASH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_SWABLU] = TMHM_LEARNSET(TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM27_RETURN) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(TM47_STEEL_WING) - | TMHM(HM02_FLY)), - - [SPECIES_ALTARIA] = TMHM_LEARNSET(TMHM(TM02_DRAGON_CLAW) - | TMHM(TM05_ROAR) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(TM47_STEEL_WING) - | TMHM(HM02_FLY) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_WYNAUT] = TMHM_LEARNSET(0), - - [SPECIES_DUSKULL] = TMHM_LEARNSET(TMHM(TM04_CALM_MIND) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM27_RETURN) - | TMHM(TM29_PSYCHIC) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM41_TORMENT) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(TM48_SKILL_SWAP) - | TMHM(TM49_SNATCH) - | TMHM(HM05_FLASH)), - - [SPECIES_DUSCLOPS] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM04_CALM_MIND) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM29_PSYCHIC) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM41_TORMENT) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(TM48_SKILL_SWAP) - | TMHM(TM49_SNATCH) - | TMHM(HM04_STRENGTH) - | TMHM(HM05_FLASH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_ROSELIA] = TMHM_LEARNSET(TMHM(TM06_TOXIC) - | TMHM(TM09_BULLET_SEED) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM17_PROTECT) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM27_RETURN) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM01_CUT) - | TMHM(HM05_FLASH)), - - [SPECIES_SLAKOTH] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM03_WATER_PULSE) - | TMHM(TM06_TOXIC) - | TMHM(TM08_BULK_UP) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM25_THUNDER) - | TMHM(TM27_RETURN) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM01_CUT) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_VIGOROTH] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM03_WATER_PULSE) - | TMHM(TM05_ROAR) - | TMHM(TM06_TOXIC) - | TMHM(TM08_BULK_UP) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM25_THUNDER) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM01_CUT) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_SLAKING] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM03_WATER_PULSE) - | TMHM(TM05_ROAR) - | TMHM(TM06_TOXIC) - | TMHM(TM08_BULK_UP) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM25_THUNDER) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM01_CUT) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_GULPIN] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) - | TMHM(TM06_TOXIC) - | TMHM(TM09_BULLET_SEED) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM27_RETURN) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM49_SNATCH) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_SWALOT] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) - | TMHM(TM06_TOXIC) - | TMHM(TM09_BULLET_SEED) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM27_RETURN) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM49_SNATCH) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_TROPIUS] = TMHM_LEARNSET(TMHM(TM05_ROAR) - | TMHM(TM06_TOXIC) - | TMHM(TM09_BULLET_SEED) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM47_STEEL_WING) - | TMHM(HM01_CUT) - | TMHM(HM02_FLY) - | TMHM(HM04_STRENGTH) - | TMHM(HM05_FLASH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_WHISMUR] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) - | TMHM(TM05_ROAR) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM27_RETURN) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT)), - - [SPECIES_LOUDRED] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) - | TMHM(TM05_ROAR) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM41_TORMENT) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM50_OVERHEAT) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_EXPLOUD] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) - | TMHM(TM05_ROAR) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM41_TORMENT) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM50_OVERHEAT) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_CLAMPERL] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) - | TMHM(TM06_TOXIC) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM27_RETURN) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM03_SURF) - | TMHM(HM07_WATERFALL) - | TMHM(HM08_DIVE)), - - [SPECIES_HUNTAIL] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) - | TMHM(TM06_TOXIC) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM27_RETURN) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM49_SNATCH) - | TMHM(HM03_SURF) - | TMHM(HM07_WATERFALL) - | TMHM(HM08_DIVE)), - - [SPECIES_GOREBYSS] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) - | TMHM(TM06_TOXIC) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM27_RETURN) - | TMHM(TM29_PSYCHIC) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM03_SURF) - | TMHM(HM07_WATERFALL) - | TMHM(HM08_DIVE)), - - [SPECIES_ABSOL] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) - | TMHM(TM04_CALM_MIND) - | TMHM(TM06_TOXIC) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM25_THUNDER) - | TMHM(TM27_RETURN) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM37_SANDSTORM) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM41_TORMENT) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(TM49_SNATCH) - | TMHM(HM01_CUT) - | TMHM(HM04_STRENGTH) - | TMHM(HM05_FLASH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_SHUPPET] = TMHM_LEARNSET(TMHM(TM04_CALM_MIND) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM25_THUNDER) - | TMHM(TM27_RETURN) - | TMHM(TM29_PSYCHIC) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM41_TORMENT) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(TM48_SKILL_SWAP) - | TMHM(TM49_SNATCH) - | TMHM(HM05_FLASH)), - - [SPECIES_BANETTE] = TMHM_LEARNSET(TMHM(TM04_CALM_MIND) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM25_THUNDER) - | TMHM(TM27_RETURN) - | TMHM(TM29_PSYCHIC) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM41_TORMENT) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(TM48_SKILL_SWAP) - | TMHM(TM49_SNATCH) - | TMHM(HM05_FLASH)), - - [SPECIES_SEVIPER] = TMHM_LEARNSET(TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(TM49_SNATCH) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_ZANGOOSE] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM03_WATER_PULSE) - | TMHM(TM05_ROAR) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM25_THUNDER) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_RELICANTH] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) - | TMHM(TM04_CALM_MIND) - | TMHM(TM06_TOXIC) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM37_SANDSTORM) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM03_SURF) - | TMHM(HM06_ROCK_SMASH) - | TMHM(HM07_WATERFALL) - | TMHM(HM08_DIVE)), - - [SPECIES_ARON] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) - | TMHM(TM05_ROAR) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM37_SANDSTORM) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM01_CUT) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_LAIRON] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) - | TMHM(TM05_ROAR) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM37_SANDSTORM) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM01_CUT) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_AGGRON] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM02_DRAGON_CLAW) - | TMHM(TM03_WATER_PULSE) - | TMHM(TM05_ROAR) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM25_THUNDER) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM37_SANDSTORM) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM01_CUT) - | TMHM(HM03_SURF) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_CASTFORM] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) - | TMHM(TM06_TOXIC) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM25_THUNDER) - | TMHM(TM27_RETURN) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM37_SANDSTORM) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(HM05_FLASH)), - - [SPECIES_VOLBEAT] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM03_WATER_PULSE) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM25_THUNDER) - | TMHM(TM27_RETURN) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(HM05_FLASH)), - - [SPECIES_ILLUMISE] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM03_WATER_PULSE) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM25_THUNDER) - | TMHM(TM27_RETURN) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(HM05_FLASH)), - - [SPECIES_LILEEP] = TMHM_LEARNSET(TMHM(TM06_TOXIC) - | TMHM(TM09_BULLET_SEED) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM17_PROTECT) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM27_RETURN) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM37_SANDSTORM) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT)), - - [SPECIES_CRADILY] = TMHM_LEARNSET(TMHM(TM06_TOXIC) - | TMHM(TM09_BULLET_SEED) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM37_SANDSTORM) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_ANORITH] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM17_PROTECT) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM37_SANDSTORM) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM01_CUT) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_ARMALDO] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM37_SANDSTORM) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM01_CUT) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_RALTS] = TMHM_LEARNSET(TMHM(TM04_CALM_MIND) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM27_RETURN) - | TMHM(TM29_PSYCHIC) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM33_REFLECT) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM41_TORMENT) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(TM48_SKILL_SWAP) - | TMHM(TM49_SNATCH) - | TMHM(HM05_FLASH)), - - [SPECIES_KIRLIA] = TMHM_LEARNSET(TMHM(TM04_CALM_MIND) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM27_RETURN) - | TMHM(TM29_PSYCHIC) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM33_REFLECT) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM41_TORMENT) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(TM48_SKILL_SWAP) - | TMHM(TM49_SNATCH) - | TMHM(HM05_FLASH)), - - [SPECIES_GARDEVOIR] = TMHM_LEARNSET(TMHM(TM04_CALM_MIND) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM27_RETURN) - | TMHM(TM29_PSYCHIC) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM33_REFLECT) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM41_TORMENT) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(TM48_SKILL_SWAP) - | TMHM(TM49_SNATCH) - | TMHM(HM05_FLASH)), - - [SPECIES_BAGON] = TMHM_LEARNSET(TMHM(TM02_DRAGON_CLAW) - | TMHM(TM05_ROAR) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM27_RETURN) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM01_CUT) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_SHELGON] = TMHM_LEARNSET(TMHM(TM02_DRAGON_CLAW) - | TMHM(TM05_ROAR) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM27_RETURN) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM01_CUT) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_SALAMENCE] = TMHM_LEARNSET(TMHM(TM02_DRAGON_CLAW) - | TMHM(TM05_ROAR) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM47_STEEL_WING) - | TMHM(HM01_CUT) - | TMHM(HM02_FLY) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_BELDUM] = TMHM_LEARNSET(0), - - [SPECIES_METANG] = TMHM_LEARNSET(TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM29_PSYCHIC) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM33_REFLECT) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM37_SANDSTORM) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(HM01_CUT) - | TMHM(HM04_STRENGTH) - | TMHM(HM05_FLASH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_METAGROSS] = TMHM_LEARNSET(TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM29_PSYCHIC) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM33_REFLECT) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM37_SANDSTORM) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(HM01_CUT) - | TMHM(HM04_STRENGTH) - | TMHM(HM05_FLASH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_REGIROCK] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM25_THUNDER) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM37_SANDSTORM) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_REGICE] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM06_TOXIC) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM25_THUNDER) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_REGISTEEL] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM25_THUNDER) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM37_SANDSTORM) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_KYOGRE] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) - | TMHM(TM04_CALM_MIND) - | TMHM(TM05_ROAR) - | TMHM(TM06_TOXIC) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM25_THUNDER) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(HM03_SURF) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH) - | TMHM(HM07_WATERFALL) - | TMHM(HM08_DIVE)), - - [SPECIES_GROUDON] = TMHM_LEARNSET(TMHM(TM02_DRAGON_CLAW) - | TMHM(TM05_ROAR) - | TMHM(TM06_TOXIC) - | TMHM(TM08_BULK_UP) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM25_THUNDER) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM37_SANDSTORM) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM50_OVERHEAT) - | TMHM(HM01_CUT) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_RAYQUAZA] = TMHM_LEARNSET(TMHM(TM02_DRAGON_CLAW) - | TMHM(TM03_WATER_PULSE) - | TMHM(TM05_ROAR) - | TMHM(TM06_TOXIC) - | TMHM(TM08_BULK_UP) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM25_THUNDER) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM37_SANDSTORM) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM50_OVERHEAT) - | TMHM(HM02_FLY) - | TMHM(HM03_SURF) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH) - | TMHM(HM07_WATERFALL) - | TMHM(HM08_DIVE)), - - [SPECIES_LATIAS] = TMHM_LEARNSET(TMHM(TM02_DRAGON_CLAW) - | TMHM(TM03_WATER_PULSE) - | TMHM(TM04_CALM_MIND) - | TMHM(TM05_ROAR) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM25_THUNDER) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM29_PSYCHIC) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM33_REFLECT) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM37_SANDSTORM) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM47_STEEL_WING) - | TMHM(HM01_CUT) - | TMHM(HM02_FLY) - | TMHM(HM03_SURF) - | TMHM(HM05_FLASH) - | TMHM(HM07_WATERFALL) - | TMHM(HM08_DIVE)), - - [SPECIES_LATIOS] = TMHM_LEARNSET(TMHM(TM02_DRAGON_CLAW) - | TMHM(TM03_WATER_PULSE) - | TMHM(TM04_CALM_MIND) - | TMHM(TM05_ROAR) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM25_THUNDER) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM29_PSYCHIC) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM33_REFLECT) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM37_SANDSTORM) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM47_STEEL_WING) - | TMHM(HM01_CUT) - | TMHM(HM02_FLY) - | TMHM(HM03_SURF) - | TMHM(HM05_FLASH) - | TMHM(HM07_WATERFALL) - | TMHM(HM08_DIVE)), - - [SPECIES_JIRACHI] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) - | TMHM(TM04_CALM_MIND) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM25_THUNDER) - | TMHM(TM27_RETURN) - | TMHM(TM29_PSYCHIC) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM33_REFLECT) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM37_SANDSTORM) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM48_SKILL_SWAP) - | TMHM(HM05_FLASH)), - - [SPECIES_DEOXYS] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM03_WATER_PULSE) - | TMHM(TM04_CALM_MIND) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM25_THUNDER) - | TMHM(TM27_RETURN) - | TMHM(TM29_PSYCHIC) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM33_REFLECT) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM41_TORMENT) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM48_SKILL_SWAP) - | TMHM(TM49_SNATCH) - | TMHM(HM01_CUT) - | TMHM(HM04_STRENGTH) - | TMHM(HM05_FLASH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_CHIMECHO] = TMHM_LEARNSET(TMHM(TM04_CALM_MIND) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM27_RETURN) - | TMHM(TM29_PSYCHIC) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM33_REFLECT) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM41_TORMENT) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM48_SKILL_SWAP) - | TMHM(TM49_SNATCH) - | TMHM(HM05_FLASH)), + FOREACH_TMHM(TMHM_LEARN) +}; +#undef TMHM_LEARN + +const union { + struct TMHMLearnset learnset; + u32 as_u32s[sizeof(struct TMHMLearnset) / sizeof(u32)]; +} gTMHMLearnsets[NUM_SPECIES] = +{ + [SPECIES_NONE] = {}, + + [SPECIES_BULBASAUR] = { .learnset = { + .TOXIC = TRUE, + .BULLET_SEED = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .PROTECT = TRUE, + .GIGA_DRAIN = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .RETURN = TRUE, + .DOUBLE_TEAM = TRUE, + .SLUDGE_BOMB = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .CUT = TRUE, + .STRENGTH = TRUE, + .FLASH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_IVYSAUR] = { .learnset = { + .TOXIC = TRUE, + .BULLET_SEED = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .PROTECT = TRUE, + .GIGA_DRAIN = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .RETURN = TRUE, + .DOUBLE_TEAM = TRUE, + .SLUDGE_BOMB = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .CUT = TRUE, + .STRENGTH = TRUE, + .FLASH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_VENUSAUR] = { .learnset = { + .ROAR = TRUE, + .TOXIC = TRUE, + .BULLET_SEED = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .GIGA_DRAIN = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .DOUBLE_TEAM = TRUE, + .SLUDGE_BOMB = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .CUT = TRUE, + .STRENGTH = TRUE, + .FLASH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_CHARMANDER] = { .learnset = { + .FOCUS_PUNCH = TRUE, + .DRAGON_CLAW = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .PROTECT = TRUE, + .FRUSTRATION = TRUE, + .IRON_TAIL = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .FLAMETHROWER = TRUE, + .FIRE_BLAST = TRUE, + .AERIAL_ACE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .OVERHEAT = TRUE, + .CUT = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_CHARMELEON] = { .learnset = { + .FOCUS_PUNCH = TRUE, + .DRAGON_CLAW = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .PROTECT = TRUE, + .FRUSTRATION = TRUE, + .IRON_TAIL = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .FLAMETHROWER = TRUE, + .FIRE_BLAST = TRUE, + .AERIAL_ACE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .OVERHEAT = TRUE, + .CUT = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_CHARIZARD] = { .learnset = { + .FOCUS_PUNCH = TRUE, + .DRAGON_CLAW = TRUE, + .ROAR = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .FRUSTRATION = TRUE, + .IRON_TAIL = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .FLAMETHROWER = TRUE, + .FIRE_BLAST = TRUE, + .AERIAL_ACE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .STEEL_WING = TRUE, + .OVERHEAT = TRUE, + .CUT = TRUE, + .FLY = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_SQUIRTLE] = { .learnset = { + .FOCUS_PUNCH = TRUE, + .WATER_PULSE = TRUE, + .TOXIC = TRUE, + .HAIL = TRUE, + .HIDDEN_POWER = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .IRON_TAIL = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .SURF = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + .WATERFALL = TRUE, + .DIVE = TRUE, + } }, + + [SPECIES_WARTORTLE] = { .learnset = { + .FOCUS_PUNCH = TRUE, + .WATER_PULSE = TRUE, + .TOXIC = TRUE, + .HAIL = TRUE, + .HIDDEN_POWER = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .IRON_TAIL = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .SURF = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + .WATERFALL = TRUE, + .DIVE = TRUE, + } }, + + [SPECIES_BLASTOISE] = { .learnset = { + .FOCUS_PUNCH = TRUE, + .WATER_PULSE = TRUE, + .ROAR = TRUE, + .TOXIC = TRUE, + .HAIL = TRUE, + .HIDDEN_POWER = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .IRON_TAIL = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .SURF = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + .WATERFALL = TRUE, + .DIVE = TRUE, + } }, + + [SPECIES_CATERPIE] = { .learnset = { + } }, + + [SPECIES_METAPOD] = { .learnset = { + } }, + + [SPECIES_BUTTERFREE] = { .learnset = { + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .GIGA_DRAIN = TRUE, + .SAFEGUARD = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .RETURN = TRUE, + .PSYCHIC = TRUE, + .SHADOW_BALL = TRUE, + .DOUBLE_TEAM = TRUE, + .AERIAL_ACE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .SKILL_SWAP = TRUE, + .FLASH = TRUE, + } }, + + [SPECIES_WEEDLE] = { .learnset = { + } }, + + [SPECIES_KAKUNA] = { .learnset = { + } }, + + [SPECIES_BEEDRILL] = { .learnset = { + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .GIGA_DRAIN = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .RETURN = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .SLUDGE_BOMB = TRUE, + .AERIAL_ACE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .CUT = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_PIDGEY] = { .learnset = { + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .RETURN = TRUE, + .DOUBLE_TEAM = TRUE, + .AERIAL_ACE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .STEEL_WING = TRUE, + .FLY = TRUE, + } }, + + [SPECIES_PIDGEOTTO] = { .learnset = { + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .RETURN = TRUE, + .DOUBLE_TEAM = TRUE, + .AERIAL_ACE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .STEEL_WING = TRUE, + .FLY = TRUE, + } }, + + [SPECIES_PIDGEOT] = { .learnset = { + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .RETURN = TRUE, + .DOUBLE_TEAM = TRUE, + .AERIAL_ACE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .STEEL_WING = TRUE, + .FLY = TRUE, + } }, + + [SPECIES_RATTATA] = { .learnset = { + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .TAUNT = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .IRON_TAIL = TRUE, + .THUNDERBOLT = TRUE, + .THUNDER = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .SHADOW_BALL = TRUE, + .DOUBLE_TEAM = TRUE, + .SHOCK_WAVE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .CUT = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_RATICATE] = { .learnset = { + .ROAR = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .TAUNT = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .IRON_TAIL = TRUE, + .THUNDERBOLT = TRUE, + .THUNDER = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .SHADOW_BALL = TRUE, + .DOUBLE_TEAM = TRUE, + .SHOCK_WAVE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .CUT = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_SPEAROW] = { .learnset = { + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .RETURN = TRUE, + .DOUBLE_TEAM = TRUE, + .AERIAL_ACE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .STEEL_WING = TRUE, + .FLY = TRUE, + } }, + + [SPECIES_FEAROW] = { .learnset = { + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .RETURN = TRUE, + .DOUBLE_TEAM = TRUE, + .AERIAL_ACE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .STEEL_WING = TRUE, + .FLY = TRUE, + } }, + + [SPECIES_EKANS] = { .learnset = { + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .GIGA_DRAIN = TRUE, + .FRUSTRATION = TRUE, + .IRON_TAIL = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .DOUBLE_TEAM = TRUE, + .SLUDGE_BOMB = TRUE, + .TORMENT = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .SNATCH = TRUE, + .STRENGTH = TRUE, + } }, + + [SPECIES_ARBOK] = { .learnset = { + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .GIGA_DRAIN = TRUE, + .FRUSTRATION = TRUE, + .IRON_TAIL = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .DOUBLE_TEAM = TRUE, + .SLUDGE_BOMB = TRUE, + .TORMENT = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .SNATCH = TRUE, + .STRENGTH = TRUE, + } }, + + [SPECIES_PIKACHU] = { .learnset = { + .FOCUS_PUNCH = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .LIGHT_SCREEN = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .IRON_TAIL = TRUE, + .THUNDERBOLT = TRUE, + .THUNDER = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .SHOCK_WAVE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .STRENGTH = TRUE, + .FLASH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_RAICHU] = { .learnset = { + .FOCUS_PUNCH = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .HYPER_BEAM = TRUE, + .LIGHT_SCREEN = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .IRON_TAIL = TRUE, + .THUNDERBOLT = TRUE, + .THUNDER = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .SHOCK_WAVE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .STRENGTH = TRUE, + .FLASH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_SANDSHREW] = { .learnset = { + .FOCUS_PUNCH = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .PROTECT = TRUE, + .FRUSTRATION = TRUE, + .IRON_TAIL = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .SANDSTORM = TRUE, + .ROCK_TOMB = TRUE, + .AERIAL_ACE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .CUT = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_SANDSLASH] = { .learnset = { + .FOCUS_PUNCH = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .FRUSTRATION = TRUE, + .IRON_TAIL = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .SANDSTORM = TRUE, + .ROCK_TOMB = TRUE, + .AERIAL_ACE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .CUT = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_NIDORAN_F] = { .learnset = { + .WATER_PULSE = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .IRON_TAIL = TRUE, + .THUNDERBOLT = TRUE, + .THUNDER = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .DOUBLE_TEAM = TRUE, + .SHOCK_WAVE = TRUE, + .SLUDGE_BOMB = TRUE, + .AERIAL_ACE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .CUT = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_NIDORINA] = { .learnset = { + .WATER_PULSE = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .IRON_TAIL = TRUE, + .THUNDERBOLT = TRUE, + .THUNDER = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .DOUBLE_TEAM = TRUE, + .SHOCK_WAVE = TRUE, + .SLUDGE_BOMB = TRUE, + .AERIAL_ACE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .CUT = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_NIDOQUEEN] = { .learnset = { + .FOCUS_PUNCH = TRUE, + .WATER_PULSE = TRUE, + .ROAR = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .TAUNT = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .IRON_TAIL = TRUE, + .THUNDERBOLT = TRUE, + .THUNDER = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .SHADOW_BALL = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .SHOCK_WAVE = TRUE, + .FLAMETHROWER = TRUE, + .SLUDGE_BOMB = TRUE, + .SANDSTORM = TRUE, + .FIRE_BLAST = TRUE, + .ROCK_TOMB = TRUE, + .AERIAL_ACE = TRUE, + .TORMENT = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .CUT = TRUE, + .SURF = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_NIDORAN_M] = { .learnset = { + .WATER_PULSE = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .IRON_TAIL = TRUE, + .THUNDERBOLT = TRUE, + .THUNDER = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .DOUBLE_TEAM = TRUE, + .SHOCK_WAVE = TRUE, + .SLUDGE_BOMB = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .CUT = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_NIDORINO] = { .learnset = { + .WATER_PULSE = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .IRON_TAIL = TRUE, + .THUNDERBOLT = TRUE, + .THUNDER = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .DOUBLE_TEAM = TRUE, + .SHOCK_WAVE = TRUE, + .SLUDGE_BOMB = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .CUT = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_NIDOKING] = { .learnset = { + .FOCUS_PUNCH = TRUE, + .WATER_PULSE = TRUE, + .ROAR = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .TAUNT = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .IRON_TAIL = TRUE, + .THUNDERBOLT = TRUE, + .THUNDER = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .SHADOW_BALL = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .SHOCK_WAVE = TRUE, + .FLAMETHROWER = TRUE, + .SLUDGE_BOMB = TRUE, + .SANDSTORM = TRUE, + .FIRE_BLAST = TRUE, + .ROCK_TOMB = TRUE, + .TORMENT = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .CUT = TRUE, + .SURF = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_CLEFAIRY] = { .learnset = { + .FOCUS_PUNCH = TRUE, + .WATER_PULSE = TRUE, + .CALM_MIND = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .LIGHT_SCREEN = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .SAFEGUARD = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .IRON_TAIL = TRUE, + .THUNDERBOLT = TRUE, + .THUNDER = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .PSYCHIC = TRUE, + .SHADOW_BALL = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .REFLECT = TRUE, + .SHOCK_WAVE = TRUE, + .FLAMETHROWER = TRUE, + .FIRE_BLAST = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .SNATCH = TRUE, + .STRENGTH = TRUE, + .FLASH = TRUE, + } }, + + [SPECIES_CLEFABLE] = { .learnset = { + .FOCUS_PUNCH = TRUE, + .WATER_PULSE = TRUE, + .CALM_MIND = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .HYPER_BEAM = TRUE, + .LIGHT_SCREEN = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .SAFEGUARD = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .IRON_TAIL = TRUE, + .THUNDERBOLT = TRUE, + .THUNDER = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .PSYCHIC = TRUE, + .SHADOW_BALL = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .REFLECT = TRUE, + .SHOCK_WAVE = TRUE, + .FLAMETHROWER = TRUE, + .FIRE_BLAST = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .SNATCH = TRUE, + .STRENGTH = TRUE, + .FLASH = TRUE, + } }, + + [SPECIES_VULPIX] = { .learnset = { + .ROAR = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .PROTECT = TRUE, + .SAFEGUARD = TRUE, + .FRUSTRATION = TRUE, + .IRON_TAIL = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .DOUBLE_TEAM = TRUE, + .FLAMETHROWER = TRUE, + .FIRE_BLAST = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .OVERHEAT = TRUE, + } }, + + [SPECIES_NINETALES] = { .learnset = { + .ROAR = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .SAFEGUARD = TRUE, + .FRUSTRATION = TRUE, + .IRON_TAIL = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .DOUBLE_TEAM = TRUE, + .FLAMETHROWER = TRUE, + .FIRE_BLAST = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .OVERHEAT = TRUE, + } }, + + [SPECIES_JIGGLYPUFF] = { .learnset = { + .FOCUS_PUNCH = TRUE, + .WATER_PULSE = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .LIGHT_SCREEN = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .SAFEGUARD = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .THUNDERBOLT = TRUE, + .THUNDER = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .PSYCHIC = TRUE, + .SHADOW_BALL = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .REFLECT = TRUE, + .SHOCK_WAVE = TRUE, + .FLAMETHROWER = TRUE, + .FIRE_BLAST = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .SNATCH = TRUE, + .STRENGTH = TRUE, + .FLASH = TRUE, + } }, + + [SPECIES_WIGGLYTUFF] = { .learnset = { + .FOCUS_PUNCH = TRUE, + .WATER_PULSE = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .HYPER_BEAM = TRUE, + .LIGHT_SCREEN = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .SAFEGUARD = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .THUNDERBOLT = TRUE, + .THUNDER = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .PSYCHIC = TRUE, + .SHADOW_BALL = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .REFLECT = TRUE, + .SHOCK_WAVE = TRUE, + .FLAMETHROWER = TRUE, + .FIRE_BLAST = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .SNATCH = TRUE, + .STRENGTH = TRUE, + .FLASH = TRUE, + } }, + + [SPECIES_ZUBAT] = { .learnset = { + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .TAUNT = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .GIGA_DRAIN = TRUE, + .FRUSTRATION = TRUE, + .RETURN = TRUE, + .SHADOW_BALL = TRUE, + .DOUBLE_TEAM = TRUE, + .SLUDGE_BOMB = TRUE, + .AERIAL_ACE = TRUE, + .TORMENT = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .STEEL_WING = TRUE, + .SNATCH = TRUE, + } }, + + [SPECIES_GOLBAT] = { .learnset = { + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .TAUNT = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .GIGA_DRAIN = TRUE, + .FRUSTRATION = TRUE, + .RETURN = TRUE, + .SHADOW_BALL = TRUE, + .DOUBLE_TEAM = TRUE, + .SLUDGE_BOMB = TRUE, + .AERIAL_ACE = TRUE, + .TORMENT = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .STEEL_WING = TRUE, + .SNATCH = TRUE, + } }, + + [SPECIES_ODDISH] = { .learnset = { + .TOXIC = TRUE, + .BULLET_SEED = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .PROTECT = TRUE, + .GIGA_DRAIN = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .RETURN = TRUE, + .DOUBLE_TEAM = TRUE, + .SLUDGE_BOMB = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .CUT = TRUE, + .FLASH = TRUE, + } }, + + [SPECIES_GLOOM] = { .learnset = { + .TOXIC = TRUE, + .BULLET_SEED = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .PROTECT = TRUE, + .GIGA_DRAIN = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .RETURN = TRUE, + .DOUBLE_TEAM = TRUE, + .SLUDGE_BOMB = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .CUT = TRUE, + .FLASH = TRUE, + } }, + + [SPECIES_VILEPLUME] = { .learnset = { + .TOXIC = TRUE, + .BULLET_SEED = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .GIGA_DRAIN = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .RETURN = TRUE, + .DOUBLE_TEAM = TRUE, + .SLUDGE_BOMB = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .CUT = TRUE, + .FLASH = TRUE, + } }, + + [SPECIES_PARAS] = { .learnset = { + .TOXIC = TRUE, + .BULLET_SEED = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .PROTECT = TRUE, + .GIGA_DRAIN = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .DOUBLE_TEAM = TRUE, + .SLUDGE_BOMB = TRUE, + .AERIAL_ACE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .CUT = TRUE, + .FLASH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_PARASECT] = { .learnset = { + .TOXIC = TRUE, + .BULLET_SEED = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .GIGA_DRAIN = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .DOUBLE_TEAM = TRUE, + .SLUDGE_BOMB = TRUE, + .AERIAL_ACE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .CUT = TRUE, + .FLASH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_VENONAT] = { .learnset = { + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .PROTECT = TRUE, + .GIGA_DRAIN = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .RETURN = TRUE, + .PSYCHIC = TRUE, + .DOUBLE_TEAM = TRUE, + .SLUDGE_BOMB = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .SKILL_SWAP = TRUE, + .FLASH = TRUE, + } }, + + [SPECIES_VENOMOTH] = { .learnset = { + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .GIGA_DRAIN = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .RETURN = TRUE, + .PSYCHIC = TRUE, + .DOUBLE_TEAM = TRUE, + .SLUDGE_BOMB = TRUE, + .AERIAL_ACE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .SKILL_SWAP = TRUE, + .FLASH = TRUE, + } }, + + [SPECIES_DIGLETT] = { .learnset = { + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .PROTECT = TRUE, + .FRUSTRATION = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .DOUBLE_TEAM = TRUE, + .SLUDGE_BOMB = TRUE, + .ROCK_TOMB = TRUE, + .AERIAL_ACE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .CUT = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_DUGTRIO] = { .learnset = { + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .FRUSTRATION = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .DOUBLE_TEAM = TRUE, + .SLUDGE_BOMB = TRUE, + .ROCK_TOMB = TRUE, + .AERIAL_ACE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .CUT = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_MEOWTH] = { .learnset = { + .WATER_PULSE = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .TAUNT = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .IRON_TAIL = TRUE, + .THUNDERBOLT = TRUE, + .THUNDER = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .SHADOW_BALL = TRUE, + .DOUBLE_TEAM = TRUE, + .SHOCK_WAVE = TRUE, + .AERIAL_ACE = TRUE, + .TORMENT = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .SNATCH = TRUE, + .CUT = TRUE, + .FLASH = TRUE, + } }, + + [SPECIES_PERSIAN] = { .learnset = { + .WATER_PULSE = TRUE, + .ROAR = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .TAUNT = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .IRON_TAIL = TRUE, + .THUNDERBOLT = TRUE, + .THUNDER = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .SHADOW_BALL = TRUE, + .DOUBLE_TEAM = TRUE, + .SHOCK_WAVE = TRUE, + .AERIAL_ACE = TRUE, + .TORMENT = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .SNATCH = TRUE, + .CUT = TRUE, + .FLASH = TRUE, + } }, + + [SPECIES_PSYDUCK] = { .learnset = { + .FOCUS_PUNCH = TRUE, + .WATER_PULSE = TRUE, + .CALM_MIND = TRUE, + .TOXIC = TRUE, + .HAIL = TRUE, + .HIDDEN_POWER = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .IRON_TAIL = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .AERIAL_ACE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .SURF = TRUE, + .STRENGTH = TRUE, + .FLASH = TRUE, + .ROCK_SMASH = TRUE, + .WATERFALL = TRUE, + .DIVE = TRUE, + } }, + + [SPECIES_GOLDUCK] = { .learnset = { + .FOCUS_PUNCH = TRUE, + .WATER_PULSE = TRUE, + .CALM_MIND = TRUE, + .TOXIC = TRUE, + .HAIL = TRUE, + .HIDDEN_POWER = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .IRON_TAIL = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .AERIAL_ACE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .SURF = TRUE, + .STRENGTH = TRUE, + .FLASH = TRUE, + .ROCK_SMASH = TRUE, + .WATERFALL = TRUE, + .DIVE = TRUE, + } }, + + [SPECIES_MANKEY] = { .learnset = { + .FOCUS_PUNCH = TRUE, + .TOXIC = TRUE, + .BULK_UP = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .TAUNT = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .IRON_TAIL = TRUE, + .THUNDERBOLT = TRUE, + .THUNDER = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .ROCK_TOMB = TRUE, + .AERIAL_ACE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .OVERHEAT = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_PRIMEAPE] = { .learnset = { + .FOCUS_PUNCH = TRUE, + .TOXIC = TRUE, + .BULK_UP = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .TAUNT = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .IRON_TAIL = TRUE, + .THUNDERBOLT = TRUE, + .THUNDER = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .ROCK_TOMB = TRUE, + .AERIAL_ACE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .OVERHEAT = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_GROWLITHE] = { .learnset = { + .ROAR = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .PROTECT = TRUE, + .FRUSTRATION = TRUE, + .IRON_TAIL = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .DOUBLE_TEAM = TRUE, + .FLAMETHROWER = TRUE, + .FIRE_BLAST = TRUE, + .AERIAL_ACE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .OVERHEAT = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_ARCANINE] = { .learnset = { + .ROAR = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .FRUSTRATION = TRUE, + .IRON_TAIL = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .DOUBLE_TEAM = TRUE, + .FLAMETHROWER = TRUE, + .FIRE_BLAST = TRUE, + .AERIAL_ACE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .OVERHEAT = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_POLIWAG] = { .learnset = { + .WATER_PULSE = TRUE, + .TOXIC = TRUE, + .HAIL = TRUE, + .HIDDEN_POWER = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .PSYCHIC = TRUE, + .DOUBLE_TEAM = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .SURF = TRUE, + .WATERFALL = TRUE, + .DIVE = TRUE, + } }, + + [SPECIES_POLIWHIRL] = { .learnset = { + .FOCUS_PUNCH = TRUE, + .WATER_PULSE = TRUE, + .TOXIC = TRUE, + .HAIL = TRUE, + .HIDDEN_POWER = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .PSYCHIC = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .SURF = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + .WATERFALL = TRUE, + .DIVE = TRUE, + } }, + + [SPECIES_POLIWRATH] = { .learnset = { + .FOCUS_PUNCH = TRUE, + .WATER_PULSE = TRUE, + .TOXIC = TRUE, + .HAIL = TRUE, + .BULK_UP = TRUE, + .HIDDEN_POWER = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .PSYCHIC = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .ROCK_TOMB = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .SURF = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + .WATERFALL = TRUE, + .DIVE = TRUE, + } }, + + [SPECIES_ABRA] = { .learnset = { + .FOCUS_PUNCH = TRUE, + .CALM_MIND = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .TAUNT = TRUE, + .LIGHT_SCREEN = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .SAFEGUARD = TRUE, + .FRUSTRATION = TRUE, + .IRON_TAIL = TRUE, + .RETURN = TRUE, + .PSYCHIC = TRUE, + .SHADOW_BALL = TRUE, + .DOUBLE_TEAM = TRUE, + .REFLECT = TRUE, + .SHOCK_WAVE = TRUE, + .TORMENT = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .SKILL_SWAP = TRUE, + .SNATCH = TRUE, + .FLASH = TRUE, + } }, + + [SPECIES_KADABRA] = { .learnset = { + .FOCUS_PUNCH = TRUE, + .CALM_MIND = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .TAUNT = TRUE, + .LIGHT_SCREEN = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .SAFEGUARD = TRUE, + .FRUSTRATION = TRUE, + .IRON_TAIL = TRUE, + .RETURN = TRUE, + .PSYCHIC = TRUE, + .SHADOW_BALL = TRUE, + .DOUBLE_TEAM = TRUE, + .REFLECT = TRUE, + .SHOCK_WAVE = TRUE, + .TORMENT = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .SKILL_SWAP = TRUE, + .SNATCH = TRUE, + .FLASH = TRUE, + } }, + + [SPECIES_ALAKAZAM] = { .learnset = { + .FOCUS_PUNCH = TRUE, + .CALM_MIND = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .TAUNT = TRUE, + .HYPER_BEAM = TRUE, + .LIGHT_SCREEN = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .SAFEGUARD = TRUE, + .FRUSTRATION = TRUE, + .IRON_TAIL = TRUE, + .RETURN = TRUE, + .PSYCHIC = TRUE, + .SHADOW_BALL = TRUE, + .DOUBLE_TEAM = TRUE, + .REFLECT = TRUE, + .SHOCK_WAVE = TRUE, + .TORMENT = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .SKILL_SWAP = TRUE, + .SNATCH = TRUE, + .FLASH = TRUE, + } }, + + [SPECIES_MACHOP] = { .learnset = { + .FOCUS_PUNCH = TRUE, + .TOXIC = TRUE, + .BULK_UP = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .FLAMETHROWER = TRUE, + .FIRE_BLAST = TRUE, + .ROCK_TOMB = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_MACHOKE] = { .learnset = { + .FOCUS_PUNCH = TRUE, + .TOXIC = TRUE, + .BULK_UP = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .FLAMETHROWER = TRUE, + .FIRE_BLAST = TRUE, + .ROCK_TOMB = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_MACHAMP] = { .learnset = { + .FOCUS_PUNCH = TRUE, + .TOXIC = TRUE, + .BULK_UP = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .FLAMETHROWER = TRUE, + .FIRE_BLAST = TRUE, + .ROCK_TOMB = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_BELLSPROUT] = { .learnset = { + .TOXIC = TRUE, + .BULLET_SEED = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .PROTECT = TRUE, + .GIGA_DRAIN = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .RETURN = TRUE, + .DOUBLE_TEAM = TRUE, + .SLUDGE_BOMB = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .CUT = TRUE, + .FLASH = TRUE, + } }, + + [SPECIES_WEEPINBELL] = { .learnset = { + .TOXIC = TRUE, + .BULLET_SEED = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .PROTECT = TRUE, + .GIGA_DRAIN = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .RETURN = TRUE, + .DOUBLE_TEAM = TRUE, + .SLUDGE_BOMB = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .CUT = TRUE, + .FLASH = TRUE, + } }, + + [SPECIES_VICTREEBEL] = { .learnset = { + .TOXIC = TRUE, + .BULLET_SEED = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .GIGA_DRAIN = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .RETURN = TRUE, + .DOUBLE_TEAM = TRUE, + .SLUDGE_BOMB = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .CUT = TRUE, + .FLASH = TRUE, + } }, + + [SPECIES_TENTACOOL] = { .learnset = { + .WATER_PULSE = TRUE, + .TOXIC = TRUE, + .HAIL = TRUE, + .HIDDEN_POWER = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .GIGA_DRAIN = TRUE, + .FRUSTRATION = TRUE, + .RETURN = TRUE, + .DOUBLE_TEAM = TRUE, + .SLUDGE_BOMB = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .CUT = TRUE, + .SURF = TRUE, + .WATERFALL = TRUE, + .DIVE = TRUE, + } }, + + [SPECIES_TENTACRUEL] = { .learnset = { + .WATER_PULSE = TRUE, + .TOXIC = TRUE, + .HAIL = TRUE, + .HIDDEN_POWER = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .GIGA_DRAIN = TRUE, + .FRUSTRATION = TRUE, + .RETURN = TRUE, + .DOUBLE_TEAM = TRUE, + .SLUDGE_BOMB = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .CUT = TRUE, + .SURF = TRUE, + .WATERFALL = TRUE, + .DIVE = TRUE, + } }, + + [SPECIES_GEODUDE] = { .learnset = { + .FOCUS_PUNCH = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .PROTECT = TRUE, + .FRUSTRATION = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .FLAMETHROWER = TRUE, + .SANDSTORM = TRUE, + .FIRE_BLAST = TRUE, + .ROCK_TOMB = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_GRAVELER] = { .learnset = { + .FOCUS_PUNCH = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .PROTECT = TRUE, + .FRUSTRATION = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .FLAMETHROWER = TRUE, + .SANDSTORM = TRUE, + .FIRE_BLAST = TRUE, + .ROCK_TOMB = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_GOLEM] = { .learnset = { + .FOCUS_PUNCH = TRUE, + .ROAR = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .FRUSTRATION = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .FLAMETHROWER = TRUE, + .SANDSTORM = TRUE, + .FIRE_BLAST = TRUE, + .ROCK_TOMB = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_PONYTA] = { .learnset = { + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .PROTECT = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .IRON_TAIL = TRUE, + .RETURN = TRUE, + .DOUBLE_TEAM = TRUE, + .FLAMETHROWER = TRUE, + .FIRE_BLAST = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .OVERHEAT = TRUE, + .STRENGTH = TRUE, + } }, + + [SPECIES_RAPIDASH] = { .learnset = { + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .IRON_TAIL = TRUE, + .RETURN = TRUE, + .DOUBLE_TEAM = TRUE, + .FLAMETHROWER = TRUE, + .FIRE_BLAST = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .OVERHEAT = TRUE, + .STRENGTH = TRUE, + } }, + + [SPECIES_SLOWPOKE] = { .learnset = { + .WATER_PULSE = TRUE, + .CALM_MIND = TRUE, + .TOXIC = TRUE, + .HAIL = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .SAFEGUARD = TRUE, + .FRUSTRATION = TRUE, + .IRON_TAIL = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .PSYCHIC = TRUE, + .SHADOW_BALL = TRUE, + .DOUBLE_TEAM = TRUE, + .FLAMETHROWER = TRUE, + .FIRE_BLAST = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .SKILL_SWAP = TRUE, + .SURF = TRUE, + .STRENGTH = TRUE, + .FLASH = TRUE, + .DIVE = TRUE, + } }, + + [SPECIES_SLOWBRO] = { .learnset = { + .FOCUS_PUNCH = TRUE, + .WATER_PULSE = TRUE, + .CALM_MIND = TRUE, + .TOXIC = TRUE, + .HAIL = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .SAFEGUARD = TRUE, + .FRUSTRATION = TRUE, + .IRON_TAIL = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .PSYCHIC = TRUE, + .SHADOW_BALL = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .FLAMETHROWER = TRUE, + .FIRE_BLAST = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .SKILL_SWAP = TRUE, + .SURF = TRUE, + .STRENGTH = TRUE, + .FLASH = TRUE, + .ROCK_SMASH = TRUE, + .DIVE = TRUE, + } }, + + [SPECIES_MAGNEMITE] = { .learnset = { + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .THUNDERBOLT = TRUE, + .THUNDER = TRUE, + .RETURN = TRUE, + .DOUBLE_TEAM = TRUE, + .REFLECT = TRUE, + .SHOCK_WAVE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .FLASH = TRUE, + } }, + + [SPECIES_MAGNETON] = { .learnset = { + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .THUNDERBOLT = TRUE, + .THUNDER = TRUE, + .RETURN = TRUE, + .DOUBLE_TEAM = TRUE, + .REFLECT = TRUE, + .SHOCK_WAVE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .FLASH = TRUE, + } }, + + [SPECIES_FARFETCHD] = { .learnset = { + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .PROTECT = TRUE, + .FRUSTRATION = TRUE, + .IRON_TAIL = TRUE, + .RETURN = TRUE, + .DOUBLE_TEAM = TRUE, + .AERIAL_ACE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .STEEL_WING = TRUE, + .CUT = TRUE, + .FLY = TRUE, + } }, + + [SPECIES_DODUO] = { .learnset = { + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .PROTECT = TRUE, + .FRUSTRATION = TRUE, + .RETURN = TRUE, + .DOUBLE_TEAM = TRUE, + .AERIAL_ACE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .STEEL_WING = TRUE, + .FLY = TRUE, + } }, + + [SPECIES_DODRIO] = { .learnset = { + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .TAUNT = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .FRUSTRATION = TRUE, + .RETURN = TRUE, + .DOUBLE_TEAM = TRUE, + .AERIAL_ACE = TRUE, + .TORMENT = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .STEEL_WING = TRUE, + .FLY = TRUE, + } }, + + [SPECIES_SEEL] = { .learnset = { + .WATER_PULSE = TRUE, + .TOXIC = TRUE, + .HAIL = TRUE, + .HIDDEN_POWER = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .SAFEGUARD = TRUE, + .FRUSTRATION = TRUE, + .RETURN = TRUE, + .DOUBLE_TEAM = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .SURF = TRUE, + .WATERFALL = TRUE, + .DIVE = TRUE, + } }, + + [SPECIES_DEWGONG] = { .learnset = { + .WATER_PULSE = TRUE, + .TOXIC = TRUE, + .HAIL = TRUE, + .HIDDEN_POWER = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .SAFEGUARD = TRUE, + .FRUSTRATION = TRUE, + .RETURN = TRUE, + .DOUBLE_TEAM = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .SURF = TRUE, + .WATERFALL = TRUE, + .DIVE = TRUE, + } }, + + [SPECIES_GRIMER] = { .learnset = { + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .TAUNT = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .GIGA_DRAIN = TRUE, + .FRUSTRATION = TRUE, + .THUNDERBOLT = TRUE, + .THUNDER = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .DOUBLE_TEAM = TRUE, + .SHOCK_WAVE = TRUE, + .FLAMETHROWER = TRUE, + .SLUDGE_BOMB = TRUE, + .FIRE_BLAST = TRUE, + .ROCK_TOMB = TRUE, + .TORMENT = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + } }, + + [SPECIES_MUK] = { .learnset = { + .FOCUS_PUNCH = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .TAUNT = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .GIGA_DRAIN = TRUE, + .FRUSTRATION = TRUE, + .THUNDERBOLT = TRUE, + .THUNDER = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .SHOCK_WAVE = TRUE, + .FLAMETHROWER = TRUE, + .SLUDGE_BOMB = TRUE, + .FIRE_BLAST = TRUE, + .ROCK_TOMB = TRUE, + .TORMENT = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_SHELLDER] = { .learnset = { + .WATER_PULSE = TRUE, + .TOXIC = TRUE, + .HAIL = TRUE, + .HIDDEN_POWER = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .RETURN = TRUE, + .DOUBLE_TEAM = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .SURF = TRUE, + .DIVE = TRUE, + } }, + + [SPECIES_CLOYSTER] = { .learnset = { + .WATER_PULSE = TRUE, + .TOXIC = TRUE, + .HAIL = TRUE, + .HIDDEN_POWER = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .RETURN = TRUE, + .DOUBLE_TEAM = TRUE, + .TORMENT = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .SURF = TRUE, + .DIVE = TRUE, + } }, + + [SPECIES_GASTLY] = { .learnset = { + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .TAUNT = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .GIGA_DRAIN = TRUE, + .FRUSTRATION = TRUE, + .THUNDERBOLT = TRUE, + .RETURN = TRUE, + .PSYCHIC = TRUE, + .SHADOW_BALL = TRUE, + .DOUBLE_TEAM = TRUE, + .SLUDGE_BOMB = TRUE, + .TORMENT = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .SKILL_SWAP = TRUE, + .SNATCH = TRUE, + } }, + + [SPECIES_HAUNTER] = { .learnset = { + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .TAUNT = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .GIGA_DRAIN = TRUE, + .FRUSTRATION = TRUE, + .THUNDERBOLT = TRUE, + .RETURN = TRUE, + .PSYCHIC = TRUE, + .SHADOW_BALL = TRUE, + .DOUBLE_TEAM = TRUE, + .SLUDGE_BOMB = TRUE, + .TORMENT = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .SKILL_SWAP = TRUE, + .SNATCH = TRUE, + } }, + + [SPECIES_GENGAR] = { .learnset = { + .FOCUS_PUNCH = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .TAUNT = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .GIGA_DRAIN = TRUE, + .FRUSTRATION = TRUE, + .THUNDERBOLT = TRUE, + .THUNDER = TRUE, + .RETURN = TRUE, + .PSYCHIC = TRUE, + .SHADOW_BALL = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .SLUDGE_BOMB = TRUE, + .TORMENT = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .SKILL_SWAP = TRUE, + .SNATCH = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_ONIX] = { .learnset = { + .ROAR = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .TAUNT = TRUE, + .PROTECT = TRUE, + .FRUSTRATION = TRUE, + .IRON_TAIL = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .DOUBLE_TEAM = TRUE, + .SANDSTORM = TRUE, + .ROCK_TOMB = TRUE, + .TORMENT = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_DROWZEE] = { .learnset = { + .FOCUS_PUNCH = TRUE, + .CALM_MIND = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .TAUNT = TRUE, + .LIGHT_SCREEN = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .SAFEGUARD = TRUE, + .FRUSTRATION = TRUE, + .RETURN = TRUE, + .PSYCHIC = TRUE, + .SHADOW_BALL = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .REFLECT = TRUE, + .TORMENT = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .SKILL_SWAP = TRUE, + .SNATCH = TRUE, + .FLASH = TRUE, + } }, + + [SPECIES_HYPNO] = { .learnset = { + .FOCUS_PUNCH = TRUE, + .CALM_MIND = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .TAUNT = TRUE, + .HYPER_BEAM = TRUE, + .LIGHT_SCREEN = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .SAFEGUARD = TRUE, + .FRUSTRATION = TRUE, + .RETURN = TRUE, + .PSYCHIC = TRUE, + .SHADOW_BALL = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .REFLECT = TRUE, + .TORMENT = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .SKILL_SWAP = TRUE, + .SNATCH = TRUE, + .FLASH = TRUE, + } }, + + [SPECIES_KRABBY] = { .learnset = { + .WATER_PULSE = TRUE, + .TOXIC = TRUE, + .HAIL = TRUE, + .HIDDEN_POWER = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .DOUBLE_TEAM = TRUE, + .ROCK_TOMB = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .CUT = TRUE, + .SURF = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + .DIVE = TRUE, + } }, + + [SPECIES_KINGLER] = { .learnset = { + .WATER_PULSE = TRUE, + .TOXIC = TRUE, + .HAIL = TRUE, + .HIDDEN_POWER = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .DOUBLE_TEAM = TRUE, + .ROCK_TOMB = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .CUT = TRUE, + .SURF = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + .DIVE = TRUE, + } }, + + [SPECIES_VOLTORB] = { .learnset = { + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .TAUNT = TRUE, + .LIGHT_SCREEN = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .THUNDERBOLT = TRUE, + .THUNDER = TRUE, + .RETURN = TRUE, + .DOUBLE_TEAM = TRUE, + .SHOCK_WAVE = TRUE, + .TORMENT = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .THIEF = TRUE, + .FLASH = TRUE, + } }, + + [SPECIES_ELECTRODE] = { .learnset = { + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .TAUNT = TRUE, + .HYPER_BEAM = TRUE, + .LIGHT_SCREEN = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .THUNDERBOLT = TRUE, + .THUNDER = TRUE, + .RETURN = TRUE, + .DOUBLE_TEAM = TRUE, + .SHOCK_WAVE = TRUE, + .TORMENT = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .THIEF = TRUE, + .FLASH = TRUE, + } }, + + [SPECIES_EXEGGCUTE] = { .learnset = { + .TOXIC = TRUE, + .BULLET_SEED = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .LIGHT_SCREEN = TRUE, + .PROTECT = TRUE, + .GIGA_DRAIN = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .RETURN = TRUE, + .PSYCHIC = TRUE, + .DOUBLE_TEAM = TRUE, + .REFLECT = TRUE, + .SLUDGE_BOMB = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .SKILL_SWAP = TRUE, + .STRENGTH = TRUE, + .FLASH = TRUE, + } }, + + [SPECIES_EXEGGUTOR] = { .learnset = { + .TOXIC = TRUE, + .BULLET_SEED = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .HYPER_BEAM = TRUE, + .LIGHT_SCREEN = TRUE, + .PROTECT = TRUE, + .GIGA_DRAIN = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .RETURN = TRUE, + .PSYCHIC = TRUE, + .DOUBLE_TEAM = TRUE, + .REFLECT = TRUE, + .SLUDGE_BOMB = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .SKILL_SWAP = TRUE, + .STRENGTH = TRUE, + .FLASH = TRUE, + } }, + + [SPECIES_CUBONE] = { .learnset = { + .FOCUS_PUNCH = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .PROTECT = TRUE, + .FRUSTRATION = TRUE, + .IRON_TAIL = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .FLAMETHROWER = TRUE, + .SANDSTORM = TRUE, + .FIRE_BLAST = TRUE, + .ROCK_TOMB = TRUE, + .AERIAL_ACE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_MAROWAK] = { .learnset = { + .FOCUS_PUNCH = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .FRUSTRATION = TRUE, + .IRON_TAIL = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .FLAMETHROWER = TRUE, + .SANDSTORM = TRUE, + .FIRE_BLAST = TRUE, + .ROCK_TOMB = TRUE, + .AERIAL_ACE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_HITMONLEE] = { .learnset = { + .FOCUS_PUNCH = TRUE, + .TOXIC = TRUE, + .BULK_UP = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .ROCK_TOMB = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_HITMONCHAN] = { .learnset = { + .FOCUS_PUNCH = TRUE, + .TOXIC = TRUE, + .BULK_UP = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .ROCK_TOMB = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_LICKITUNG] = { .learnset = { + .FOCUS_PUNCH = TRUE, + .WATER_PULSE = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .IRON_TAIL = TRUE, + .THUNDERBOLT = TRUE, + .THUNDER = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .SHADOW_BALL = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .SHOCK_WAVE = TRUE, + .FLAMETHROWER = TRUE, + .SANDSTORM = TRUE, + .FIRE_BLAST = TRUE, + .ROCK_TOMB = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .CUT = TRUE, + .SURF = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_KOFFING] = { .learnset = { + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .TAUNT = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .THUNDERBOLT = TRUE, + .THUNDER = TRUE, + .RETURN = TRUE, + .SHADOW_BALL = TRUE, + .DOUBLE_TEAM = TRUE, + .SHOCK_WAVE = TRUE, + .FLAMETHROWER = TRUE, + .SLUDGE_BOMB = TRUE, + .FIRE_BLAST = TRUE, + .TORMENT = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .FLASH = TRUE, + } }, + + [SPECIES_WEEZING] = { .learnset = { + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .TAUNT = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .THUNDERBOLT = TRUE, + .THUNDER = TRUE, + .RETURN = TRUE, + .SHADOW_BALL = TRUE, + .DOUBLE_TEAM = TRUE, + .SHOCK_WAVE = TRUE, + .FLAMETHROWER = TRUE, + .SLUDGE_BOMB = TRUE, + .FIRE_BLAST = TRUE, + .TORMENT = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .FLASH = TRUE, + } }, + + [SPECIES_RHYHORN] = { .learnset = { + .ROAR = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .IRON_TAIL = TRUE, + .THUNDERBOLT = TRUE, + .THUNDER = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .DOUBLE_TEAM = TRUE, + .SHOCK_WAVE = TRUE, + .FLAMETHROWER = TRUE, + .SANDSTORM = TRUE, + .FIRE_BLAST = TRUE, + .ROCK_TOMB = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_RHYDON] = { .learnset = { + .FOCUS_PUNCH = TRUE, + .ROAR = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .IRON_TAIL = TRUE, + .THUNDERBOLT = TRUE, + .THUNDER = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .SHOCK_WAVE = TRUE, + .FLAMETHROWER = TRUE, + .SANDSTORM = TRUE, + .FIRE_BLAST = TRUE, + .ROCK_TOMB = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .CUT = TRUE, + .SURF = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_CHANSEY] = { .learnset = { + .FOCUS_PUNCH = TRUE, + .WATER_PULSE = TRUE, + .CALM_MIND = TRUE, + .TOXIC = TRUE, + .HAIL = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .HYPER_BEAM = TRUE, + .LIGHT_SCREEN = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .SAFEGUARD = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .IRON_TAIL = TRUE, + .THUNDERBOLT = TRUE, + .THUNDER = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .PSYCHIC = TRUE, + .SHADOW_BALL = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .SHOCK_WAVE = TRUE, + .FLAMETHROWER = TRUE, + .SANDSTORM = TRUE, + .FIRE_BLAST = TRUE, + .ROCK_TOMB = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .SKILL_SWAP = TRUE, + .SNATCH = TRUE, + .STRENGTH = TRUE, + .FLASH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_TANGELA] = { .learnset = { + .TOXIC = TRUE, + .BULLET_SEED = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .GIGA_DRAIN = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .RETURN = TRUE, + .DOUBLE_TEAM = TRUE, + .SLUDGE_BOMB = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .CUT = TRUE, + .FLASH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_KANGASKHAN] = { .learnset = { + .FOCUS_PUNCH = TRUE, + .WATER_PULSE = TRUE, + .ROAR = TRUE, + .TOXIC = TRUE, + .HAIL = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .IRON_TAIL = TRUE, + .THUNDERBOLT = TRUE, + .THUNDER = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .SHADOW_BALL = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .SHOCK_WAVE = TRUE, + .FLAMETHROWER = TRUE, + .SANDSTORM = TRUE, + .FIRE_BLAST = TRUE, + .ROCK_TOMB = TRUE, + .AERIAL_ACE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .CUT = TRUE, + .SURF = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_HORSEA] = { .learnset = { + .WATER_PULSE = TRUE, + .TOXIC = TRUE, + .HAIL = TRUE, + .HIDDEN_POWER = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .RETURN = TRUE, + .DOUBLE_TEAM = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .SURF = TRUE, + .WATERFALL = TRUE, + .DIVE = TRUE, + } }, + + [SPECIES_SEADRA] = { .learnset = { + .WATER_PULSE = TRUE, + .TOXIC = TRUE, + .HAIL = TRUE, + .HIDDEN_POWER = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .RETURN = TRUE, + .DOUBLE_TEAM = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .SURF = TRUE, + .WATERFALL = TRUE, + .DIVE = TRUE, + } }, + + [SPECIES_GOLDEEN] = { .learnset = { + .WATER_PULSE = TRUE, + .TOXIC = TRUE, + .HAIL = TRUE, + .HIDDEN_POWER = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .RETURN = TRUE, + .DOUBLE_TEAM = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .SURF = TRUE, + .WATERFALL = TRUE, + .DIVE = TRUE, + } }, + + [SPECIES_SEAKING] = { .learnset = { + .WATER_PULSE = TRUE, + .TOXIC = TRUE, + .HAIL = TRUE, + .HIDDEN_POWER = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .RETURN = TRUE, + .DOUBLE_TEAM = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .SURF = TRUE, + .WATERFALL = TRUE, + .DIVE = TRUE, + } }, + + [SPECIES_STARYU] = { .learnset = { + .WATER_PULSE = TRUE, + .TOXIC = TRUE, + .HAIL = TRUE, + .HIDDEN_POWER = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .LIGHT_SCREEN = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .THUNDERBOLT = TRUE, + .THUNDER = TRUE, + .RETURN = TRUE, + .PSYCHIC = TRUE, + .DOUBLE_TEAM = TRUE, + .REFLECT = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .SURF = TRUE, + .FLASH = TRUE, + .WATERFALL = TRUE, + .DIVE = TRUE, + } }, + + [SPECIES_STARMIE] = { .learnset = { + .WATER_PULSE = TRUE, + .TOXIC = TRUE, + .HAIL = TRUE, + .HIDDEN_POWER = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .HYPER_BEAM = TRUE, + .LIGHT_SCREEN = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .THUNDERBOLT = TRUE, + .THUNDER = TRUE, + .RETURN = TRUE, + .PSYCHIC = TRUE, + .DOUBLE_TEAM = TRUE, + .REFLECT = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .SKILL_SWAP = TRUE, + .SURF = TRUE, + .FLASH = TRUE, + .WATERFALL = TRUE, + .DIVE = TRUE, + } }, + + [SPECIES_MR_MIME] = { .learnset = { + .FOCUS_PUNCH = TRUE, + .CALM_MIND = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .TAUNT = TRUE, + .HYPER_BEAM = TRUE, + .LIGHT_SCREEN = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .SAFEGUARD = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .THUNDERBOLT = TRUE, + .THUNDER = TRUE, + .RETURN = TRUE, + .PSYCHIC = TRUE, + .SHADOW_BALL = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .REFLECT = TRUE, + .SHOCK_WAVE = TRUE, + .TORMENT = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .SKILL_SWAP = TRUE, + .SNATCH = TRUE, + .FLASH = TRUE, + } }, + + [SPECIES_SCYTHER] = { .learnset = { + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .RETURN = TRUE, + .DOUBLE_TEAM = TRUE, + .AERIAL_ACE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .STEEL_WING = TRUE, + .CUT = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_JYNX] = { .learnset = { + .FOCUS_PUNCH = TRUE, + .WATER_PULSE = TRUE, + .CALM_MIND = TRUE, + .TOXIC = TRUE, + .HAIL = TRUE, + .HIDDEN_POWER = TRUE, + .TAUNT = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .HYPER_BEAM = TRUE, + .LIGHT_SCREEN = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .RETURN = TRUE, + .PSYCHIC = TRUE, + .SHADOW_BALL = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .REFLECT = TRUE, + .TORMENT = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .SKILL_SWAP = TRUE, + .FLASH = TRUE, + } }, + + [SPECIES_ELECTABUZZ] = { .learnset = { + .FOCUS_PUNCH = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .HYPER_BEAM = TRUE, + .LIGHT_SCREEN = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .IRON_TAIL = TRUE, + .THUNDERBOLT = TRUE, + .THUNDER = TRUE, + .RETURN = TRUE, + .PSYCHIC = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .SHOCK_WAVE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .STRENGTH = TRUE, + .FLASH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_MAGMAR] = { .learnset = { + .FOCUS_PUNCH = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .FRUSTRATION = TRUE, + .IRON_TAIL = TRUE, + .RETURN = TRUE, + .PSYCHIC = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .FLAMETHROWER = TRUE, + .FIRE_BLAST = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_PINSIR] = { .learnset = { + .FOCUS_PUNCH = TRUE, + .TOXIC = TRUE, + .BULK_UP = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .ROCK_TOMB = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .CUT = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_TAUROS] = { .learnset = { + .WATER_PULSE = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .IRON_TAIL = TRUE, + .THUNDERBOLT = TRUE, + .THUNDER = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .DOUBLE_TEAM = TRUE, + .SHOCK_WAVE = TRUE, + .FLAMETHROWER = TRUE, + .SANDSTORM = TRUE, + .FIRE_BLAST = TRUE, + .ROCK_TOMB = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .SURF = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_MAGIKARP] = { .learnset = { + } }, + + [SPECIES_GYARADOS] = { .learnset = { + .WATER_PULSE = TRUE, + .ROAR = TRUE, + .TOXIC = TRUE, + .HAIL = TRUE, + .HIDDEN_POWER = TRUE, + .TAUNT = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .THUNDERBOLT = TRUE, + .THUNDER = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .DOUBLE_TEAM = TRUE, + .FLAMETHROWER = TRUE, + .SANDSTORM = TRUE, + .FIRE_BLAST = TRUE, + .TORMENT = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .SURF = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + .WATERFALL = TRUE, + .DIVE = TRUE, + } }, + + [SPECIES_LAPRAS] = { .learnset = { + .WATER_PULSE = TRUE, + .ROAR = TRUE, + .TOXIC = TRUE, + .HAIL = TRUE, + .HIDDEN_POWER = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .SAFEGUARD = TRUE, + .FRUSTRATION = TRUE, + .IRON_TAIL = TRUE, + .THUNDERBOLT = TRUE, + .THUNDER = TRUE, + .RETURN = TRUE, + .PSYCHIC = TRUE, + .DOUBLE_TEAM = TRUE, + .SHOCK_WAVE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .SURF = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + .WATERFALL = TRUE, + .DIVE = TRUE, + } }, + + [SPECIES_DITTO] = { .learnset = { + } }, + + [SPECIES_EEVEE] = { .learnset = { + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .IRON_TAIL = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .SHADOW_BALL = TRUE, + .DOUBLE_TEAM = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + } }, + + [SPECIES_VAPOREON] = { .learnset = { + .WATER_PULSE = TRUE, + .ROAR = TRUE, + .TOXIC = TRUE, + .HAIL = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .IRON_TAIL = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .SHADOW_BALL = TRUE, + .DOUBLE_TEAM = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .SURF = TRUE, + .WATERFALL = TRUE, + .DIVE = TRUE, + } }, + + [SPECIES_JOLTEON] = { .learnset = { + .ROAR = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .IRON_TAIL = TRUE, + .THUNDERBOLT = TRUE, + .THUNDER = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .SHADOW_BALL = TRUE, + .DOUBLE_TEAM = TRUE, + .SHOCK_WAVE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .FLASH = TRUE, + } }, + + [SPECIES_FLAREON] = { .learnset = { + .ROAR = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .IRON_TAIL = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .SHADOW_BALL = TRUE, + .DOUBLE_TEAM = TRUE, + .FLAMETHROWER = TRUE, + .FIRE_BLAST = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .OVERHEAT = TRUE, + } }, + + [SPECIES_PORYGON] = { .learnset = { + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .IRON_TAIL = TRUE, + .THUNDERBOLT = TRUE, + .THUNDER = TRUE, + .RETURN = TRUE, + .PSYCHIC = TRUE, + .SHADOW_BALL = TRUE, + .DOUBLE_TEAM = TRUE, + .SHOCK_WAVE = TRUE, + .AERIAL_ACE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .THIEF = TRUE, + .FLASH = TRUE, + } }, + + [SPECIES_OMANYTE] = { .learnset = { + .WATER_PULSE = TRUE, + .TOXIC = TRUE, + .HAIL = TRUE, + .HIDDEN_POWER = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .RETURN = TRUE, + .DOUBLE_TEAM = TRUE, + .SANDSTORM = TRUE, + .ROCK_TOMB = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .SURF = TRUE, + .ROCK_SMASH = TRUE, + .WATERFALL = TRUE, + .DIVE = TRUE, + } }, + + [SPECIES_OMASTAR] = { .learnset = { + .WATER_PULSE = TRUE, + .TOXIC = TRUE, + .HAIL = TRUE, + .HIDDEN_POWER = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .RETURN = TRUE, + .DOUBLE_TEAM = TRUE, + .SANDSTORM = TRUE, + .ROCK_TOMB = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .SURF = TRUE, + .ROCK_SMASH = TRUE, + .WATERFALL = TRUE, + .DIVE = TRUE, + } }, + + [SPECIES_KABUTO] = { .learnset = { + .WATER_PULSE = TRUE, + .TOXIC = TRUE, + .HAIL = TRUE, + .HIDDEN_POWER = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .GIGA_DRAIN = TRUE, + .FRUSTRATION = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .DOUBLE_TEAM = TRUE, + .SANDSTORM = TRUE, + .ROCK_TOMB = TRUE, + .AERIAL_ACE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .SURF = TRUE, + .ROCK_SMASH = TRUE, + .WATERFALL = TRUE, + } }, + + [SPECIES_KABUTOPS] = { .learnset = { + .WATER_PULSE = TRUE, + .TOXIC = TRUE, + .HAIL = TRUE, + .HIDDEN_POWER = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .GIGA_DRAIN = TRUE, + .FRUSTRATION = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .SANDSTORM = TRUE, + .ROCK_TOMB = TRUE, + .AERIAL_ACE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .CUT = TRUE, + .SURF = TRUE, + .ROCK_SMASH = TRUE, + .WATERFALL = TRUE, + .DIVE = TRUE, + } }, + + [SPECIES_AERODACTYL] = { .learnset = { + .DRAGON_CLAW = TRUE, + .ROAR = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .TAUNT = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .IRON_TAIL = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .DOUBLE_TEAM = TRUE, + .FLAMETHROWER = TRUE, + .SANDSTORM = TRUE, + .FIRE_BLAST = TRUE, + .ROCK_TOMB = TRUE, + .AERIAL_ACE = TRUE, + .TORMENT = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .STEEL_WING = TRUE, + .FLY = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_SNORLAX] = { .learnset = { + .FOCUS_PUNCH = TRUE, + .WATER_PULSE = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .THUNDERBOLT = TRUE, + .THUNDER = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .PSYCHIC = TRUE, + .SHADOW_BALL = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .SHOCK_WAVE = TRUE, + .FLAMETHROWER = TRUE, + .SANDSTORM = TRUE, + .FIRE_BLAST = TRUE, + .ROCK_TOMB = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .SURF = TRUE, + .STRENGTH = TRUE, + } }, + + [SPECIES_ARTICUNO] = { .learnset = { + .WATER_PULSE = TRUE, + .ROAR = TRUE, + .TOXIC = TRUE, + .HAIL = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .RETURN = TRUE, + .DOUBLE_TEAM = TRUE, + .REFLECT = TRUE, + .SANDSTORM = TRUE, + .AERIAL_ACE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .STEEL_WING = TRUE, + .FLY = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_ZAPDOS] = { .learnset = { + .ROAR = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .HYPER_BEAM = TRUE, + .LIGHT_SCREEN = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .THUNDERBOLT = TRUE, + .THUNDER = TRUE, + .RETURN = TRUE, + .DOUBLE_TEAM = TRUE, + .SHOCK_WAVE = TRUE, + .SANDSTORM = TRUE, + .AERIAL_ACE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .STEEL_WING = TRUE, + .FLY = TRUE, + .FLASH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_MOLTRES] = { .learnset = { + .ROAR = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .SAFEGUARD = TRUE, + .FRUSTRATION = TRUE, + .RETURN = TRUE, + .DOUBLE_TEAM = TRUE, + .FLAMETHROWER = TRUE, + .SANDSTORM = TRUE, + .FIRE_BLAST = TRUE, + .AERIAL_ACE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .STEEL_WING = TRUE, + .OVERHEAT = TRUE, + .FLY = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_DRATINI] = { .learnset = { + .WATER_PULSE = TRUE, + .TOXIC = TRUE, + .HAIL = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .SAFEGUARD = TRUE, + .FRUSTRATION = TRUE, + .IRON_TAIL = TRUE, + .THUNDERBOLT = TRUE, + .THUNDER = TRUE, + .RETURN = TRUE, + .DOUBLE_TEAM = TRUE, + .SHOCK_WAVE = TRUE, + .FLAMETHROWER = TRUE, + .FIRE_BLAST = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .SURF = TRUE, + .WATERFALL = TRUE, + } }, + + [SPECIES_DRAGONAIR] = { .learnset = { + .WATER_PULSE = TRUE, + .TOXIC = TRUE, + .HAIL = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .SAFEGUARD = TRUE, + .FRUSTRATION = TRUE, + .IRON_TAIL = TRUE, + .THUNDERBOLT = TRUE, + .THUNDER = TRUE, + .RETURN = TRUE, + .DOUBLE_TEAM = TRUE, + .SHOCK_WAVE = TRUE, + .FLAMETHROWER = TRUE, + .FIRE_BLAST = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .SURF = TRUE, + .WATERFALL = TRUE, + } }, + + [SPECIES_DRAGONITE] = { .learnset = { + .FOCUS_PUNCH = TRUE, + .DRAGON_CLAW = TRUE, + .WATER_PULSE = TRUE, + .ROAR = TRUE, + .TOXIC = TRUE, + .HAIL = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .SAFEGUARD = TRUE, + .FRUSTRATION = TRUE, + .IRON_TAIL = TRUE, + .THUNDERBOLT = TRUE, + .THUNDER = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .SHOCK_WAVE = TRUE, + .FLAMETHROWER = TRUE, + .SANDSTORM = TRUE, + .FIRE_BLAST = TRUE, + .ROCK_TOMB = TRUE, + .AERIAL_ACE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .STEEL_WING = TRUE, + .CUT = TRUE, + .FLY = TRUE, + .SURF = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + .WATERFALL = TRUE, + .DIVE = TRUE, + } }, + + [SPECIES_MEWTWO] = { .learnset = { + .FOCUS_PUNCH = TRUE, + .WATER_PULSE = TRUE, + .CALM_MIND = TRUE, + .TOXIC = TRUE, + .HAIL = TRUE, + .BULK_UP = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .TAUNT = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .HYPER_BEAM = TRUE, + .LIGHT_SCREEN = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .SAFEGUARD = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .IRON_TAIL = TRUE, + .THUNDERBOLT = TRUE, + .THUNDER = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .PSYCHIC = TRUE, + .SHADOW_BALL = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .REFLECT = TRUE, + .SHOCK_WAVE = TRUE, + .FLAMETHROWER = TRUE, + .SANDSTORM = TRUE, + .FIRE_BLAST = TRUE, + .ROCK_TOMB = TRUE, + .AERIAL_ACE = TRUE, + .TORMENT = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .SKILL_SWAP = TRUE, + .SNATCH = TRUE, + .STRENGTH = TRUE, + .FLASH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_MEW] = { .learnset = { + .FOCUS_PUNCH = TRUE, + .DRAGON_CLAW = TRUE, + .WATER_PULSE = TRUE, + .CALM_MIND = TRUE, + .ROAR = TRUE, + .TOXIC = TRUE, + .HAIL = TRUE, + .BULK_UP = TRUE, + .BULLET_SEED = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .TAUNT = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .HYPER_BEAM = TRUE, + .LIGHT_SCREEN = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .GIGA_DRAIN = TRUE, + .SAFEGUARD = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .IRON_TAIL = TRUE, + .THUNDERBOLT = TRUE, + .THUNDER = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .PSYCHIC = TRUE, + .SHADOW_BALL = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .REFLECT = TRUE, + .SHOCK_WAVE = TRUE, + .FLAMETHROWER = TRUE, + .SLUDGE_BOMB = TRUE, + .SANDSTORM = TRUE, + .FIRE_BLAST = TRUE, + .ROCK_TOMB = TRUE, + .AERIAL_ACE = TRUE, + .TORMENT = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .STEEL_WING = TRUE, + .SKILL_SWAP = TRUE, + .SNATCH = TRUE, + .OVERHEAT = TRUE, + .CUT = TRUE, + .FLY = TRUE, + .SURF = TRUE, + .STRENGTH = TRUE, + .FLASH = TRUE, + .ROCK_SMASH = TRUE, + .WATERFALL = TRUE, + .DIVE = TRUE, + } }, + + [SPECIES_CHIKORITA] = { .learnset = { + .TOXIC = TRUE, + .BULLET_SEED = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .LIGHT_SCREEN = TRUE, + .PROTECT = TRUE, + .GIGA_DRAIN = TRUE, + .SAFEGUARD = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .IRON_TAIL = TRUE, + .RETURN = TRUE, + .DOUBLE_TEAM = TRUE, + .REFLECT = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .CUT = TRUE, + .FLASH = TRUE, + } }, + + [SPECIES_BAYLEEF] = { .learnset = { + .TOXIC = TRUE, + .BULLET_SEED = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .LIGHT_SCREEN = TRUE, + .PROTECT = TRUE, + .GIGA_DRAIN = TRUE, + .SAFEGUARD = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .IRON_TAIL = TRUE, + .RETURN = TRUE, + .DOUBLE_TEAM = TRUE, + .REFLECT = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .CUT = TRUE, + .STRENGTH = TRUE, + .FLASH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_MEGANIUM] = { .learnset = { + .TOXIC = TRUE, + .BULLET_SEED = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .HYPER_BEAM = TRUE, + .LIGHT_SCREEN = TRUE, + .PROTECT = TRUE, + .GIGA_DRAIN = TRUE, + .SAFEGUARD = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .IRON_TAIL = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .DOUBLE_TEAM = TRUE, + .REFLECT = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .CUT = TRUE, + .STRENGTH = TRUE, + .FLASH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_CYNDAQUIL] = { .learnset = { + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .PROTECT = TRUE, + .FRUSTRATION = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .DOUBLE_TEAM = TRUE, + .FLAMETHROWER = TRUE, + .FIRE_BLAST = TRUE, + .AERIAL_ACE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .OVERHEAT = TRUE, + .CUT = TRUE, + } }, + + [SPECIES_QUILAVA] = { .learnset = { + .FOCUS_PUNCH = TRUE, + .ROAR = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .PROTECT = TRUE, + .FRUSTRATION = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .FLAMETHROWER = TRUE, + .FIRE_BLAST = TRUE, + .AERIAL_ACE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .OVERHEAT = TRUE, + .CUT = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_TYPHLOSION] = { .learnset = { + .FOCUS_PUNCH = TRUE, + .ROAR = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .FRUSTRATION = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .FLAMETHROWER = TRUE, + .FIRE_BLAST = TRUE, + .AERIAL_ACE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .OVERHEAT = TRUE, + .CUT = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_TOTODILE] = { .learnset = { + .FOCUS_PUNCH = TRUE, + .WATER_PULSE = TRUE, + .TOXIC = TRUE, + .HAIL = TRUE, + .HIDDEN_POWER = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .IRON_TAIL = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .AERIAL_ACE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .CUT = TRUE, + .SURF = TRUE, + .WATERFALL = TRUE, + .DIVE = TRUE, + } }, + + [SPECIES_CROCONAW] = { .learnset = { + .FOCUS_PUNCH = TRUE, + .WATER_PULSE = TRUE, + .ROAR = TRUE, + .TOXIC = TRUE, + .HAIL = TRUE, + .HIDDEN_POWER = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .IRON_TAIL = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .AERIAL_ACE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .CUT = TRUE, + .SURF = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + .WATERFALL = TRUE, + .DIVE = TRUE, + } }, + + [SPECIES_FERALIGATR] = { .learnset = { + .FOCUS_PUNCH = TRUE, + .DRAGON_CLAW = TRUE, + .WATER_PULSE = TRUE, + .ROAR = TRUE, + .TOXIC = TRUE, + .HAIL = TRUE, + .HIDDEN_POWER = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .IRON_TAIL = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .AERIAL_ACE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .CUT = TRUE, + .SURF = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + .WATERFALL = TRUE, + .DIVE = TRUE, + } }, + + [SPECIES_SENTRET] = { .learnset = { + .FOCUS_PUNCH = TRUE, + .WATER_PULSE = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .ICE_BEAM = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .IRON_TAIL = TRUE, + .THUNDERBOLT = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .SHADOW_BALL = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .SHOCK_WAVE = TRUE, + .FLAMETHROWER = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .CUT = TRUE, + .SURF = TRUE, + } }, + + [SPECIES_FURRET] = { .learnset = { + .FOCUS_PUNCH = TRUE, + .WATER_PULSE = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .IRON_TAIL = TRUE, + .THUNDERBOLT = TRUE, + .THUNDER = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .SHADOW_BALL = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .SHOCK_WAVE = TRUE, + .FLAMETHROWER = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .CUT = TRUE, + .SURF = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_HOOTHOOT] = { .learnset = { + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .RETURN = TRUE, + .PSYCHIC = TRUE, + .SHADOW_BALL = TRUE, + .DOUBLE_TEAM = TRUE, + .REFLECT = TRUE, + .AERIAL_ACE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .STEEL_WING = TRUE, + .FLY = TRUE, + .FLASH = TRUE, + } }, + + [SPECIES_NOCTOWL] = { .learnset = { + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .RETURN = TRUE, + .PSYCHIC = TRUE, + .SHADOW_BALL = TRUE, + .DOUBLE_TEAM = TRUE, + .REFLECT = TRUE, + .AERIAL_ACE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .STEEL_WING = TRUE, + .FLY = TRUE, + .FLASH = TRUE, + } }, + + [SPECIES_LEDYBA] = { .learnset = { + .FOCUS_PUNCH = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .LIGHT_SCREEN = TRUE, + .PROTECT = TRUE, + .GIGA_DRAIN = TRUE, + .SAFEGUARD = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .REFLECT = TRUE, + .AERIAL_ACE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .FLASH = TRUE, + } }, + + [SPECIES_LEDIAN] = { .learnset = { + .FOCUS_PUNCH = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .HYPER_BEAM = TRUE, + .LIGHT_SCREEN = TRUE, + .PROTECT = TRUE, + .GIGA_DRAIN = TRUE, + .SAFEGUARD = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .REFLECT = TRUE, + .AERIAL_ACE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .FLASH = TRUE, + } }, + + [SPECIES_SPINARAK] = { .learnset = { + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .PROTECT = TRUE, + .GIGA_DRAIN = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .PSYCHIC = TRUE, + .DOUBLE_TEAM = TRUE, + .SLUDGE_BOMB = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .FLASH = TRUE, + } }, + + [SPECIES_ARIADOS] = { .learnset = { + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .GIGA_DRAIN = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .PSYCHIC = TRUE, + .DOUBLE_TEAM = TRUE, + .SLUDGE_BOMB = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .FLASH = TRUE, + } }, + + [SPECIES_CROBAT] = { .learnset = { + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .TAUNT = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .GIGA_DRAIN = TRUE, + .FRUSTRATION = TRUE, + .RETURN = TRUE, + .SHADOW_BALL = TRUE, + .DOUBLE_TEAM = TRUE, + .SLUDGE_BOMB = TRUE, + .AERIAL_ACE = TRUE, + .TORMENT = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .STEEL_WING = TRUE, + .SNATCH = TRUE, + .FLY = TRUE, + } }, + + [SPECIES_CHINCHOU] = { .learnset = { + .WATER_PULSE = TRUE, + .TOXIC = TRUE, + .HAIL = TRUE, + .HIDDEN_POWER = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .THUNDERBOLT = TRUE, + .THUNDER = TRUE, + .RETURN = TRUE, + .DOUBLE_TEAM = TRUE, + .SHOCK_WAVE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .SURF = TRUE, + .FLASH = TRUE, + .WATERFALL = TRUE, + .DIVE = TRUE, + } }, + + [SPECIES_LANTURN] = { .learnset = { + .WATER_PULSE = TRUE, + .TOXIC = TRUE, + .HAIL = TRUE, + .HIDDEN_POWER = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .THUNDERBOLT = TRUE, + .THUNDER = TRUE, + .RETURN = TRUE, + .DOUBLE_TEAM = TRUE, + .SHOCK_WAVE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .SURF = TRUE, + .FLASH = TRUE, + .WATERFALL = TRUE, + .DIVE = TRUE, + } }, + + [SPECIES_PICHU] = { .learnset = { + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .LIGHT_SCREEN = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .IRON_TAIL = TRUE, + .THUNDERBOLT = TRUE, + .THUNDER = TRUE, + .RETURN = TRUE, + .DOUBLE_TEAM = TRUE, + .SHOCK_WAVE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .FLASH = TRUE, + } }, + + [SPECIES_CLEFFA] = { .learnset = { + .WATER_PULSE = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .LIGHT_SCREEN = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .SAFEGUARD = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .IRON_TAIL = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .PSYCHIC = TRUE, + .SHADOW_BALL = TRUE, + .DOUBLE_TEAM = TRUE, + .REFLECT = TRUE, + .SHOCK_WAVE = TRUE, + .FLAMETHROWER = TRUE, + .FIRE_BLAST = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .FLASH = TRUE, + } }, + + [SPECIES_IGGLYBUFF] = { .learnset = { + .WATER_PULSE = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .LIGHT_SCREEN = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .SAFEGUARD = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .PSYCHIC = TRUE, + .SHADOW_BALL = TRUE, + .DOUBLE_TEAM = TRUE, + .REFLECT = TRUE, + .SHOCK_WAVE = TRUE, + .FLAMETHROWER = TRUE, + .FIRE_BLAST = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .FLASH = TRUE, + } }, + + [SPECIES_TOGEPI] = { .learnset = { + .WATER_PULSE = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .LIGHT_SCREEN = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .SAFEGUARD = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .RETURN = TRUE, + .PSYCHIC = TRUE, + .SHADOW_BALL = TRUE, + .DOUBLE_TEAM = TRUE, + .REFLECT = TRUE, + .SHOCK_WAVE = TRUE, + .FLAMETHROWER = TRUE, + .FIRE_BLAST = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .FLASH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_TOGETIC] = { .learnset = { + .FOCUS_PUNCH = TRUE, + .WATER_PULSE = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .HYPER_BEAM = TRUE, + .LIGHT_SCREEN = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .SAFEGUARD = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .RETURN = TRUE, + .PSYCHIC = TRUE, + .SHADOW_BALL = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .REFLECT = TRUE, + .SHOCK_WAVE = TRUE, + .FLAMETHROWER = TRUE, + .FIRE_BLAST = TRUE, + .AERIAL_ACE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .STEEL_WING = TRUE, + .FLY = TRUE, + .FLASH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_NATU] = { .learnset = { + .CALM_MIND = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .LIGHT_SCREEN = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .GIGA_DRAIN = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .RETURN = TRUE, + .PSYCHIC = TRUE, + .SHADOW_BALL = TRUE, + .DOUBLE_TEAM = TRUE, + .REFLECT = TRUE, + .AERIAL_ACE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .STEEL_WING = TRUE, + .SKILL_SWAP = TRUE, + .FLASH = TRUE, + } }, + + [SPECIES_XATU] = { .learnset = { + .CALM_MIND = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .HYPER_BEAM = TRUE, + .LIGHT_SCREEN = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .GIGA_DRAIN = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .RETURN = TRUE, + .PSYCHIC = TRUE, + .SHADOW_BALL = TRUE, + .DOUBLE_TEAM = TRUE, + .REFLECT = TRUE, + .AERIAL_ACE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .STEEL_WING = TRUE, + .SKILL_SWAP = TRUE, + .FLY = TRUE, + .FLASH = TRUE, + } }, + + [SPECIES_MAREEP] = { .learnset = { + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .LIGHT_SCREEN = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .IRON_TAIL = TRUE, + .THUNDERBOLT = TRUE, + .THUNDER = TRUE, + .RETURN = TRUE, + .DOUBLE_TEAM = TRUE, + .SHOCK_WAVE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .FLASH = TRUE, + } }, + + [SPECIES_FLAAFFY] = { .learnset = { + .FOCUS_PUNCH = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .LIGHT_SCREEN = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .IRON_TAIL = TRUE, + .THUNDERBOLT = TRUE, + .THUNDER = TRUE, + .RETURN = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .SHOCK_WAVE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .STRENGTH = TRUE, + .FLASH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_AMPHAROS] = { .learnset = { + .FOCUS_PUNCH = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .HYPER_BEAM = TRUE, + .LIGHT_SCREEN = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .IRON_TAIL = TRUE, + .THUNDERBOLT = TRUE, + .THUNDER = TRUE, + .RETURN = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .SHOCK_WAVE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .STRENGTH = TRUE, + .FLASH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_BELLOSSOM] = { .learnset = { + .TOXIC = TRUE, + .BULLET_SEED = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .GIGA_DRAIN = TRUE, + .SAFEGUARD = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .RETURN = TRUE, + .DOUBLE_TEAM = TRUE, + .SLUDGE_BOMB = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .CUT = TRUE, + .FLASH = TRUE, + } }, + + [SPECIES_MARILL] = { .learnset = { + .FOCUS_PUNCH = TRUE, + .WATER_PULSE = TRUE, + .TOXIC = TRUE, + .HAIL = TRUE, + .HIDDEN_POWER = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .IRON_TAIL = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .SURF = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + .WATERFALL = TRUE, + .DIVE = TRUE, + } }, + + [SPECIES_AZUMARILL] = { .learnset = { + .FOCUS_PUNCH = TRUE, + .WATER_PULSE = TRUE, + .TOXIC = TRUE, + .HAIL = TRUE, + .HIDDEN_POWER = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .IRON_TAIL = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .SURF = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + .WATERFALL = TRUE, + .DIVE = TRUE, + } }, + + [SPECIES_SUDOWOODO] = { .learnset = { + .FOCUS_PUNCH = TRUE, + .CALM_MIND = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .TAUNT = TRUE, + .PROTECT = TRUE, + .FRUSTRATION = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .SANDSTORM = TRUE, + .ROCK_TOMB = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_POLITOED] = { .learnset = { + .FOCUS_PUNCH = TRUE, + .WATER_PULSE = TRUE, + .TOXIC = TRUE, + .HAIL = TRUE, + .HIDDEN_POWER = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .PSYCHIC = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .SURF = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + .WATERFALL = TRUE, + .DIVE = TRUE, + } }, + + [SPECIES_HOPPIP] = { .learnset = { + .TOXIC = TRUE, + .BULLET_SEED = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .PROTECT = TRUE, + .GIGA_DRAIN = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .RETURN = TRUE, + .DOUBLE_TEAM = TRUE, + .AERIAL_ACE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .FLASH = TRUE, + } }, + + [SPECIES_SKIPLOOM] = { .learnset = { + .TOXIC = TRUE, + .BULLET_SEED = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .PROTECT = TRUE, + .GIGA_DRAIN = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .RETURN = TRUE, + .DOUBLE_TEAM = TRUE, + .AERIAL_ACE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .FLASH = TRUE, + } }, + + [SPECIES_JUMPLUFF] = { .learnset = { + .TOXIC = TRUE, + .BULLET_SEED = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .GIGA_DRAIN = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .RETURN = TRUE, + .DOUBLE_TEAM = TRUE, + .AERIAL_ACE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .FLASH = TRUE, + } }, + + [SPECIES_AIPOM] = { .learnset = { + .FOCUS_PUNCH = TRUE, + .WATER_PULSE = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .TAUNT = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .IRON_TAIL = TRUE, + .THUNDERBOLT = TRUE, + .THUNDER = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .SHADOW_BALL = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .SHOCK_WAVE = TRUE, + .AERIAL_ACE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .SNATCH = TRUE, + .CUT = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_SUNKERN] = { .learnset = { + .TOXIC = TRUE, + .BULLET_SEED = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .LIGHT_SCREEN = TRUE, + .PROTECT = TRUE, + .GIGA_DRAIN = TRUE, + .SAFEGUARD = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .RETURN = TRUE, + .DOUBLE_TEAM = TRUE, + .SLUDGE_BOMB = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .CUT = TRUE, + .FLASH = TRUE, + } }, + + [SPECIES_SUNFLORA] = { .learnset = { + .TOXIC = TRUE, + .BULLET_SEED = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .HYPER_BEAM = TRUE, + .LIGHT_SCREEN = TRUE, + .PROTECT = TRUE, + .GIGA_DRAIN = TRUE, + .SAFEGUARD = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .RETURN = TRUE, + .DOUBLE_TEAM = TRUE, + .SLUDGE_BOMB = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .CUT = TRUE, + .FLASH = TRUE, + } }, + + [SPECIES_YANMA] = { .learnset = { + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .PROTECT = TRUE, + .GIGA_DRAIN = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .RETURN = TRUE, + .PSYCHIC = TRUE, + .SHADOW_BALL = TRUE, + .DOUBLE_TEAM = TRUE, + .AERIAL_ACE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .STEEL_WING = TRUE, + .FLASH = TRUE, + } }, + + [SPECIES_WOOPER] = { .learnset = { + .WATER_PULSE = TRUE, + .TOXIC = TRUE, + .HAIL = TRUE, + .HIDDEN_POWER = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .IRON_TAIL = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .DOUBLE_TEAM = TRUE, + .SLUDGE_BOMB = TRUE, + .SANDSTORM = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .SURF = TRUE, + .FLASH = TRUE, + .ROCK_SMASH = TRUE, + .WATERFALL = TRUE, + .DIVE = TRUE, + } }, + + [SPECIES_QUAGSIRE] = { .learnset = { + .FOCUS_PUNCH = TRUE, + .WATER_PULSE = TRUE, + .TOXIC = TRUE, + .HAIL = TRUE, + .HIDDEN_POWER = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .IRON_TAIL = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .SLUDGE_BOMB = TRUE, + .SANDSTORM = TRUE, + .ROCK_TOMB = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .SURF = TRUE, + .STRENGTH = TRUE, + .FLASH = TRUE, + .ROCK_SMASH = TRUE, + .WATERFALL = TRUE, + .DIVE = TRUE, + } }, + + [SPECIES_ESPEON] = { .learnset = { + .CALM_MIND = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .HYPER_BEAM = TRUE, + .LIGHT_SCREEN = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .IRON_TAIL = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .PSYCHIC = TRUE, + .SHADOW_BALL = TRUE, + .DOUBLE_TEAM = TRUE, + .REFLECT = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .SKILL_SWAP = TRUE, + .CUT = TRUE, + .FLASH = TRUE, + } }, + + [SPECIES_UMBREON] = { .learnset = { + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .TAUNT = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .IRON_TAIL = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .PSYCHIC = TRUE, + .SHADOW_BALL = TRUE, + .DOUBLE_TEAM = TRUE, + .TORMENT = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .SNATCH = TRUE, + .CUT = TRUE, + .FLASH = TRUE, + } }, + + [SPECIES_MURKROW] = { .learnset = { + .CALM_MIND = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .TAUNT = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .RETURN = TRUE, + .SHADOW_BALL = TRUE, + .DOUBLE_TEAM = TRUE, + .AERIAL_ACE = TRUE, + .TORMENT = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .STEEL_WING = TRUE, + .SNATCH = TRUE, + .FLY = TRUE, + } }, + + [SPECIES_SLOWKING] = { .learnset = { + .FOCUS_PUNCH = TRUE, + .WATER_PULSE = TRUE, + .CALM_MIND = TRUE, + .TOXIC = TRUE, + .HAIL = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .SAFEGUARD = TRUE, + .FRUSTRATION = TRUE, + .IRON_TAIL = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .PSYCHIC = TRUE, + .SHADOW_BALL = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .FLAMETHROWER = TRUE, + .FIRE_BLAST = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .SKILL_SWAP = TRUE, + .SURF = TRUE, + .STRENGTH = TRUE, + .FLASH = TRUE, + .ROCK_SMASH = TRUE, + .DIVE = TRUE, + } }, + + [SPECIES_MISDREAVUS] = { .learnset = { + .CALM_MIND = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .TAUNT = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .THUNDERBOLT = TRUE, + .THUNDER = TRUE, + .RETURN = TRUE, + .PSYCHIC = TRUE, + .SHADOW_BALL = TRUE, + .DOUBLE_TEAM = TRUE, + .SHOCK_WAVE = TRUE, + .AERIAL_ACE = TRUE, + .TORMENT = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .SKILL_SWAP = TRUE, + .SNATCH = TRUE, + .FLASH = TRUE, + } }, + + [SPECIES_UNOWN] = { .learnset = { + } }, + + [SPECIES_WOBBUFFET] = { .learnset = { + } }, + + [SPECIES_GIRAFARIG] = { .learnset = { + .CALM_MIND = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .LIGHT_SCREEN = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .IRON_TAIL = TRUE, + .THUNDERBOLT = TRUE, + .THUNDER = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .PSYCHIC = TRUE, + .SHADOW_BALL = TRUE, + .DOUBLE_TEAM = TRUE, + .REFLECT = TRUE, + .SHOCK_WAVE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .SKILL_SWAP = TRUE, + .STRENGTH = TRUE, + .FLASH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_PINECO] = { .learnset = { + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .LIGHT_SCREEN = TRUE, + .PROTECT = TRUE, + .GIGA_DRAIN = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .DOUBLE_TEAM = TRUE, + .REFLECT = TRUE, + .SANDSTORM = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_FORRETRESS] = { .learnset = { + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .HYPER_BEAM = TRUE, + .LIGHT_SCREEN = TRUE, + .PROTECT = TRUE, + .GIGA_DRAIN = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .DOUBLE_TEAM = TRUE, + .REFLECT = TRUE, + .SANDSTORM = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_DUNSPARCE] = { .learnset = { + .WATER_PULSE = TRUE, + .CALM_MIND = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .IRON_TAIL = TRUE, + .THUNDERBOLT = TRUE, + .THUNDER = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .SHADOW_BALL = TRUE, + .DOUBLE_TEAM = TRUE, + .SHOCK_WAVE = TRUE, + .FLAMETHROWER = TRUE, + .FIRE_BLAST = TRUE, + .ROCK_TOMB = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_GLIGAR] = { .learnset = { + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .IRON_TAIL = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .DOUBLE_TEAM = TRUE, + .SLUDGE_BOMB = TRUE, + .SANDSTORM = TRUE, + .ROCK_TOMB = TRUE, + .AERIAL_ACE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .STEEL_WING = TRUE, + .CUT = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_STEELIX] = { .learnset = { + .ROAR = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .TAUNT = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .FRUSTRATION = TRUE, + .IRON_TAIL = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .DOUBLE_TEAM = TRUE, + .SANDSTORM = TRUE, + .ROCK_TOMB = TRUE, + .TORMENT = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .CUT = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_SNUBBULL] = { .learnset = { + .FOCUS_PUNCH = TRUE, + .WATER_PULSE = TRUE, + .ROAR = TRUE, + .TOXIC = TRUE, + .BULK_UP = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .TAUNT = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .THUNDERBOLT = TRUE, + .THUNDER = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .SHADOW_BALL = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .SHOCK_WAVE = TRUE, + .FLAMETHROWER = TRUE, + .SLUDGE_BOMB = TRUE, + .FIRE_BLAST = TRUE, + .TORMENT = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .OVERHEAT = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_GRANBULL] = { .learnset = { + .FOCUS_PUNCH = TRUE, + .WATER_PULSE = TRUE, + .ROAR = TRUE, + .TOXIC = TRUE, + .BULK_UP = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .TAUNT = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .IRON_TAIL = TRUE, + .THUNDERBOLT = TRUE, + .THUNDER = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .SHADOW_BALL = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .SHOCK_WAVE = TRUE, + .FLAMETHROWER = TRUE, + .SLUDGE_BOMB = TRUE, + .FIRE_BLAST = TRUE, + .ROCK_TOMB = TRUE, + .TORMENT = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .OVERHEAT = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_QWILFISH] = { .learnset = { + .WATER_PULSE = TRUE, + .TOXIC = TRUE, + .HAIL = TRUE, + .HIDDEN_POWER = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .RETURN = TRUE, + .SHADOW_BALL = TRUE, + .DOUBLE_TEAM = TRUE, + .SHOCK_WAVE = TRUE, + .SLUDGE_BOMB = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .SURF = TRUE, + .WATERFALL = TRUE, + .DIVE = TRUE, + } }, + + [SPECIES_SCIZOR] = { .learnset = { + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .RETURN = TRUE, + .DOUBLE_TEAM = TRUE, + .SANDSTORM = TRUE, + .AERIAL_ACE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .STEEL_WING = TRUE, + .CUT = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_SHUCKLE] = { .learnset = { + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .PROTECT = TRUE, + .SAFEGUARD = TRUE, + .FRUSTRATION = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .DOUBLE_TEAM = TRUE, + .SLUDGE_BOMB = TRUE, + .SANDSTORM = TRUE, + .ROCK_TOMB = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .STRENGTH = TRUE, + .FLASH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_HERACROSS] = { .learnset = { + .FOCUS_PUNCH = TRUE, + .TOXIC = TRUE, + .BULK_UP = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .ROCK_TOMB = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .CUT = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_SNEASEL] = { .learnset = { + .FOCUS_PUNCH = TRUE, + .CALM_MIND = TRUE, + .TOXIC = TRUE, + .HAIL = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .TAUNT = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .IRON_TAIL = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .SHADOW_BALL = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .AERIAL_ACE = TRUE, + .TORMENT = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .SNATCH = TRUE, + .CUT = TRUE, + .SURF = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_TEDDIURSA] = { .learnset = { + .FOCUS_PUNCH = TRUE, + .ROAR = TRUE, + .TOXIC = TRUE, + .BULK_UP = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .TAUNT = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .AERIAL_ACE = TRUE, + .TORMENT = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .CUT = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_URSARING] = { .learnset = { + .FOCUS_PUNCH = TRUE, + .ROAR = TRUE, + .TOXIC = TRUE, + .BULK_UP = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .TAUNT = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .ROCK_TOMB = TRUE, + .AERIAL_ACE = TRUE, + .TORMENT = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .CUT = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_SLUGMA] = { .learnset = { + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .LIGHT_SCREEN = TRUE, + .PROTECT = TRUE, + .FRUSTRATION = TRUE, + .RETURN = TRUE, + .DOUBLE_TEAM = TRUE, + .REFLECT = TRUE, + .FLAMETHROWER = TRUE, + .FIRE_BLAST = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .OVERHEAT = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_MAGCARGO] = { .learnset = { + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .HYPER_BEAM = TRUE, + .LIGHT_SCREEN = TRUE, + .PROTECT = TRUE, + .FRUSTRATION = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .DOUBLE_TEAM = TRUE, + .REFLECT = TRUE, + .FLAMETHROWER = TRUE, + .SANDSTORM = TRUE, + .FIRE_BLAST = TRUE, + .ROCK_TOMB = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .OVERHEAT = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_SWINUB] = { .learnset = { + .ROAR = TRUE, + .TOXIC = TRUE, + .HAIL = TRUE, + .HIDDEN_POWER = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .LIGHT_SCREEN = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .DOUBLE_TEAM = TRUE, + .REFLECT = TRUE, + .SANDSTORM = TRUE, + .ROCK_TOMB = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_PILOSWINE] = { .learnset = { + .ROAR = TRUE, + .TOXIC = TRUE, + .HAIL = TRUE, + .HIDDEN_POWER = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .HYPER_BEAM = TRUE, + .LIGHT_SCREEN = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .DOUBLE_TEAM = TRUE, + .REFLECT = TRUE, + .SANDSTORM = TRUE, + .ROCK_TOMB = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_CORSOLA] = { .learnset = { + .WATER_PULSE = TRUE, + .CALM_MIND = TRUE, + .TOXIC = TRUE, + .HAIL = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .LIGHT_SCREEN = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .SAFEGUARD = TRUE, + .FRUSTRATION = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .PSYCHIC = TRUE, + .SHADOW_BALL = TRUE, + .DOUBLE_TEAM = TRUE, + .REFLECT = TRUE, + .SANDSTORM = TRUE, + .ROCK_TOMB = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .SURF = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_REMORAID] = { .learnset = { + .WATER_PULSE = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .RETURN = TRUE, + .PSYCHIC = TRUE, + .DOUBLE_TEAM = TRUE, + .FLAMETHROWER = TRUE, + .FIRE_BLAST = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .SURF = TRUE, + .WATERFALL = TRUE, + .DIVE = TRUE, + } }, + + [SPECIES_OCTILLERY] = { .learnset = { + .WATER_PULSE = TRUE, + .TOXIC = TRUE, + .BULLET_SEED = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .RETURN = TRUE, + .PSYCHIC = TRUE, + .DOUBLE_TEAM = TRUE, + .FLAMETHROWER = TRUE, + .SLUDGE_BOMB = TRUE, + .FIRE_BLAST = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .SURF = TRUE, + .WATERFALL = TRUE, + .DIVE = TRUE, + } }, + + [SPECIES_DELIBIRD] = { .learnset = { + .FOCUS_PUNCH = TRUE, + .WATER_PULSE = TRUE, + .TOXIC = TRUE, + .HAIL = TRUE, + .HIDDEN_POWER = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .RETURN = TRUE, + .DOUBLE_TEAM = TRUE, + .AERIAL_ACE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .FLY = TRUE, + } }, + + [SPECIES_MANTINE] = { .learnset = { + .WATER_PULSE = TRUE, + .TOXIC = TRUE, + .HAIL = TRUE, + .HIDDEN_POWER = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .DOUBLE_TEAM = TRUE, + .AERIAL_ACE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .SURF = TRUE, + .WATERFALL = TRUE, + .DIVE = TRUE, + } }, + + [SPECIES_SKARMORY] = { .learnset = { + .ROAR = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .TAUNT = TRUE, + .PROTECT = TRUE, + .FRUSTRATION = TRUE, + .RETURN = TRUE, + .DOUBLE_TEAM = TRUE, + .SANDSTORM = TRUE, + .AERIAL_ACE = TRUE, + .TORMENT = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .STEEL_WING = TRUE, + .CUT = TRUE, + .FLY = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_HOUNDOUR] = { .learnset = { + .ROAR = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .TAUNT = TRUE, + .PROTECT = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .IRON_TAIL = TRUE, + .RETURN = TRUE, + .SHADOW_BALL = TRUE, + .DOUBLE_TEAM = TRUE, + .FLAMETHROWER = TRUE, + .SLUDGE_BOMB = TRUE, + .FIRE_BLAST = TRUE, + .TORMENT = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .SNATCH = TRUE, + .OVERHEAT = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_HOUNDOOM] = { .learnset = { + .ROAR = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .TAUNT = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .IRON_TAIL = TRUE, + .RETURN = TRUE, + .SHADOW_BALL = TRUE, + .DOUBLE_TEAM = TRUE, + .FLAMETHROWER = TRUE, + .SLUDGE_BOMB = TRUE, + .FIRE_BLAST = TRUE, + .TORMENT = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .SNATCH = TRUE, + .OVERHEAT = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_KINGDRA] = { .learnset = { + .WATER_PULSE = TRUE, + .TOXIC = TRUE, + .HAIL = TRUE, + .HIDDEN_POWER = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .RETURN = TRUE, + .DOUBLE_TEAM = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .SURF = TRUE, + .WATERFALL = TRUE, + .DIVE = TRUE, + } }, + + [SPECIES_PHANPY] = { .learnset = { + .ROAR = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .PROTECT = TRUE, + .FRUSTRATION = TRUE, + .IRON_TAIL = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .DOUBLE_TEAM = TRUE, + .SANDSTORM = TRUE, + .ROCK_TOMB = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_DONPHAN] = { .learnset = { + .ROAR = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .FRUSTRATION = TRUE, + .IRON_TAIL = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .DOUBLE_TEAM = TRUE, + .SANDSTORM = TRUE, + .ROCK_TOMB = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_PORYGON2] = { .learnset = { + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .IRON_TAIL = TRUE, + .THUNDERBOLT = TRUE, + .THUNDER = TRUE, + .RETURN = TRUE, + .PSYCHIC = TRUE, + .SHADOW_BALL = TRUE, + .DOUBLE_TEAM = TRUE, + .SHOCK_WAVE = TRUE, + .AERIAL_ACE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .THIEF = TRUE, + .FLASH = TRUE, + } }, + + [SPECIES_STANTLER] = { .learnset = { + .CALM_MIND = TRUE, + .ROAR = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .LIGHT_SCREEN = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .IRON_TAIL = TRUE, + .THUNDERBOLT = TRUE, + .THUNDER = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .PSYCHIC = TRUE, + .SHADOW_BALL = TRUE, + .DOUBLE_TEAM = TRUE, + .REFLECT = TRUE, + .SHOCK_WAVE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .SKILL_SWAP = TRUE, + .FLASH = TRUE, + } }, + + [SPECIES_SMEARGLE] = { .learnset = { + } }, + + [SPECIES_TYROGUE] = { .learnset = { + .TOXIC = TRUE, + .BULK_UP = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_HITMONTOP] = { .learnset = { + .TOXIC = TRUE, + .BULK_UP = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .SANDSTORM = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_SMOOCHUM] = { .learnset = { + .WATER_PULSE = TRUE, + .CALM_MIND = TRUE, + .TOXIC = TRUE, + .HAIL = TRUE, + .HIDDEN_POWER = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .LIGHT_SCREEN = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .RETURN = TRUE, + .PSYCHIC = TRUE, + .SHADOW_BALL = TRUE, + .DOUBLE_TEAM = TRUE, + .REFLECT = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .SKILL_SWAP = TRUE, + .FLASH = TRUE, + } }, + + [SPECIES_ELEKID] = { .learnset = { + .FOCUS_PUNCH = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .LIGHT_SCREEN = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .THUNDERBOLT = TRUE, + .THUNDER = TRUE, + .RETURN = TRUE, + .PSYCHIC = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .SHOCK_WAVE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .FLASH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_MAGBY] = { .learnset = { + .FOCUS_PUNCH = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .PROTECT = TRUE, + .FRUSTRATION = TRUE, + .IRON_TAIL = TRUE, + .RETURN = TRUE, + .PSYCHIC = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .FLAMETHROWER = TRUE, + .FIRE_BLAST = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_MILTANK] = { .learnset = { + .FOCUS_PUNCH = TRUE, + .WATER_PULSE = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .IRON_TAIL = TRUE, + .THUNDERBOLT = TRUE, + .THUNDER = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .SHADOW_BALL = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .SHOCK_WAVE = TRUE, + .SANDSTORM = TRUE, + .ROCK_TOMB = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .SURF = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_BLISSEY] = { .learnset = { + .FOCUS_PUNCH = TRUE, + .WATER_PULSE = TRUE, + .CALM_MIND = TRUE, + .TOXIC = TRUE, + .HAIL = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .HYPER_BEAM = TRUE, + .LIGHT_SCREEN = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .SAFEGUARD = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .IRON_TAIL = TRUE, + .THUNDERBOLT = TRUE, + .THUNDER = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .PSYCHIC = TRUE, + .SHADOW_BALL = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .SHOCK_WAVE = TRUE, + .FLAMETHROWER = TRUE, + .SANDSTORM = TRUE, + .FIRE_BLAST = TRUE, + .ROCK_TOMB = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .SKILL_SWAP = TRUE, + .SNATCH = TRUE, + .STRENGTH = TRUE, + .FLASH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_RAIKOU] = { .learnset = { + .CALM_MIND = TRUE, + .ROAR = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .IRON_TAIL = TRUE, + .THUNDERBOLT = TRUE, + .THUNDER = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .DOUBLE_TEAM = TRUE, + .REFLECT = TRUE, + .SHOCK_WAVE = TRUE, + .SANDSTORM = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .CUT = TRUE, + .STRENGTH = TRUE, + .FLASH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_ENTEI] = { .learnset = { + .CALM_MIND = TRUE, + .ROAR = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .IRON_TAIL = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .DOUBLE_TEAM = TRUE, + .REFLECT = TRUE, + .FLAMETHROWER = TRUE, + .SANDSTORM = TRUE, + .FIRE_BLAST = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .CUT = TRUE, + .STRENGTH = TRUE, + .FLASH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_SUICUNE] = { .learnset = { + .WATER_PULSE = TRUE, + .CALM_MIND = TRUE, + .ROAR = TRUE, + .TOXIC = TRUE, + .HAIL = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .IRON_TAIL = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .DOUBLE_TEAM = TRUE, + .REFLECT = TRUE, + .SANDSTORM = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .CUT = TRUE, + .SURF = TRUE, + .ROCK_SMASH = TRUE, + .WATERFALL = TRUE, + .DIVE = TRUE, + } }, + + [SPECIES_LARVITAR] = { .learnset = { + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .TAUNT = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .SANDSTORM = TRUE, + .TORMENT = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_PUPITAR] = { .learnset = { + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .TAUNT = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .SANDSTORM = TRUE, + .TORMENT = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_TYRANITAR] = { .learnset = { + .FOCUS_PUNCH = TRUE, + .DRAGON_CLAW = TRUE, + .WATER_PULSE = TRUE, + .ROAR = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .TAUNT = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .IRON_TAIL = TRUE, + .THUNDERBOLT = TRUE, + .THUNDER = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .SHOCK_WAVE = TRUE, + .FLAMETHROWER = TRUE, + .SANDSTORM = TRUE, + .FIRE_BLAST = TRUE, + .ROCK_TOMB = TRUE, + .AERIAL_ACE = TRUE, + .TORMENT = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .CUT = TRUE, + .SURF = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_LUGIA] = { .learnset = { + .WATER_PULSE = TRUE, + .CALM_MIND = TRUE, + .ROAR = TRUE, + .TOXIC = TRUE, + .HAIL = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .HYPER_BEAM = TRUE, + .LIGHT_SCREEN = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .GIGA_DRAIN = TRUE, + .SAFEGUARD = TRUE, + .FRUSTRATION = TRUE, + .IRON_TAIL = TRUE, + .THUNDERBOLT = TRUE, + .THUNDER = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .PSYCHIC = TRUE, + .SHADOW_BALL = TRUE, + .DOUBLE_TEAM = TRUE, + .REFLECT = TRUE, + .SHOCK_WAVE = TRUE, + .SANDSTORM = TRUE, + .AERIAL_ACE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .STEEL_WING = TRUE, + .SKILL_SWAP = TRUE, + .FLY = TRUE, + .SURF = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + .WATERFALL = TRUE, + .DIVE = TRUE, + } }, + + [SPECIES_HO_OH] = { .learnset = { + .CALM_MIND = TRUE, + .ROAR = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .HYPER_BEAM = TRUE, + .LIGHT_SCREEN = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .GIGA_DRAIN = TRUE, + .SAFEGUARD = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .THUNDERBOLT = TRUE, + .THUNDER = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .PSYCHIC = TRUE, + .SHADOW_BALL = TRUE, + .DOUBLE_TEAM = TRUE, + .REFLECT = TRUE, + .SHOCK_WAVE = TRUE, + .FLAMETHROWER = TRUE, + .SANDSTORM = TRUE, + .FIRE_BLAST = TRUE, + .AERIAL_ACE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .STEEL_WING = TRUE, + .OVERHEAT = TRUE, + .FLY = TRUE, + .STRENGTH = TRUE, + .FLASH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_CELEBI] = { .learnset = { + .WATER_PULSE = TRUE, + .CALM_MIND = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .HYPER_BEAM = TRUE, + .LIGHT_SCREEN = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .GIGA_DRAIN = TRUE, + .SAFEGUARD = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .RETURN = TRUE, + .PSYCHIC = TRUE, + .SHADOW_BALL = TRUE, + .DOUBLE_TEAM = TRUE, + .REFLECT = TRUE, + .SHOCK_WAVE = TRUE, + .SANDSTORM = TRUE, + .AERIAL_ACE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .SKILL_SWAP = TRUE, + .CUT = TRUE, + .FLASH = TRUE, + } }, + + [SPECIES_OLD_UNOWN_B] = { .learnset = { + } }, + + [SPECIES_OLD_UNOWN_C] = { .learnset = { + } }, + + [SPECIES_OLD_UNOWN_D] = { .learnset = { + } }, + + [SPECIES_OLD_UNOWN_E] = { .learnset = { + } }, + + [SPECIES_OLD_UNOWN_F] = { .learnset = { + } }, + + [SPECIES_OLD_UNOWN_G] = { .learnset = { + } }, + + [SPECIES_OLD_UNOWN_H] = { .learnset = { + } }, + + [SPECIES_OLD_UNOWN_I] = { .learnset = { + } }, + + [SPECIES_OLD_UNOWN_J] = { .learnset = { + } }, + + [SPECIES_OLD_UNOWN_K] = { .learnset = { + } }, + + [SPECIES_OLD_UNOWN_L] = { .learnset = { + } }, + + [SPECIES_OLD_UNOWN_M] = { .learnset = { + } }, + + [SPECIES_OLD_UNOWN_N] = { .learnset = { + } }, + + [SPECIES_OLD_UNOWN_O] = { .learnset = { + } }, + + [SPECIES_OLD_UNOWN_P] = { .learnset = { + } }, + + [SPECIES_OLD_UNOWN_Q] = { .learnset = { + } }, + + [SPECIES_OLD_UNOWN_R] = { .learnset = { + } }, + + [SPECIES_OLD_UNOWN_S] = { .learnset = { + } }, + + [SPECIES_OLD_UNOWN_T] = { .learnset = { + } }, + + [SPECIES_OLD_UNOWN_U] = { .learnset = { + } }, + + [SPECIES_OLD_UNOWN_V] = { .learnset = { + } }, + + [SPECIES_OLD_UNOWN_W] = { .learnset = { + } }, + + [SPECIES_OLD_UNOWN_X] = { .learnset = { + } }, + + [SPECIES_OLD_UNOWN_Y] = { .learnset = { + } }, + + [SPECIES_OLD_UNOWN_Z] = { .learnset = { + } }, + + [SPECIES_TREECKO] = { .learnset = { + .FOCUS_PUNCH = TRUE, + .TOXIC = TRUE, + .BULLET_SEED = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .PROTECT = TRUE, + .GIGA_DRAIN = TRUE, + .SAFEGUARD = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .IRON_TAIL = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .ROCK_TOMB = TRUE, + .AERIAL_ACE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .CUT = TRUE, + .STRENGTH = TRUE, + .FLASH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_GROVYLE] = { .learnset = { + .FOCUS_PUNCH = TRUE, + .TOXIC = TRUE, + .BULLET_SEED = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .PROTECT = TRUE, + .GIGA_DRAIN = TRUE, + .SAFEGUARD = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .IRON_TAIL = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .ROCK_TOMB = TRUE, + .AERIAL_ACE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .CUT = TRUE, + .STRENGTH = TRUE, + .FLASH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_SCEPTILE] = { .learnset = { + .FOCUS_PUNCH = TRUE, + .DRAGON_CLAW = TRUE, + .ROAR = TRUE, + .TOXIC = TRUE, + .BULLET_SEED = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .GIGA_DRAIN = TRUE, + .SAFEGUARD = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .IRON_TAIL = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .ROCK_TOMB = TRUE, + .AERIAL_ACE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .CUT = TRUE, + .STRENGTH = TRUE, + .FLASH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_TORCHIC] = { .learnset = { + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .PROTECT = TRUE, + .FRUSTRATION = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .DOUBLE_TEAM = TRUE, + .FLAMETHROWER = TRUE, + .FIRE_BLAST = TRUE, + .ROCK_TOMB = TRUE, + .AERIAL_ACE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .OVERHEAT = TRUE, + .CUT = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_COMBUSKEN] = { .learnset = { + .FOCUS_PUNCH = TRUE, + .TOXIC = TRUE, + .BULK_UP = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .PROTECT = TRUE, + .FRUSTRATION = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .FLAMETHROWER = TRUE, + .FIRE_BLAST = TRUE, + .ROCK_TOMB = TRUE, + .AERIAL_ACE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .OVERHEAT = TRUE, + .CUT = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_BLAZIKEN] = { .learnset = { + .FOCUS_PUNCH = TRUE, + .ROAR = TRUE, + .TOXIC = TRUE, + .BULK_UP = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .FRUSTRATION = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .FLAMETHROWER = TRUE, + .FIRE_BLAST = TRUE, + .ROCK_TOMB = TRUE, + .AERIAL_ACE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .OVERHEAT = TRUE, + .CUT = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_MUDKIP] = { .learnset = { + .WATER_PULSE = TRUE, + .TOXIC = TRUE, + .HAIL = TRUE, + .HIDDEN_POWER = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .IRON_TAIL = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .DOUBLE_TEAM = TRUE, + .ROCK_TOMB = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .SURF = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + .WATERFALL = TRUE, + .DIVE = TRUE, + } }, + + [SPECIES_MARSHTOMP] = { .learnset = { + .WATER_PULSE = TRUE, + .TOXIC = TRUE, + .HAIL = TRUE, + .HIDDEN_POWER = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .IRON_TAIL = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .DOUBLE_TEAM = TRUE, + .ROCK_TOMB = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .SURF = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + .WATERFALL = TRUE, + .DIVE = TRUE, + } }, + + [SPECIES_SWAMPERT] = { .learnset = { + .FOCUS_PUNCH = TRUE, + .WATER_PULSE = TRUE, + .ROAR = TRUE, + .TOXIC = TRUE, + .HAIL = TRUE, + .HIDDEN_POWER = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .IRON_TAIL = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .ROCK_TOMB = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .SURF = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + .WATERFALL = TRUE, + .DIVE = TRUE, + } }, + + [SPECIES_POOCHYENA] = { .learnset = { + .ROAR = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .TAUNT = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .IRON_TAIL = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .SHADOW_BALL = TRUE, + .DOUBLE_TEAM = TRUE, + .TORMENT = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .SNATCH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_MIGHTYENA] = { .learnset = { + .ROAR = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .TAUNT = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .IRON_TAIL = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .SHADOW_BALL = TRUE, + .DOUBLE_TEAM = TRUE, + .TORMENT = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .SNATCH = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_ZIGZAGOON] = { .learnset = { + .WATER_PULSE = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .IRON_TAIL = TRUE, + .THUNDERBOLT = TRUE, + .THUNDER = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .SHADOW_BALL = TRUE, + .DOUBLE_TEAM = TRUE, + .SHOCK_WAVE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .CUT = TRUE, + .SURF = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_LINOONE] = { .learnset = { + .WATER_PULSE = TRUE, + .ROAR = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .IRON_TAIL = TRUE, + .THUNDERBOLT = TRUE, + .THUNDER = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .SHADOW_BALL = TRUE, + .DOUBLE_TEAM = TRUE, + .SHOCK_WAVE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .CUT = TRUE, + .SURF = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_WURMPLE] = { .learnset = { + } }, + + [SPECIES_SILCOON] = { .learnset = { + } }, + + [SPECIES_BEAUTIFLY] = { .learnset = { + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .GIGA_DRAIN = TRUE, + .SAFEGUARD = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .RETURN = TRUE, + .PSYCHIC = TRUE, + .SHADOW_BALL = TRUE, + .DOUBLE_TEAM = TRUE, + .AERIAL_ACE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .FLASH = TRUE, + } }, + + [SPECIES_CASCOON] = { .learnset = { + } }, + + [SPECIES_DUSTOX] = { .learnset = { + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .HYPER_BEAM = TRUE, + .LIGHT_SCREEN = TRUE, + .PROTECT = TRUE, + .GIGA_DRAIN = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .RETURN = TRUE, + .PSYCHIC = TRUE, + .SHADOW_BALL = TRUE, + .DOUBLE_TEAM = TRUE, + .SLUDGE_BOMB = TRUE, + .AERIAL_ACE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .FLASH = TRUE, + } }, + + [SPECIES_LOTAD] = { .learnset = { + .WATER_PULSE = TRUE, + .TOXIC = TRUE, + .HAIL = TRUE, + .BULLET_SEED = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .GIGA_DRAIN = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .RETURN = TRUE, + .DOUBLE_TEAM = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .SURF = TRUE, + .FLASH = TRUE, + } }, + + [SPECIES_LOMBRE] = { .learnset = { + .WATER_PULSE = TRUE, + .TOXIC = TRUE, + .HAIL = TRUE, + .BULLET_SEED = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .GIGA_DRAIN = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .RETURN = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .SURF = TRUE, + .STRENGTH = TRUE, + .FLASH = TRUE, + .ROCK_SMASH = TRUE, + .WATERFALL = TRUE, + .DIVE = TRUE, + } }, + + [SPECIES_LUDICOLO] = { .learnset = { + .FOCUS_PUNCH = TRUE, + .WATER_PULSE = TRUE, + .TOXIC = TRUE, + .HAIL = TRUE, + .BULLET_SEED = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .GIGA_DRAIN = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .RETURN = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .SURF = TRUE, + .STRENGTH = TRUE, + .FLASH = TRUE, + .ROCK_SMASH = TRUE, + .WATERFALL = TRUE, + .DIVE = TRUE, + } }, + + [SPECIES_SEEDOT] = { .learnset = { + .TOXIC = TRUE, + .BULLET_SEED = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .PROTECT = TRUE, + .GIGA_DRAIN = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .SHADOW_BALL = TRUE, + .DOUBLE_TEAM = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .FLASH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_NUZLEAF] = { .learnset = { + .TOXIC = TRUE, + .BULLET_SEED = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .GIGA_DRAIN = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .SHADOW_BALL = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .ROCK_TOMB = TRUE, + .TORMENT = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .CUT = TRUE, + .STRENGTH = TRUE, + .FLASH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_SHIFTRY] = { .learnset = { + .TOXIC = TRUE, + .BULLET_SEED = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .GIGA_DRAIN = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .SHADOW_BALL = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .ROCK_TOMB = TRUE, + .AERIAL_ACE = TRUE, + .TORMENT = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .CUT = TRUE, + .STRENGTH = TRUE, + .FLASH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_NINCADA] = { .learnset = { + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .PROTECT = TRUE, + .GIGA_DRAIN = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .SHADOW_BALL = TRUE, + .DOUBLE_TEAM = TRUE, + .SANDSTORM = TRUE, + .AERIAL_ACE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .CUT = TRUE, + .FLASH = TRUE, + } }, + + [SPECIES_NINJASK] = { .learnset = { + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .GIGA_DRAIN = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .SHADOW_BALL = TRUE, + .DOUBLE_TEAM = TRUE, + .SANDSTORM = TRUE, + .AERIAL_ACE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .CUT = TRUE, + .FLASH = TRUE, + } }, + + [SPECIES_SHEDINJA] = { .learnset = { + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .GIGA_DRAIN = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .SHADOW_BALL = TRUE, + .DOUBLE_TEAM = TRUE, + .SANDSTORM = TRUE, + .AERIAL_ACE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .THIEF = TRUE, + .CUT = TRUE, + .FLASH = TRUE, + } }, + + [SPECIES_TAILLOW] = { .learnset = { + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .RETURN = TRUE, + .DOUBLE_TEAM = TRUE, + .AERIAL_ACE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .STEEL_WING = TRUE, + .FLY = TRUE, + } }, + + [SPECIES_SWELLOW] = { .learnset = { + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .RETURN = TRUE, + .DOUBLE_TEAM = TRUE, + .AERIAL_ACE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .STEEL_WING = TRUE, + .FLY = TRUE, + } }, + + [SPECIES_SHROOMISH] = { .learnset = { + .TOXIC = TRUE, + .BULLET_SEED = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .PROTECT = TRUE, + .GIGA_DRAIN = TRUE, + .SAFEGUARD = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .RETURN = TRUE, + .DOUBLE_TEAM = TRUE, + .SLUDGE_BOMB = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .SNATCH = TRUE, + .FLASH = TRUE, + } }, + + [SPECIES_BRELOOM] = { .learnset = { + .FOCUS_PUNCH = TRUE, + .TOXIC = TRUE, + .BULK_UP = TRUE, + .BULLET_SEED = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .GIGA_DRAIN = TRUE, + .SAFEGUARD = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .IRON_TAIL = TRUE, + .RETURN = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .SLUDGE_BOMB = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .SNATCH = TRUE, + .CUT = TRUE, + .STRENGTH = TRUE, + .FLASH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_SPINDA] = { .learnset = { + .FOCUS_PUNCH = TRUE, + .WATER_PULSE = TRUE, + .CALM_MIND = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .SAFEGUARD = TRUE, + .FRUSTRATION = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .PSYCHIC = TRUE, + .SHADOW_BALL = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .SHOCK_WAVE = TRUE, + .ROCK_TOMB = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .SKILL_SWAP = TRUE, + .SNATCH = TRUE, + .STRENGTH = TRUE, + .FLASH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_WINGULL] = { .learnset = { + .WATER_PULSE = TRUE, + .TOXIC = TRUE, + .HAIL = TRUE, + .HIDDEN_POWER = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .RETURN = TRUE, + .DOUBLE_TEAM = TRUE, + .SHOCK_WAVE = TRUE, + .AERIAL_ACE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .STEEL_WING = TRUE, + .FLY = TRUE, + } }, + + [SPECIES_PELIPPER] = { .learnset = { + .WATER_PULSE = TRUE, + .TOXIC = TRUE, + .HAIL = TRUE, + .HIDDEN_POWER = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .RETURN = TRUE, + .DOUBLE_TEAM = TRUE, + .SHOCK_WAVE = TRUE, + .AERIAL_ACE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .STEEL_WING = TRUE, + .FLY = TRUE, + .SURF = TRUE, + } }, + + [SPECIES_SURSKIT] = { .learnset = { + .WATER_PULSE = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .GIGA_DRAIN = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .RETURN = TRUE, + .SHADOW_BALL = TRUE, + .DOUBLE_TEAM = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .FLASH = TRUE, + } }, + + [SPECIES_MASQUERAIN] = { .learnset = { + .WATER_PULSE = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .GIGA_DRAIN = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .RETURN = TRUE, + .SHADOW_BALL = TRUE, + .DOUBLE_TEAM = TRUE, + .AERIAL_ACE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .FLASH = TRUE, + } }, + + [SPECIES_WAILMER] = { .learnset = { + .WATER_PULSE = TRUE, + .ROAR = TRUE, + .TOXIC = TRUE, + .HAIL = TRUE, + .HIDDEN_POWER = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .DOUBLE_TEAM = TRUE, + .ROCK_TOMB = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .SURF = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + .WATERFALL = TRUE, + .DIVE = TRUE, + } }, + + [SPECIES_WAILORD] = { .learnset = { + .WATER_PULSE = TRUE, + .ROAR = TRUE, + .TOXIC = TRUE, + .HAIL = TRUE, + .HIDDEN_POWER = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .DOUBLE_TEAM = TRUE, + .ROCK_TOMB = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .SURF = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + .WATERFALL = TRUE, + .DIVE = TRUE, + } }, + + [SPECIES_SKITTY] = { .learnset = { + .WATER_PULSE = TRUE, + .CALM_MIND = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .SAFEGUARD = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .IRON_TAIL = TRUE, + .THUNDERBOLT = TRUE, + .THUNDER = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .SHADOW_BALL = TRUE, + .DOUBLE_TEAM = TRUE, + .SHOCK_WAVE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .FLASH = TRUE, + } }, + + [SPECIES_DELCATTY] = { .learnset = { + .WATER_PULSE = TRUE, + .CALM_MIND = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .SAFEGUARD = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .IRON_TAIL = TRUE, + .THUNDERBOLT = TRUE, + .THUNDER = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .SHADOW_BALL = TRUE, + .DOUBLE_TEAM = TRUE, + .SHOCK_WAVE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .STRENGTH = TRUE, + .FLASH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_KECLEON] = { .learnset = { + .FOCUS_PUNCH = TRUE, + .WATER_PULSE = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .IRON_TAIL = TRUE, + .THUNDERBOLT = TRUE, + .THUNDER = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .SHADOW_BALL = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .SHOCK_WAVE = TRUE, + .FLAMETHROWER = TRUE, + .FIRE_BLAST = TRUE, + .ROCK_TOMB = TRUE, + .AERIAL_ACE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .SKILL_SWAP = TRUE, + .SNATCH = TRUE, + .CUT = TRUE, + .STRENGTH = TRUE, + .FLASH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_BALTOY] = { .learnset = { + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .ICE_BEAM = TRUE, + .LIGHT_SCREEN = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .PSYCHIC = TRUE, + .SHADOW_BALL = TRUE, + .DOUBLE_TEAM = TRUE, + .REFLECT = TRUE, + .SANDSTORM = TRUE, + .ROCK_TOMB = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .SKILL_SWAP = TRUE, + .FLASH = TRUE, + } }, + + [SPECIES_CLAYDOL] = { .learnset = { + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .ICE_BEAM = TRUE, + .HYPER_BEAM = TRUE, + .LIGHT_SCREEN = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .PSYCHIC = TRUE, + .SHADOW_BALL = TRUE, + .DOUBLE_TEAM = TRUE, + .REFLECT = TRUE, + .SANDSTORM = TRUE, + .ROCK_TOMB = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .SKILL_SWAP = TRUE, + .STRENGTH = TRUE, + .FLASH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_NOSEPASS] = { .learnset = { + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .TAUNT = TRUE, + .PROTECT = TRUE, + .FRUSTRATION = TRUE, + .THUNDERBOLT = TRUE, + .THUNDER = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .DOUBLE_TEAM = TRUE, + .SHOCK_WAVE = TRUE, + .SANDSTORM = TRUE, + .ROCK_TOMB = TRUE, + .TORMENT = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_TORKOAL] = { .learnset = { + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .PROTECT = TRUE, + .FRUSTRATION = TRUE, + .IRON_TAIL = TRUE, + .RETURN = TRUE, + .DOUBLE_TEAM = TRUE, + .FLAMETHROWER = TRUE, + .SLUDGE_BOMB = TRUE, + .FIRE_BLAST = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .OVERHEAT = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_SABLEYE] = { .learnset = { + .FOCUS_PUNCH = TRUE, + .WATER_PULSE = TRUE, + .CALM_MIND = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .TAUNT = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .PSYCHIC = TRUE, + .SHADOW_BALL = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .SHOCK_WAVE = TRUE, + .ROCK_TOMB = TRUE, + .AERIAL_ACE = TRUE, + .TORMENT = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .SNATCH = TRUE, + .CUT = TRUE, + .FLASH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_BARBOACH] = { .learnset = { + .WATER_PULSE = TRUE, + .TOXIC = TRUE, + .HAIL = TRUE, + .HIDDEN_POWER = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .DOUBLE_TEAM = TRUE, + .SANDSTORM = TRUE, + .ROCK_TOMB = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .SURF = TRUE, + .WATERFALL = TRUE, + .DIVE = TRUE, + } }, + + [SPECIES_WHISCASH] = { .learnset = { + .WATER_PULSE = TRUE, + .TOXIC = TRUE, + .HAIL = TRUE, + .HIDDEN_POWER = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .DOUBLE_TEAM = TRUE, + .SANDSTORM = TRUE, + .ROCK_TOMB = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .SURF = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + .WATERFALL = TRUE, + .DIVE = TRUE, + } }, + + [SPECIES_LUVDISC] = { .learnset = { + .WATER_PULSE = TRUE, + .TOXIC = TRUE, + .HAIL = TRUE, + .HIDDEN_POWER = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .SAFEGUARD = TRUE, + .FRUSTRATION = TRUE, + .RETURN = TRUE, + .DOUBLE_TEAM = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .SURF = TRUE, + .WATERFALL = TRUE, + .DIVE = TRUE, + } }, + + [SPECIES_CORPHISH] = { .learnset = { + .WATER_PULSE = TRUE, + .TOXIC = TRUE, + .HAIL = TRUE, + .HIDDEN_POWER = TRUE, + .TAUNT = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .SLUDGE_BOMB = TRUE, + .ROCK_TOMB = TRUE, + .AERIAL_ACE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .CUT = TRUE, + .SURF = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + .WATERFALL = TRUE, + } }, + + [SPECIES_CRAWDAUNT] = { .learnset = { + .WATER_PULSE = TRUE, + .TOXIC = TRUE, + .HAIL = TRUE, + .HIDDEN_POWER = TRUE, + .TAUNT = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .SLUDGE_BOMB = TRUE, + .ROCK_TOMB = TRUE, + .AERIAL_ACE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .CUT = TRUE, + .SURF = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + .WATERFALL = TRUE, + .DIVE = TRUE, + } }, + + [SPECIES_FEEBAS] = { .learnset = { + .WATER_PULSE = TRUE, + .TOXIC = TRUE, + .HAIL = TRUE, + .HIDDEN_POWER = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .RETURN = TRUE, + .DOUBLE_TEAM = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .SURF = TRUE, + .WATERFALL = TRUE, + .DIVE = TRUE, + } }, + + [SPECIES_MILOTIC] = { .learnset = { + .WATER_PULSE = TRUE, + .TOXIC = TRUE, + .HAIL = TRUE, + .HIDDEN_POWER = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .SAFEGUARD = TRUE, + .FRUSTRATION = TRUE, + .IRON_TAIL = TRUE, + .RETURN = TRUE, + .DOUBLE_TEAM = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .SURF = TRUE, + .WATERFALL = TRUE, + .DIVE = TRUE, + } }, + + [SPECIES_CARVANHA] = { .learnset = { + .WATER_PULSE = TRUE, + .TOXIC = TRUE, + .HAIL = TRUE, + .HIDDEN_POWER = TRUE, + .TAUNT = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .RETURN = TRUE, + .DOUBLE_TEAM = TRUE, + .TORMENT = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .SURF = TRUE, + .WATERFALL = TRUE, + .DIVE = TRUE, + } }, + + [SPECIES_SHARPEDO] = { .learnset = { + .WATER_PULSE = TRUE, + .ROAR = TRUE, + .TOXIC = TRUE, + .HAIL = TRUE, + .HIDDEN_POWER = TRUE, + .TAUNT = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .DOUBLE_TEAM = TRUE, + .ROCK_TOMB = TRUE, + .TORMENT = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .SURF = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + .WATERFALL = TRUE, + .DIVE = TRUE, + } }, + + [SPECIES_TRAPINCH] = { .learnset = { + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .GIGA_DRAIN = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .DOUBLE_TEAM = TRUE, + .SANDSTORM = TRUE, + .ROCK_TOMB = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_VIBRAVA] = { .learnset = { + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .GIGA_DRAIN = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .DOUBLE_TEAM = TRUE, + .SANDSTORM = TRUE, + .ROCK_TOMB = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .STEEL_WING = TRUE, + .FLY = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_FLYGON] = { .learnset = { + .DRAGON_CLAW = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .GIGA_DRAIN = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .IRON_TAIL = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .DOUBLE_TEAM = TRUE, + .FLAMETHROWER = TRUE, + .SANDSTORM = TRUE, + .FIRE_BLAST = TRUE, + .ROCK_TOMB = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .STEEL_WING = TRUE, + .FLY = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_MAKUHITA] = { .learnset = { + .FOCUS_PUNCH = TRUE, + .TOXIC = TRUE, + .BULK_UP = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .ROCK_TOMB = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .SURF = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_HARIYAMA] = { .learnset = { + .FOCUS_PUNCH = TRUE, + .TOXIC = TRUE, + .BULK_UP = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .ROCK_TOMB = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .SURF = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_ELECTRIKE] = { .learnset = { + .ROAR = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .IRON_TAIL = TRUE, + .THUNDERBOLT = TRUE, + .THUNDER = TRUE, + .RETURN = TRUE, + .DOUBLE_TEAM = TRUE, + .SHOCK_WAVE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .STRENGTH = TRUE, + .FLASH = TRUE, + } }, + + [SPECIES_MANECTRIC] = { .learnset = { + .ROAR = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .IRON_TAIL = TRUE, + .THUNDERBOLT = TRUE, + .THUNDER = TRUE, + .RETURN = TRUE, + .DOUBLE_TEAM = TRUE, + .SHOCK_WAVE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .STRENGTH = TRUE, + .FLASH = TRUE, + } }, + + [SPECIES_NUMEL] = { .learnset = { + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .PROTECT = TRUE, + .FRUSTRATION = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .DOUBLE_TEAM = TRUE, + .FLAMETHROWER = TRUE, + .SANDSTORM = TRUE, + .FIRE_BLAST = TRUE, + .ROCK_TOMB = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .OVERHEAT = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_CAMERUPT] = { .learnset = { + .ROAR = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .FRUSTRATION = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .DOUBLE_TEAM = TRUE, + .FLAMETHROWER = TRUE, + .SANDSTORM = TRUE, + .FIRE_BLAST = TRUE, + .ROCK_TOMB = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .OVERHEAT = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_SPHEAL] = { .learnset = { + .WATER_PULSE = TRUE, + .TOXIC = TRUE, + .HAIL = TRUE, + .HIDDEN_POWER = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .IRON_TAIL = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .DOUBLE_TEAM = TRUE, + .ROCK_TOMB = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .SURF = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + .WATERFALL = TRUE, + .DIVE = TRUE, + } }, + + [SPECIES_SEALEO] = { .learnset = { + .WATER_PULSE = TRUE, + .ROAR = TRUE, + .TOXIC = TRUE, + .HAIL = TRUE, + .HIDDEN_POWER = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .IRON_TAIL = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .DOUBLE_TEAM = TRUE, + .ROCK_TOMB = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .SURF = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + .WATERFALL = TRUE, + .DIVE = TRUE, + } }, + + [SPECIES_WALREIN] = { .learnset = { + .WATER_PULSE = TRUE, + .ROAR = TRUE, + .TOXIC = TRUE, + .HAIL = TRUE, + .HIDDEN_POWER = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .IRON_TAIL = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .DOUBLE_TEAM = TRUE, + .ROCK_TOMB = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .SURF = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + .WATERFALL = TRUE, + .DIVE = TRUE, + } }, + + [SPECIES_CACNEA] = { .learnset = { + .FOCUS_PUNCH = TRUE, + .TOXIC = TRUE, + .BULLET_SEED = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .PROTECT = TRUE, + .GIGA_DRAIN = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .RETURN = TRUE, + .DOUBLE_TEAM = TRUE, + .SANDSTORM = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .CUT = TRUE, + .FLASH = TRUE, + } }, + + [SPECIES_CACTURNE] = { .learnset = { + .FOCUS_PUNCH = TRUE, + .TOXIC = TRUE, + .BULLET_SEED = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .GIGA_DRAIN = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .RETURN = TRUE, + .DOUBLE_TEAM = TRUE, + .SANDSTORM = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .CUT = TRUE, + .STRENGTH = TRUE, + .FLASH = TRUE, + } }, + + [SPECIES_SNORUNT] = { .learnset = { + .WATER_PULSE = TRUE, + .TOXIC = TRUE, + .HAIL = TRUE, + .HIDDEN_POWER = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .LIGHT_SCREEN = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .SAFEGUARD = TRUE, + .FRUSTRATION = TRUE, + .RETURN = TRUE, + .SHADOW_BALL = TRUE, + .DOUBLE_TEAM = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .FLASH = TRUE, + } }, + + [SPECIES_GLALIE] = { .learnset = { + .WATER_PULSE = TRUE, + .TOXIC = TRUE, + .HAIL = TRUE, + .HIDDEN_POWER = TRUE, + .TAUNT = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .HYPER_BEAM = TRUE, + .LIGHT_SCREEN = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .SAFEGUARD = TRUE, + .FRUSTRATION = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .SHADOW_BALL = TRUE, + .DOUBLE_TEAM = TRUE, + .TORMENT = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .FLASH = TRUE, + } }, + + [SPECIES_LUNATONE] = { .learnset = { + .CALM_MIND = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .ICE_BEAM = TRUE, + .HYPER_BEAM = TRUE, + .LIGHT_SCREEN = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .SAFEGUARD = TRUE, + .FRUSTRATION = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .PSYCHIC = TRUE, + .SHADOW_BALL = TRUE, + .DOUBLE_TEAM = TRUE, + .REFLECT = TRUE, + .SANDSTORM = TRUE, + .ROCK_TOMB = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .SKILL_SWAP = TRUE, + .FLASH = TRUE, + } }, + + [SPECIES_SOLROCK] = { .learnset = { + .CALM_MIND = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .HYPER_BEAM = TRUE, + .LIGHT_SCREEN = TRUE, + .PROTECT = TRUE, + .SAFEGUARD = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .PSYCHIC = TRUE, + .SHADOW_BALL = TRUE, + .DOUBLE_TEAM = TRUE, + .REFLECT = TRUE, + .FLAMETHROWER = TRUE, + .SANDSTORM = TRUE, + .FIRE_BLAST = TRUE, + .ROCK_TOMB = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .SKILL_SWAP = TRUE, + .OVERHEAT = TRUE, + .FLASH = TRUE, + } }, + + [SPECIES_AZURILL] = { .learnset = { + .WATER_PULSE = TRUE, + .TOXIC = TRUE, + .HAIL = TRUE, + .HIDDEN_POWER = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .IRON_TAIL = TRUE, + .RETURN = TRUE, + .DOUBLE_TEAM = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .SURF = TRUE, + .WATERFALL = TRUE, + } }, + + [SPECIES_SPOINK] = { .learnset = { + .CALM_MIND = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .TAUNT = TRUE, + .LIGHT_SCREEN = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .IRON_TAIL = TRUE, + .RETURN = TRUE, + .PSYCHIC = TRUE, + .SHADOW_BALL = TRUE, + .DOUBLE_TEAM = TRUE, + .REFLECT = TRUE, + .SHOCK_WAVE = TRUE, + .TORMENT = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .SKILL_SWAP = TRUE, + .SNATCH = TRUE, + .FLASH = TRUE, + } }, + + [SPECIES_GRUMPIG] = { .learnset = { + .FOCUS_PUNCH = TRUE, + .CALM_MIND = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .TAUNT = TRUE, + .HYPER_BEAM = TRUE, + .LIGHT_SCREEN = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .IRON_TAIL = TRUE, + .RETURN = TRUE, + .PSYCHIC = TRUE, + .SHADOW_BALL = TRUE, + .DOUBLE_TEAM = TRUE, + .REFLECT = TRUE, + .SHOCK_WAVE = TRUE, + .TORMENT = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .SKILL_SWAP = TRUE, + .SNATCH = TRUE, + .FLASH = TRUE, + } }, + + [SPECIES_PLUSLE] = { .learnset = { + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .LIGHT_SCREEN = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .IRON_TAIL = TRUE, + .THUNDERBOLT = TRUE, + .THUNDER = TRUE, + .RETURN = TRUE, + .DOUBLE_TEAM = TRUE, + .SHOCK_WAVE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .FLASH = TRUE, + } }, + + [SPECIES_MINUN] = { .learnset = { + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .LIGHT_SCREEN = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .IRON_TAIL = TRUE, + .THUNDERBOLT = TRUE, + .THUNDER = TRUE, + .RETURN = TRUE, + .DOUBLE_TEAM = TRUE, + .SHOCK_WAVE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .FLASH = TRUE, + } }, + + [SPECIES_MAWILE] = { .learnset = { + .FOCUS_PUNCH = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .TAUNT = TRUE, + .ICE_BEAM = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .RETURN = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .FLAMETHROWER = TRUE, + .SLUDGE_BOMB = TRUE, + .SANDSTORM = TRUE, + .FIRE_BLAST = TRUE, + .ROCK_TOMB = TRUE, + .TORMENT = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_MEDITITE] = { .learnset = { + .FOCUS_PUNCH = TRUE, + .CALM_MIND = TRUE, + .TOXIC = TRUE, + .BULK_UP = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .LIGHT_SCREEN = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .RETURN = TRUE, + .PSYCHIC = TRUE, + .SHADOW_BALL = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .REFLECT = TRUE, + .ROCK_TOMB = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .STRENGTH = TRUE, + .FLASH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_MEDICHAM] = { .learnset = { + .FOCUS_PUNCH = TRUE, + .CALM_MIND = TRUE, + .TOXIC = TRUE, + .BULK_UP = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .HYPER_BEAM = TRUE, + .LIGHT_SCREEN = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .RETURN = TRUE, + .PSYCHIC = TRUE, + .SHADOW_BALL = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .REFLECT = TRUE, + .ROCK_TOMB = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .STRENGTH = TRUE, + .FLASH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_SWABLU] = { .learnset = { + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .ICE_BEAM = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .SAFEGUARD = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .RETURN = TRUE, + .DOUBLE_TEAM = TRUE, + .AERIAL_ACE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .STEEL_WING = TRUE, + .FLY = TRUE, + } }, + + [SPECIES_ALTARIA] = { .learnset = { + .DRAGON_CLAW = TRUE, + .ROAR = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .ICE_BEAM = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .SAFEGUARD = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .IRON_TAIL = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .DOUBLE_TEAM = TRUE, + .FLAMETHROWER = TRUE, + .FIRE_BLAST = TRUE, + .AERIAL_ACE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .STEEL_WING = TRUE, + .FLY = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_WYNAUT] = { .learnset = { + } }, + + [SPECIES_DUSKULL] = { .learnset = { + .CALM_MIND = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .TAUNT = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .RETURN = TRUE, + .PSYCHIC = TRUE, + .SHADOW_BALL = TRUE, + .DOUBLE_TEAM = TRUE, + .TORMENT = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .SKILL_SWAP = TRUE, + .SNATCH = TRUE, + .FLASH = TRUE, + } }, + + [SPECIES_DUSCLOPS] = { .learnset = { + .FOCUS_PUNCH = TRUE, + .CALM_MIND = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .TAUNT = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .PSYCHIC = TRUE, + .SHADOW_BALL = TRUE, + .DOUBLE_TEAM = TRUE, + .ROCK_TOMB = TRUE, + .TORMENT = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .SKILL_SWAP = TRUE, + .SNATCH = TRUE, + .STRENGTH = TRUE, + .FLASH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_ROSELIA] = { .learnset = { + .TOXIC = TRUE, + .BULLET_SEED = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .PROTECT = TRUE, + .GIGA_DRAIN = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .RETURN = TRUE, + .SHADOW_BALL = TRUE, + .DOUBLE_TEAM = TRUE, + .SLUDGE_BOMB = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .CUT = TRUE, + .FLASH = TRUE, + } }, + + [SPECIES_SLAKOTH] = { .learnset = { + .FOCUS_PUNCH = TRUE, + .WATER_PULSE = TRUE, + .TOXIC = TRUE, + .BULK_UP = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .THUNDERBOLT = TRUE, + .THUNDER = TRUE, + .RETURN = TRUE, + .SHADOW_BALL = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .SHOCK_WAVE = TRUE, + .FLAMETHROWER = TRUE, + .FIRE_BLAST = TRUE, + .AERIAL_ACE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .CUT = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_VIGOROTH] = { .learnset = { + .FOCUS_PUNCH = TRUE, + .WATER_PULSE = TRUE, + .ROAR = TRUE, + .TOXIC = TRUE, + .BULK_UP = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .TAUNT = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .THUNDERBOLT = TRUE, + .THUNDER = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .SHADOW_BALL = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .SHOCK_WAVE = TRUE, + .FLAMETHROWER = TRUE, + .FIRE_BLAST = TRUE, + .AERIAL_ACE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .CUT = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_SLAKING] = { .learnset = { + .FOCUS_PUNCH = TRUE, + .WATER_PULSE = TRUE, + .ROAR = TRUE, + .TOXIC = TRUE, + .BULK_UP = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .TAUNT = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .THUNDERBOLT = TRUE, + .THUNDER = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .SHADOW_BALL = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .SHOCK_WAVE = TRUE, + .FLAMETHROWER = TRUE, + .FIRE_BLAST = TRUE, + .AERIAL_ACE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .CUT = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_GULPIN] = { .learnset = { + .WATER_PULSE = TRUE, + .TOXIC = TRUE, + .BULLET_SEED = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .ICE_BEAM = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .GIGA_DRAIN = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .RETURN = TRUE, + .SHADOW_BALL = TRUE, + .DOUBLE_TEAM = TRUE, + .SHOCK_WAVE = TRUE, + .SLUDGE_BOMB = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .SNATCH = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_SWALOT] = { .learnset = { + .WATER_PULSE = TRUE, + .TOXIC = TRUE, + .BULLET_SEED = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .ICE_BEAM = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .GIGA_DRAIN = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .RETURN = TRUE, + .SHADOW_BALL = TRUE, + .DOUBLE_TEAM = TRUE, + .SHOCK_WAVE = TRUE, + .SLUDGE_BOMB = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .SNATCH = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_TROPIUS] = { .learnset = { + .ROAR = TRUE, + .TOXIC = TRUE, + .BULLET_SEED = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .GIGA_DRAIN = TRUE, + .SAFEGUARD = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .DOUBLE_TEAM = TRUE, + .AERIAL_ACE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .STEEL_WING = TRUE, + .CUT = TRUE, + .FLY = TRUE, + .STRENGTH = TRUE, + .FLASH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_WHISMUR] = { .learnset = { + .WATER_PULSE = TRUE, + .ROAR = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .RETURN = TRUE, + .SHADOW_BALL = TRUE, + .DOUBLE_TEAM = TRUE, + .SHOCK_WAVE = TRUE, + .FLAMETHROWER = TRUE, + .FIRE_BLAST = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + } }, + + [SPECIES_LOUDRED] = { .learnset = { + .WATER_PULSE = TRUE, + .ROAR = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .TAUNT = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .SHADOW_BALL = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .SHOCK_WAVE = TRUE, + .FLAMETHROWER = TRUE, + .FIRE_BLAST = TRUE, + .TORMENT = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .OVERHEAT = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_EXPLOUD] = { .learnset = { + .WATER_PULSE = TRUE, + .ROAR = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .TAUNT = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .SHADOW_BALL = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .SHOCK_WAVE = TRUE, + .FLAMETHROWER = TRUE, + .FIRE_BLAST = TRUE, + .TORMENT = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .OVERHEAT = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_CLAMPERL] = { .learnset = { + .WATER_PULSE = TRUE, + .TOXIC = TRUE, + .HAIL = TRUE, + .HIDDEN_POWER = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .RETURN = TRUE, + .DOUBLE_TEAM = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .SURF = TRUE, + .WATERFALL = TRUE, + .DIVE = TRUE, + } }, + + [SPECIES_HUNTAIL] = { .learnset = { + .WATER_PULSE = TRUE, + .TOXIC = TRUE, + .HAIL = TRUE, + .HIDDEN_POWER = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .RETURN = TRUE, + .DOUBLE_TEAM = TRUE, + .ROCK_TOMB = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .SNATCH = TRUE, + .SURF = TRUE, + .WATERFALL = TRUE, + .DIVE = TRUE, + } }, + + [SPECIES_GOREBYSS] = { .learnset = { + .WATER_PULSE = TRUE, + .TOXIC = TRUE, + .HAIL = TRUE, + .HIDDEN_POWER = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .SAFEGUARD = TRUE, + .FRUSTRATION = TRUE, + .RETURN = TRUE, + .PSYCHIC = TRUE, + .SHADOW_BALL = TRUE, + .DOUBLE_TEAM = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .SURF = TRUE, + .WATERFALL = TRUE, + .DIVE = TRUE, + } }, + + [SPECIES_ABSOL] = { .learnset = { + .WATER_PULSE = TRUE, + .CALM_MIND = TRUE, + .TOXIC = TRUE, + .HAIL = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .TAUNT = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .IRON_TAIL = TRUE, + .THUNDERBOLT = TRUE, + .THUNDER = TRUE, + .RETURN = TRUE, + .SHADOW_BALL = TRUE, + .DOUBLE_TEAM = TRUE, + .SHOCK_WAVE = TRUE, + .FLAMETHROWER = TRUE, + .SANDSTORM = TRUE, + .FIRE_BLAST = TRUE, + .AERIAL_ACE = TRUE, + .TORMENT = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .SNATCH = TRUE, + .CUT = TRUE, + .STRENGTH = TRUE, + .FLASH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_SHUPPET] = { .learnset = { + .CALM_MIND = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .TAUNT = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .THUNDERBOLT = TRUE, + .THUNDER = TRUE, + .RETURN = TRUE, + .PSYCHIC = TRUE, + .SHADOW_BALL = TRUE, + .DOUBLE_TEAM = TRUE, + .SHOCK_WAVE = TRUE, + .TORMENT = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .SKILL_SWAP = TRUE, + .SNATCH = TRUE, + .FLASH = TRUE, + } }, + + [SPECIES_BANETTE] = { .learnset = { + .CALM_MIND = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .TAUNT = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .THUNDERBOLT = TRUE, + .THUNDER = TRUE, + .RETURN = TRUE, + .PSYCHIC = TRUE, + .SHADOW_BALL = TRUE, + .DOUBLE_TEAM = TRUE, + .SHOCK_WAVE = TRUE, + .TORMENT = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .SKILL_SWAP = TRUE, + .SNATCH = TRUE, + .FLASH = TRUE, + } }, + + [SPECIES_SEVIPER] = { .learnset = { + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .TAUNT = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .GIGA_DRAIN = TRUE, + .FRUSTRATION = TRUE, + .IRON_TAIL = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .DOUBLE_TEAM = TRUE, + .FLAMETHROWER = TRUE, + .SLUDGE_BOMB = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .SNATCH = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_ZANGOOSE] = { .learnset = { + .FOCUS_PUNCH = TRUE, + .WATER_PULSE = TRUE, + .ROAR = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .TAUNT = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .GIGA_DRAIN = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .IRON_TAIL = TRUE, + .THUNDERBOLT = TRUE, + .THUNDER = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .SHADOW_BALL = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .SHOCK_WAVE = TRUE, + .FLAMETHROWER = TRUE, + .FIRE_BLAST = TRUE, + .AERIAL_ACE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_RELICANTH] = { .learnset = { + .WATER_PULSE = TRUE, + .CALM_MIND = TRUE, + .TOXIC = TRUE, + .HAIL = TRUE, + .HIDDEN_POWER = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .SAFEGUARD = TRUE, + .FRUSTRATION = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .DOUBLE_TEAM = TRUE, + .SANDSTORM = TRUE, + .ROCK_TOMB = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .SURF = TRUE, + .ROCK_SMASH = TRUE, + .WATERFALL = TRUE, + .DIVE = TRUE, + } }, + + [SPECIES_ARON] = { .learnset = { + .WATER_PULSE = TRUE, + .ROAR = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .IRON_TAIL = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .DOUBLE_TEAM = TRUE, + .SHOCK_WAVE = TRUE, + .SANDSTORM = TRUE, + .ROCK_TOMB = TRUE, + .AERIAL_ACE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .CUT = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_LAIRON] = { .learnset = { + .WATER_PULSE = TRUE, + .ROAR = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .IRON_TAIL = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .DOUBLE_TEAM = TRUE, + .SHOCK_WAVE = TRUE, + .SANDSTORM = TRUE, + .ROCK_TOMB = TRUE, + .AERIAL_ACE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .CUT = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_AGGRON] = { .learnset = { + .FOCUS_PUNCH = TRUE, + .DRAGON_CLAW = TRUE, + .WATER_PULSE = TRUE, + .ROAR = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .TAUNT = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .IRON_TAIL = TRUE, + .THUNDERBOLT = TRUE, + .THUNDER = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .SHOCK_WAVE = TRUE, + .FLAMETHROWER = TRUE, + .SANDSTORM = TRUE, + .FIRE_BLAST = TRUE, + .ROCK_TOMB = TRUE, + .AERIAL_ACE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .CUT = TRUE, + .SURF = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_CASTFORM] = { .learnset = { + .WATER_PULSE = TRUE, + .TOXIC = TRUE, + .HAIL = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .THUNDERBOLT = TRUE, + .THUNDER = TRUE, + .RETURN = TRUE, + .SHADOW_BALL = TRUE, + .DOUBLE_TEAM = TRUE, + .SHOCK_WAVE = TRUE, + .FLAMETHROWER = TRUE, + .SANDSTORM = TRUE, + .FIRE_BLAST = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .FLASH = TRUE, + } }, + + [SPECIES_VOLBEAT] = { .learnset = { + .FOCUS_PUNCH = TRUE, + .WATER_PULSE = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .LIGHT_SCREEN = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .GIGA_DRAIN = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .THUNDERBOLT = TRUE, + .THUNDER = TRUE, + .RETURN = TRUE, + .SHADOW_BALL = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .SHOCK_WAVE = TRUE, + .AERIAL_ACE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .FLASH = TRUE, + } }, + + [SPECIES_ILLUMISE] = { .learnset = { + .FOCUS_PUNCH = TRUE, + .WATER_PULSE = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .LIGHT_SCREEN = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .GIGA_DRAIN = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .THUNDERBOLT = TRUE, + .THUNDER = TRUE, + .RETURN = TRUE, + .SHADOW_BALL = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .SHOCK_WAVE = TRUE, + .AERIAL_ACE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .FLASH = TRUE, + } }, + + [SPECIES_LILEEP] = { .learnset = { + .TOXIC = TRUE, + .BULLET_SEED = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .PROTECT = TRUE, + .GIGA_DRAIN = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .RETURN = TRUE, + .DOUBLE_TEAM = TRUE, + .SLUDGE_BOMB = TRUE, + .SANDSTORM = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + } }, + + [SPECIES_CRADILY] = { .learnset = { + .TOXIC = TRUE, + .BULLET_SEED = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .GIGA_DRAIN = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .DOUBLE_TEAM = TRUE, + .SLUDGE_BOMB = TRUE, + .SANDSTORM = TRUE, + .ROCK_TOMB = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_ANORITH] = { .learnset = { + .WATER_PULSE = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .PROTECT = TRUE, + .FRUSTRATION = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .SANDSTORM = TRUE, + .ROCK_TOMB = TRUE, + .AERIAL_ACE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .CUT = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_ARMALDO] = { .learnset = { + .WATER_PULSE = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .FRUSTRATION = TRUE, + .IRON_TAIL = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .SANDSTORM = TRUE, + .ROCK_TOMB = TRUE, + .AERIAL_ACE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .CUT = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_RALTS] = { .learnset = { + .CALM_MIND = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .TAUNT = TRUE, + .LIGHT_SCREEN = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .SAFEGUARD = TRUE, + .FRUSTRATION = TRUE, + .THUNDERBOLT = TRUE, + .RETURN = TRUE, + .PSYCHIC = TRUE, + .SHADOW_BALL = TRUE, + .DOUBLE_TEAM = TRUE, + .REFLECT = TRUE, + .SHOCK_WAVE = TRUE, + .TORMENT = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .SKILL_SWAP = TRUE, + .SNATCH = TRUE, + .FLASH = TRUE, + } }, + + [SPECIES_KIRLIA] = { .learnset = { + .CALM_MIND = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .TAUNT = TRUE, + .LIGHT_SCREEN = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .SAFEGUARD = TRUE, + .FRUSTRATION = TRUE, + .THUNDERBOLT = TRUE, + .RETURN = TRUE, + .PSYCHIC = TRUE, + .SHADOW_BALL = TRUE, + .DOUBLE_TEAM = TRUE, + .REFLECT = TRUE, + .SHOCK_WAVE = TRUE, + .TORMENT = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .SKILL_SWAP = TRUE, + .SNATCH = TRUE, + .FLASH = TRUE, + } }, + + [SPECIES_GARDEVOIR] = { .learnset = { + .CALM_MIND = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .TAUNT = TRUE, + .HYPER_BEAM = TRUE, + .LIGHT_SCREEN = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .SAFEGUARD = TRUE, + .FRUSTRATION = TRUE, + .THUNDERBOLT = TRUE, + .RETURN = TRUE, + .PSYCHIC = TRUE, + .SHADOW_BALL = TRUE, + .DOUBLE_TEAM = TRUE, + .REFLECT = TRUE, + .SHOCK_WAVE = TRUE, + .TORMENT = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .SKILL_SWAP = TRUE, + .SNATCH = TRUE, + .FLASH = TRUE, + } }, + + [SPECIES_BAGON] = { .learnset = { + .DRAGON_CLAW = TRUE, + .ROAR = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .RETURN = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .FLAMETHROWER = TRUE, + .FIRE_BLAST = TRUE, + .ROCK_TOMB = TRUE, + .AERIAL_ACE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .CUT = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_SHELGON] = { .learnset = { + .DRAGON_CLAW = TRUE, + .ROAR = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .RETURN = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .FLAMETHROWER = TRUE, + .FIRE_BLAST = TRUE, + .ROCK_TOMB = TRUE, + .AERIAL_ACE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .CUT = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_SALAMENCE] = { .learnset = { + .DRAGON_CLAW = TRUE, + .ROAR = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .IRON_TAIL = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .FLAMETHROWER = TRUE, + .FIRE_BLAST = TRUE, + .ROCK_TOMB = TRUE, + .AERIAL_ACE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .STEEL_WING = TRUE, + .CUT = TRUE, + .FLY = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_BELDUM] = { .learnset = { + } }, + + [SPECIES_METANG] = { .learnset = { + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .HYPER_BEAM = TRUE, + .LIGHT_SCREEN = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .PSYCHIC = TRUE, + .SHADOW_BALL = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .REFLECT = TRUE, + .SLUDGE_BOMB = TRUE, + .SANDSTORM = TRUE, + .ROCK_TOMB = TRUE, + .AERIAL_ACE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .CUT = TRUE, + .STRENGTH = TRUE, + .FLASH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_METAGROSS] = { .learnset = { + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .HYPER_BEAM = TRUE, + .LIGHT_SCREEN = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .PSYCHIC = TRUE, + .SHADOW_BALL = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .REFLECT = TRUE, + .SLUDGE_BOMB = TRUE, + .SANDSTORM = TRUE, + .ROCK_TOMB = TRUE, + .AERIAL_ACE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .CUT = TRUE, + .STRENGTH = TRUE, + .FLASH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_REGIROCK] = { .learnset = { + .FOCUS_PUNCH = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .SAFEGUARD = TRUE, + .FRUSTRATION = TRUE, + .THUNDERBOLT = TRUE, + .THUNDER = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .SHOCK_WAVE = TRUE, + .SANDSTORM = TRUE, + .ROCK_TOMB = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_REGICE] = { .learnset = { + .FOCUS_PUNCH = TRUE, + .TOXIC = TRUE, + .HAIL = TRUE, + .HIDDEN_POWER = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .SAFEGUARD = TRUE, + .FRUSTRATION = TRUE, + .THUNDERBOLT = TRUE, + .THUNDER = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .SHOCK_WAVE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_REGISTEEL] = { .learnset = { + .FOCUS_PUNCH = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .SAFEGUARD = TRUE, + .FRUSTRATION = TRUE, + .THUNDERBOLT = TRUE, + .THUNDER = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .SHOCK_WAVE = TRUE, + .SANDSTORM = TRUE, + .ROCK_TOMB = TRUE, + .AERIAL_ACE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_KYOGRE] = { .learnset = { + .WATER_PULSE = TRUE, + .CALM_MIND = TRUE, + .ROAR = TRUE, + .TOXIC = TRUE, + .HAIL = TRUE, + .HIDDEN_POWER = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .SAFEGUARD = TRUE, + .FRUSTRATION = TRUE, + .THUNDERBOLT = TRUE, + .THUNDER = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .SHOCK_WAVE = TRUE, + .ROCK_TOMB = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .SURF = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + .WATERFALL = TRUE, + .DIVE = TRUE, + } }, + + [SPECIES_GROUDON] = { .learnset = { + .DRAGON_CLAW = TRUE, + .ROAR = TRUE, + .TOXIC = TRUE, + .BULK_UP = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .SAFEGUARD = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .IRON_TAIL = TRUE, + .THUNDERBOLT = TRUE, + .THUNDER = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .SHOCK_WAVE = TRUE, + .FLAMETHROWER = TRUE, + .SANDSTORM = TRUE, + .FIRE_BLAST = TRUE, + .ROCK_TOMB = TRUE, + .AERIAL_ACE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .OVERHEAT = TRUE, + .CUT = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_RAYQUAZA] = { .learnset = { + .DRAGON_CLAW = TRUE, + .WATER_PULSE = TRUE, + .ROAR = TRUE, + .TOXIC = TRUE, + .BULK_UP = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .IRON_TAIL = TRUE, + .THUNDERBOLT = TRUE, + .THUNDER = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .SHOCK_WAVE = TRUE, + .FLAMETHROWER = TRUE, + .SANDSTORM = TRUE, + .FIRE_BLAST = TRUE, + .AERIAL_ACE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .OVERHEAT = TRUE, + .FLY = TRUE, + .SURF = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + .WATERFALL = TRUE, + .DIVE = TRUE, + } }, + + [SPECIES_LATIAS] = { .learnset = { + .DRAGON_CLAW = TRUE, + .WATER_PULSE = TRUE, + .CALM_MIND = TRUE, + .ROAR = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .ICE_BEAM = TRUE, + .HYPER_BEAM = TRUE, + .LIGHT_SCREEN = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .SAFEGUARD = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .THUNDERBOLT = TRUE, + .THUNDER = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .PSYCHIC = TRUE, + .SHADOW_BALL = TRUE, + .DOUBLE_TEAM = TRUE, + .REFLECT = TRUE, + .SHOCK_WAVE = TRUE, + .SANDSTORM = TRUE, + .AERIAL_ACE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .STEEL_WING = TRUE, + .CUT = TRUE, + .FLY = TRUE, + .SURF = TRUE, + .FLASH = TRUE, + .WATERFALL = TRUE, + .DIVE = TRUE, + } }, + + [SPECIES_LATIOS] = { .learnset = { + .DRAGON_CLAW = TRUE, + .WATER_PULSE = TRUE, + .CALM_MIND = TRUE, + .ROAR = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .ICE_BEAM = TRUE, + .HYPER_BEAM = TRUE, + .LIGHT_SCREEN = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .SAFEGUARD = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .THUNDERBOLT = TRUE, + .THUNDER = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .PSYCHIC = TRUE, + .SHADOW_BALL = TRUE, + .DOUBLE_TEAM = TRUE, + .REFLECT = TRUE, + .SHOCK_WAVE = TRUE, + .SANDSTORM = TRUE, + .AERIAL_ACE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .STEEL_WING = TRUE, + .CUT = TRUE, + .FLY = TRUE, + .SURF = TRUE, + .FLASH = TRUE, + .WATERFALL = TRUE, + .DIVE = TRUE, + } }, + + [SPECIES_JIRACHI] = { .learnset = { + .WATER_PULSE = TRUE, + .CALM_MIND = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .HYPER_BEAM = TRUE, + .LIGHT_SCREEN = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .SAFEGUARD = TRUE, + .FRUSTRATION = TRUE, + .THUNDERBOLT = TRUE, + .THUNDER = TRUE, + .RETURN = TRUE, + .PSYCHIC = TRUE, + .SHADOW_BALL = TRUE, + .DOUBLE_TEAM = TRUE, + .REFLECT = TRUE, + .SHOCK_WAVE = TRUE, + .SANDSTORM = TRUE, + .AERIAL_ACE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .SKILL_SWAP = TRUE, + .FLASH = TRUE, + } }, + + [SPECIES_DEOXYS] = { .learnset = { + .FOCUS_PUNCH = TRUE, + .WATER_PULSE = TRUE, + .CALM_MIND = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .TAUNT = TRUE, + .ICE_BEAM = TRUE, + .HYPER_BEAM = TRUE, + .LIGHT_SCREEN = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .SAFEGUARD = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .THUNDERBOLT = TRUE, + .THUNDER = TRUE, + .RETURN = TRUE, + .PSYCHIC = TRUE, + .SHADOW_BALL = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .REFLECT = TRUE, + .SHOCK_WAVE = TRUE, + .ROCK_TOMB = TRUE, + .AERIAL_ACE = TRUE, + .TORMENT = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .SKILL_SWAP = TRUE, + .SNATCH = TRUE, + .CUT = TRUE, + .STRENGTH = TRUE, + .FLASH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_CHIMECHO] = { .learnset = { + .CALM_MIND = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .TAUNT = TRUE, + .LIGHT_SCREEN = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .SAFEGUARD = TRUE, + .FRUSTRATION = TRUE, + .RETURN = TRUE, + .PSYCHIC = TRUE, + .SHADOW_BALL = TRUE, + .DOUBLE_TEAM = TRUE, + .REFLECT = TRUE, + .SHOCK_WAVE = TRUE, + .TORMENT = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .SKILL_SWAP = TRUE, + .SNATCH = TRUE, + .FLASH = TRUE, + } }, }; diff --git a/src/daycare.c b/src/daycare.c index 40704df16b..289495bbc5 100644 --- a/src/daycare.c +++ b/src/daycare.c @@ -93,16 +93,14 @@ static const u8 sJapaneseEggNickname[] = _("タマゴ"); // "tamago" ("egg" in J u8 *GetMonNickname2(struct Pokemon *mon, u8 *dest) { - u8 nickname[POKEMON_NAME_LENGTH * 2]; - + u8 nickname[POKEMON_NAME_BUFFER_SIZE]; GetMonData(mon, MON_DATA_NICKNAME, nickname); return StringCopy_Nickname(dest, nickname); } u8 *GetBoxMonNickname(struct BoxPokemon *mon, u8 *dest) { - u8 nickname[POKEMON_NAME_LENGTH * 2]; - + u8 nickname[POKEMON_NAME_BUFFER_SIZE]; GetBoxMonData(mon, MON_DATA_NICKNAME, nickname); return StringCopy_Nickname(dest, nickname); } @@ -341,7 +339,7 @@ static void Debug_AddDaycareSteps(u16 numSteps) u8 GetNumLevelsGainedFromDaycare(void) { - if (GetBoxMonData(&gSaveBlock1Ptr->daycare.mons[gSpecialVar_0x8004], MON_DATA_SPECIES) != 0) + if (GetBoxMonData(&gSaveBlock1Ptr->daycare.mons[gSpecialVar_0x8004].mon, MON_DATA_SPECIES) != 0) return GetNumLevelsGainedForDaycareMon(&gSaveBlock1Ptr->daycare.mons[gSpecialVar_0x8004]); return 0; @@ -685,7 +683,7 @@ static void BuildEggMoveset(struct Pokemon *egg, struct BoxPokemon *father, stru { for (j = 0; j < NUM_TECHNICAL_MACHINES + NUM_HIDDEN_MACHINES; j++) { - if (sHatchedEggFatherMoves[i] == ItemIdToBattleMoveId(ITEM_TM01_FOCUS_PUNCH + j) && CanMonLearnTMHM(egg, j)) + if (sHatchedEggFatherMoves[i] == ItemIdToBattleMoveId(ITEM_TM01 + j) && CanMonLearnTMHM(egg, j)) { if (GiveMoveToMon(egg, sHatchedEggFatherMoves[i]) == MON_HAS_MAX_MOVES) DeleteFirstMoveAndGiveMoveToMon(egg, sHatchedEggFatherMoves[i]); @@ -946,12 +944,12 @@ static bool8 IsEggPending(struct DayCare *daycare) // gStringVar3 = first mon trainer's name static void _GetDaycareMonNicknames(struct DayCare *daycare) { - u8 text[12]; + u8 otName[max(12, PLAYER_NAME_LENGTH + 1)]; if (GetBoxMonData(&daycare->mons[0].mon, MON_DATA_SPECIES) != 0) { GetBoxMonNickname(&daycare->mons[0].mon, gStringVar1); - GetBoxMonData(&daycare->mons[0].mon, MON_DATA_OT_NAME, text); - StringCopy(gStringVar3, text); + GetBoxMonData(&daycare->mons[0].mon, MON_DATA_OT_NAME, otName); + StringCopy(gStringVar3, otName); } if (GetBoxMonData(&daycare->mons[1].mon, MON_DATA_SPECIES) != 0) @@ -1148,7 +1146,7 @@ static u8 *AppendMonGenderSymbol(u8 *name, struct BoxPokemon *boxMon) static void GetDaycareLevelMenuText(struct DayCare *daycare, u8 *dest) { - u8 monNames[DAYCARE_MON_COUNT][20]; + u8 monNames[DAYCARE_MON_COUNT][POKEMON_NAME_BUFFER_SIZE]; u8 i; *dest = EOS; @@ -1206,8 +1204,7 @@ static void DaycareAddTextPrinter(u8 windowId, const u8 *text, u32 x, u32 y) static void DaycarePrintMonNickname(struct DayCare *daycare, u8 windowId, u32 daycareSlotId, u32 y) { - u8 nickname[POKEMON_NAME_LENGTH * 2]; - + u8 nickname[POKEMON_NAME_BUFFER_SIZE]; GetBoxMonNickname(&daycare->mons[daycareSlotId].mon, nickname); AppendMonGenderSymbol(nickname, &daycare->mons[daycareSlotId].mon); DaycareAddTextPrinter(windowId, nickname, 8, y); diff --git a/src/decoration.c b/src/decoration.c index 9b29fdb01e..1e3db736da 100644 --- a/src/decoration.c +++ b/src/decoration.c @@ -422,7 +422,16 @@ static const u8 sDecorationSlideElevation[] = }; static const u16 sDecorShapeSizes[] = { - 0x04, 0x08, 0x10, 0x20, 0x10, 0x08, 0x10, 0x20, 0x40, 0x20 + [DECORSHAPE_1x1] = 4, + [DECORSHAPE_2x1] = 8, + [DECORSHAPE_3x1] = 16, + [DECORSHAPE_4x2] = 32, + [DECORSHAPE_2x2] = 16, + [DECORSHAPE_1x2] = 8, + [DECORSHAPE_1x3] = 16, + [DECORSHAPE_2x4] = 32, + [DECORSHAPE_3x3] = 64, + [DECORSHAPE_3x2] = 32, }; static const u16 sBrendanPalette[] = INCBIN_U16("graphics/decorations/brendan.gbapal"); @@ -688,7 +697,7 @@ static void ReturnToDecorationActionsAfterInvalidSelection(u8 taskId) static void SecretBasePC_PrepMenuForSelectingStoredDecors(u8 taskId) { - LoadPalette(sDecorationMenuPalette, BG_PLTT_ID(13), PLTT_SIZE_4BPP); + LoadPalette(sDecorationMenuPalette, BG_PLTT_ID(13), sizeof(sDecorationMenuPalette)); ClearDialogWindowAndFrame(0, FALSE); RemoveDecorationWindow(WINDOW_MAIN_MENU); InitDecorationCategoriesWindow(taskId); @@ -834,7 +843,7 @@ static void ReturnToActionsMenuFromCategories(u8 taskId) void ShowDecorationCategoriesWindow(u8 taskId) { - LoadPalette(sDecorationMenuPalette, BG_PLTT_ID(13), PLTT_SIZE_4BPP); + LoadPalette(sDecorationMenuPalette, BG_PLTT_ID(13), sizeof(sDecorationMenuPalette)); ClearDialogWindowAndFrame(0, FALSE); gTasks[taskId].tDecorationMenuCommand = DECOR_MENU_TRADE; sCurDecorationCategory = DECORCAT_DESK; @@ -1925,7 +1934,7 @@ static void CopyPalette(u16 *dest, u16 pal) static void CopyTile(u8 *dest, u16 tile) { - u8 buffer[TILE_SIZE_4BPP]; + u8 ALIGNED(4) buffer[TILE_SIZE_4BPP]; u16 mode; u16 i; diff --git a/src/dewford_trend.c b/src/dewford_trend.c index 08dd9afe0b..45c18f6013 100644 --- a/src/dewford_trend.c +++ b/src/dewford_trend.c @@ -224,7 +224,7 @@ static void SortTrends(struct DewfordTrend *trends, u16 numTrends, u8 mode) } #define SAVED_TRENDS_SIZE (sizeof(struct DewfordTrend) * SAVED_TRENDS_COUNT) -#define BUFFER_SIZE (SAVED_TRENDS_SIZE * MAX_LINK_PLAYERS > 0x100 ? SAVED_TRENDS_SIZE * MAX_LINK_PLAYERS : 0x100) // More space was allocated than needed +#define BUFFER_SIZE max(SAVED_TRENDS_SIZE * MAX_LINK_PLAYERS, 0x100) // More space was allocated than needed void ReceiveDewfordTrendData(struct DewfordTrend *linkedTrends, size_t size, u8 unused) { diff --git a/src/diploma.c b/src/diploma.c index 4f62644924..2a18867450 100644 --- a/src/diploma.c +++ b/src/diploma.c @@ -72,7 +72,7 @@ void CB2_ShowDiploma(void) ResetSpriteData(); ResetPaletteFade(); FreeAllSpritePalettes(); - LoadPalette(sDiplomaPalettes, BG_PLTT_ID(0), 2 * PLTT_SIZE_4BPP); + LoadPalette(sDiplomaPalettes, BG_PLTT_ID(0), sizeof(sDiplomaPalettes)); sDiplomaTilemapPtr = Alloc(0x1000); InitDiplomaBg(); InitDiplomaWindow(); diff --git a/src/dodrio_berry_picking.c b/src/dodrio_berry_picking.c index 8d47595c8b..1ba82c6d21 100644 --- a/src/dodrio_berry_picking.c +++ b/src/dodrio_berry_picking.c @@ -552,8 +552,8 @@ static const u8 sUnsharedColumns[MAX_RFU_PLAYERS][MAX_RFU_PLAYERS] = }; // Duplicate and unused gfx. Feel free to remove. -static const u32 sDuplicateGfx[] = INCBIN_U32("graphics/dodrio_berry_picking/bg.gbapal", - "graphics/dodrio_berry_picking/tree_border.gbapal", +static const u32 sDuplicateGfx[] = INCBIN_U32("graphics/dodrio_berry_picking/tree_border.gbapal", + "graphics/dodrio_berry_picking/bg.gbapal", "graphics/dodrio_berry_picking/dodrio.gbapal", "graphics/dodrio_berry_picking/shiny.gbapal", "graphics/dodrio_berry_picking/status.gbapal", @@ -3586,8 +3586,8 @@ static const u8 sUnsharedColumns_Duplicate[MAX_RFU_PLAYERS][MAX_RFU_PLAYERS] = {1, 3, 5, 6, 9}, }; -static const u16 sBg_Pal[] = INCBIN_U16("graphics/dodrio_berry_picking/bg.gbapal", - "graphics/dodrio_berry_picking/tree_border.gbapal"); +static const u16 sBg_Pal[] = INCBIN_U16("graphics/dodrio_berry_picking/tree_border.gbapal", + "graphics/dodrio_berry_picking/bg.gbapal"); static const u16 sDodrioNormal_Pal[] = INCBIN_U16("graphics/dodrio_berry_picking/dodrio.gbapal"); static const u16 sDodrioShiny_Pal[] = INCBIN_U16("graphics/dodrio_berry_picking/shiny.gbapal"); static const u16 sStatus_Pal[] = INCBIN_U16("graphics/dodrio_berry_picking/status.gbapal"); diff --git a/src/easy_chat.c b/src/easy_chat.c index 35ba633cf4..5c910dced1 100644 --- a/src/easy_chat.c +++ b/src/easy_chat.c @@ -3930,12 +3930,12 @@ static void LoadEasyChatPalettes(void) { ResetPaletteFade(); LoadPalette(gEasyChatMode_Pal, BG_PLTT_ID(0), PLTT_SIZE_4BPP); - LoadPalette(sTextInputFrameOrange_Pal, BG_PLTT_ID(1), PLTT_SIZE_4BPP); - LoadPalette(sTextInputFrameGreen_Pal, BG_PLTT_ID(4), PLTT_SIZE_4BPP); - LoadPalette(sTitleText_Pal, BG_PLTT_ID(10), PLTT_SIZEOF(4)); - LoadPalette(sText_Pal, BG_PLTT_ID(11), PLTT_SIZEOF(6)); - LoadPalette(sText_Pal, BG_PLTT_ID(15), PLTT_SIZEOF(6)); - LoadPalette(sText_Pal, BG_PLTT_ID(3), PLTT_SIZEOF(6)); + LoadPalette(sTextInputFrameOrange_Pal, BG_PLTT_ID(1), sizeof(sTextInputFrameOrange_Pal)); + LoadPalette(sTextInputFrameGreen_Pal, BG_PLTT_ID(4), sizeof(sTextInputFrameGreen_Pal)); + LoadPalette(sTitleText_Pal, BG_PLTT_ID(10), sizeof(sTitleText_Pal)); + LoadPalette(sText_Pal, BG_PLTT_ID(11), sizeof(sText_Pal)); + LoadPalette(sText_Pal, BG_PLTT_ID(15), sizeof(sText_Pal)); + LoadPalette(sText_Pal, BG_PLTT_ID(3), sizeof(sText_Pal)); } static void PrintTitle(void) diff --git a/src/egg_hatch.c b/src/egg_hatch.c index 96d431a226..e9d287cf72 100644 --- a/src/egg_hatch.c +++ b/src/egg_hatch.c @@ -399,7 +399,7 @@ void ScriptHatchMon(void) static bool8 _CheckDaycareMonReceivedMail(struct DayCare *daycare, u8 daycareId) { - u8 nickname[32]; + u8 nickname[max(32, POKEMON_NAME_BUFFER_SIZE)]; struct DaycareMon *daycareMon = &daycare->mons[daycareId]; GetBoxMonNickname(&daycareMon->mon, nickname); diff --git a/src/ereader_helpers.c b/src/ereader_helpers.c index 894ad00123..c5b8712b5c 100755 --- a/src/ereader_helpers.c +++ b/src/ereader_helpers.c @@ -753,11 +753,11 @@ void EReaderHelper_SerialCallback(void) switch (sSendRecvMgr.state) { case EREADER_XFR_STATE_HANDSHAKE: - REG_SIOMLT_SEND = 0xCCD0; // Handshake id + REG_SIOMLT_SEND = EREADER_HANDSHAKE; *(u64 *)recv = REG_SIOMLT_RECV; for (i = 0, cnt1 = 0, cnt2 = 0; i < 4; i++) { - if (recv[i] == 0xCCD0) + if (recv[i] == EREADER_HANDSHAKE) cnt1++; else if (recv[i] != 0xFFFF) cnt2++; diff --git a/src/event_data.c b/src/event_data.c index 561cd3edd8..5cf876a990 100644 --- a/src/event_data.c +++ b/src/event_data.c @@ -2,11 +2,6 @@ #include "event_data.h" #include "pokedex.h" -#define NUM_SPECIAL_FLAGS (SPECIAL_FLAGS_END - SPECIAL_FLAGS_START + 1) -#define NUM_TEMP_FLAGS (TEMP_FLAGS_END - TEMP_FLAGS_START + 1) -#define NUM_DAILY_FLAGS (DAILY_FLAGS_END - DAILY_FLAGS_START + 1) -#define NUM_TEMP_VARS (TEMP_VARS_END - TEMP_VARS_START + 1) - #define SPECIAL_FLAGS_SIZE (NUM_SPECIAL_FLAGS / 8) // 8 flags per byte #define TEMP_FLAGS_SIZE (NUM_TEMP_FLAGS / 8) #define DAILY_FLAGS_SIZE (NUM_DAILY_FLAGS / 8) @@ -43,8 +38,8 @@ void InitEventData(void) void ClearTempFieldEventData(void) { - memset(gSaveBlock1Ptr->flags + (TEMP_FLAGS_START / 8), 0, TEMP_FLAGS_SIZE); - memset(gSaveBlock1Ptr->vars + ((TEMP_VARS_START - VARS_START) * 2), 0, TEMP_VARS_SIZE); + memset(&gSaveBlock1Ptr->flags[TEMP_FLAGS_START / 8], 0, TEMP_FLAGS_SIZE); + memset(&gSaveBlock1Ptr->vars[TEMP_VARS_START - VARS_START], 0, TEMP_VARS_SIZE); FlagClear(FLAG_SYS_ENC_UP_ITEM); FlagClear(FLAG_SYS_ENC_DOWN_ITEM); FlagClear(FLAG_SYS_USE_STRENGTH); @@ -54,7 +49,7 @@ void ClearTempFieldEventData(void) void ClearDailyFlags(void) { - memset(gSaveBlock1Ptr->flags + (DAILY_FLAGS_START / 8), 0, DAILY_FLAGS_SIZE); + memset(&gSaveBlock1Ptr->flags[DAILY_FLAGS_START / 8], 0, DAILY_FLAGS_SIZE); } void DisableNationalPokedex(void) diff --git a/src/event_object_movement.c b/src/event_object_movement.c index a9fda786dc..7d358edcab 100644 --- a/src/event_object_movement.c +++ b/src/event_object_movement.c @@ -1858,8 +1858,8 @@ void UpdateFollowingPokemon(void) { // Update following pokemon if any u16 species; bool8 shiny; u8 form; - // Avoid spawning large (64x64) follower pokemon inside buildings - if (GetFollowerInfo(&species, &form, &shiny) && !(gMapHeader.mapType == MAP_TYPE_INDOOR && SpeciesToGraphicsInfo(species, 0)->height == 64) && !FlagGet(FLAG_TEMP_HIDE_FOLLOWER)) { + // Avoid spawning large (>32x32) follower pokemon inside buildings + if (GetFollowerInfo(&species, &form, &shiny) && !(gMapHeader.mapType == MAP_TYPE_INDOOR && SpeciesToGraphicsInfo(species, 0)->height > 32) && !FlagGet(FLAG_TEMP_HIDE_FOLLOWER)) { if (objEvent == NULL) { // Spawn follower struct ObjectEventTemplate template = { .localId = OBJ_EVENT_ID_FOLLOWER, @@ -6808,6 +6808,9 @@ bool8 MovementAction_EnterPokeball_Step1(struct ObjectEvent *objectEvent, struct LoadFillColorPalette(RGB_WHITE, OBJ_EVENT_PAL_TAG_WHITE, sprite); sprite->affineAnims = sAffineAnims_PokeballFollower; sprite->oam.affineMode = ST_OAM_AFFINE_NORMAL; + #if LARGE_OW_SUPPORT + sprite->subspriteTableNum = 1; + #endif InitSpriteAffineAnim(sprite); StartSpriteAffineAnim(sprite, sprite->data[6]); } else if (sprite->data[3] == 7) { // Free white palette and change to pokeball, disable affine @@ -8836,7 +8839,14 @@ static void UpdateObjectEventElevationAndPriority(struct ObjectEvent *objEvent, if (objEvent->fixedPriority) return; - ObjectEventUpdateElevation(objEvent); + ObjectEventUpdateElevation(objEvent, sprite); + #if LARGE_OW_SUPPORT + if (objEvent->localId == OBJ_EVENT_ID_FOLLOWER) { + // keep subspriteMode synced with player's + // so that it disappears under bridges when they do + sprite->subspriteMode |= gSprites[gPlayerAvatar.spriteId].subspriteMode & SUBSPRITES_IGNORE_PRIORITY; + } + #endif sprite->subspriteTableNum = sElevationToSubspriteTableNum[objEvent->previousElevation]; sprite->oam.priority = sElevationToPriority[objEvent->previousElevation]; @@ -8853,13 +8863,23 @@ u8 ElevationToPriority(u8 elevation) return sElevationToPriority[elevation]; } -void ObjectEventUpdateElevation(struct ObjectEvent *objEvent) +// Returns current elevation, or 15 for bridges +void ObjectEventUpdateElevation(struct ObjectEvent *objEvent, struct Sprite *sprite) { u8 curElevation = MapGridGetElevationAt(objEvent->currentCoords.x, objEvent->currentCoords.y); u8 prevElevation = MapGridGetElevationAt(objEvent->previousCoords.x, objEvent->previousCoords.y); - if (curElevation == 15 || prevElevation == 15) + if (curElevation == 15 || prevElevation == 15) { + #if LARGE_OW_SUPPORT + // Ignore subsprite priorities under bridges + // so all subsprites will display below it + sprite->subspriteMode = SUBSPRITES_IGNORE_PRIORITY; + #endif return; + } + #if LARGE_OW_SUPPORT + sprite->subspriteMode = SUBSPRITES_ON; + #endif objEvent->currentElevation = curElevation; diff --git a/src/evolution_graphics.c b/src/evolution_graphics.c index a86f16201f..96ff1b52df 100644 --- a/src/evolution_graphics.c +++ b/src/evolution_graphics.c @@ -409,7 +409,7 @@ static void Task_Sparkles_SprayAndFlash_Init(u8 taskId) { SetEvoSparklesMatrices(); gTasks[taskId].tTimer = 0; - CpuSet(&gPlttBufferFaded[0x20], &gPlttBufferUnfaded[0x20], 0x30); + CpuCopy16(&gPlttBufferFaded[BG_PLTT_ID(2)], &gPlttBufferUnfaded[BG_PLTT_ID(2)], 3 * PLTT_SIZE_4BPP); BeginNormalPaletteFade(0xFFF9041C, 0, 0, 0x10, RGB_WHITE); // was 0xFFF9001C in R/S gTasks[taskId].func = Task_Sparkles_SprayAndFlash; PlaySE(SE_M_PETAL_DANCE); @@ -458,7 +458,7 @@ static void Task_Sparkles_SprayAndFlashTrade_Init(u8 taskId) { SetEvoSparklesMatrices(); gTasks[taskId].tTimer = 0; - CpuSet(&gPlttBufferFaded[0x20], &gPlttBufferUnfaded[0x20], 0x30); + CpuCopy16(&gPlttBufferFaded[BG_PLTT_ID(2)], &gPlttBufferUnfaded[BG_PLTT_ID(2)], 3 * PLTT_SIZE_4BPP); BeginNormalPaletteFade(0xFFF90400, 0, 0, 0x10, RGB_WHITE); // was 0xFFFF0001 in R/S gTasks[taskId].func = Task_Sparkles_SprayAndFlashTrade; PlaySE(SE_M_PETAL_DANCE); @@ -536,13 +536,13 @@ u8 CycleEvolutionMonSprite(u8 preEvoSpriteId, u8 postEvoSpriteId) gSprites[preEvoSpriteId].oam.affineMode = ST_OAM_AFFINE_NORMAL; gSprites[preEvoSpriteId].oam.matrixNum = MATRIX_PRE_EVO; gSprites[preEvoSpriteId].invisible = FALSE; - CpuSet(monPalette, &gPlttBufferFaded[0x100 + (gSprites[preEvoSpriteId].oam.paletteNum * 16)], 16); + CpuSet(monPalette, &gPlttBufferFaded[OBJ_PLTT_ID(gSprites[preEvoSpriteId].oam.paletteNum)], 16); gSprites[postEvoSpriteId].callback = SpriteCB_EvolutionMonSprite; gSprites[postEvoSpriteId].oam.affineMode = ST_OAM_AFFINE_NORMAL; gSprites[postEvoSpriteId].oam.matrixNum = MATRIX_POST_EVO; gSprites[postEvoSpriteId].invisible = FALSE; - CpuSet(monPalette, &gPlttBufferFaded[0x100 + (gSprites[postEvoSpriteId].oam.paletteNum * 16)], 16); + CpuSet(monPalette, &gPlttBufferFaded[OBJ_PLTT_ID(gSprites[postEvoSpriteId].oam.paletteNum)], 16); gTasks[taskId].tEvoStopped = FALSE; return taskId; diff --git a/src/evolution_scene.c b/src/evolution_scene.c index eeb22edd24..dc19862616 100644 --- a/src/evolution_scene.c +++ b/src/evolution_scene.c @@ -208,7 +208,7 @@ void BeginEvolutionScene(struct Pokemon *mon, u16 postEvoSpecies, bool8 canStopE void EvolutionScene(struct Pokemon *mon, u16 postEvoSpecies, bool8 canStopEvo, u8 partyId) { - u8 name[20]; + u8 name[POKEMON_NAME_BUFFER_SIZE]; u16 currSpecies; u32 trainerId, personality; const struct CompressedSpritePalette* pokePal; @@ -298,7 +298,7 @@ void EvolutionScene(struct Pokemon *mon, u16 postEvoSpecies, bool8 canStopEvo, u gTasks[id].tEvoWasStopped = FALSE; gTasks[id].tPartyId = partyId; - memcpy(&sEvoStructPtr->savedPalette, &gPlttBufferUnfaded[0x20], sizeof(sEvoStructPtr->savedPalette)); + memcpy(&sEvoStructPtr->savedPalette, &gPlttBufferUnfaded[BG_PLTT_ID(2)], sizeof(sEvoStructPtr->savedPalette)); SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_OBJ_ON | DISPCNT_BG_ALL_ON | DISPCNT_OBJ_1D_MAP); @@ -467,7 +467,7 @@ static void CB2_TradeEvolutionSceneLoadGraphics(void) void TradeEvolutionScene(struct Pokemon *mon, u16 postEvoSpecies, u8 preEvoSpriteId, u8 partyId) { - u8 name[20]; + u8 name[POKEMON_NAME_BUFFER_SIZE]; u16 currSpecies; u32 trainerId, personality; const struct CompressedSpritePalette* pokePal; @@ -741,7 +741,7 @@ static void Task_EvolutionScene(u8 taskId) if (IsSEPlaying()) { m4aMPlayAllStop(); - memcpy(&gPlttBufferUnfaded[0x20], sEvoStructPtr->savedPalette, sizeof(sEvoStructPtr->savedPalette)); + memcpy(&gPlttBufferUnfaded[BG_PLTT_ID(2)], sEvoStructPtr->savedPalette, sizeof(sEvoStructPtr->savedPalette)); RestoreBgAfterAnim(); BeginNormalPaletteFade(0x1C, 0, 0x10, 0, RGB_BLACK); gTasks[taskId].tState++; @@ -775,8 +775,7 @@ static void Task_EvolutionScene(u8 taskId) var = MonTryLearningNewMove(mon, gTasks[taskId].tLearnsFirstMove); if (var != MOVE_NONE && !gTasks[taskId].tEvoWasStopped) { - u8 text[20]; - + u8 nickname[POKEMON_NAME_BUFFER_SIZE]; if (!(gTasks[taskId].tBits & TASK_BIT_LEARN_MOVE)) { StopMapMusic(); @@ -786,8 +785,8 @@ static void Task_EvolutionScene(u8 taskId) gTasks[taskId].tBits |= TASK_BIT_LEARN_MOVE; gTasks[taskId].tLearnsFirstMove = FALSE; gTasks[taskId].tLearnMoveState = MVSTATE_INTRO_MSG_1; - GetMonData(mon, MON_DATA_NICKNAME, text); - StringCopy_Nickname(gBattleTextBuff1, text); + GetMonData(mon, MON_DATA_NICKNAME, nickname); + StringCopy_Nickname(gBattleTextBuff1, nickname); if (var == MON_HAS_MAX_MOVES) gTasks[taskId].tState = EVOSTATE_REPLACE_MOVE; @@ -1170,7 +1169,7 @@ static void Task_TradeEvolutionScene(u8 taskId) // Restore bg, do mon anim/cry Free(sBgAnimPal); EvoScene_DoMonAnimAndCry(sEvoStructPtr->postEvoSpriteId, gTasks[taskId].tPostEvoSpecies); - memcpy(&gPlttBufferUnfaded[0x20], sEvoStructPtr->savedPalette, sizeof(sEvoStructPtr->savedPalette)); + memcpy(&gPlttBufferUnfaded[BG_PLTT_ID(2)], sEvoStructPtr->savedPalette, sizeof(sEvoStructPtr->savedPalette)); gTasks[taskId].tState++; } break; @@ -1195,13 +1194,12 @@ static void Task_TradeEvolutionScene(u8 taskId) var = MonTryLearningNewMove(mon, gTasks[taskId].tLearnsFirstMove); if (var != MOVE_NONE && !gTasks[taskId].tEvoWasStopped) { - u8 text[20]; - + u8 nickname[POKEMON_NAME_BUFFER_SIZE]; gTasks[taskId].tBits |= TASK_BIT_LEARN_MOVE; gTasks[taskId].tLearnsFirstMove = FALSE; gTasks[taskId].tLearnMoveState = 0; - GetMonData(mon, MON_DATA_NICKNAME, text); - StringCopy_Nickname(gBattleTextBuff1, text); + GetMonData(mon, MON_DATA_NICKNAME, nickname); + StringCopy_Nickname(gBattleTextBuff1, nickname); if (var == MON_HAS_MAX_MOVES) gTasks[taskId].tState = T_EVOSTATE_REPLACE_MOVE; diff --git a/src/field_effect.c b/src/field_effect.c index e10009ceef..3f3834c6b6 100644 --- a/src/field_effect.c +++ b/src/field_effect.c @@ -900,7 +900,8 @@ u8 CreateTrainerSprite(u8 trainerSpriteID, s16 x, s16 y, u8 subpriority, u8 *buf return CreateSprite(&spriteTemplate, x, y, subpriority); } -void LoadTrainerGfx_TrainerCard(u8 gender, u16 palOffset, u8 *dest) +// Unused +static void LoadTrainerGfx_TrainerCard(u8 gender, u16 palOffset, u8 *dest) { LZDecompressVram(gTrainerFrontPicTable[gender].data, dest); LoadCompressedPalette(gTrainerFrontPicPaletteTable[gender].data, palOffset, PLTT_SIZE_4BPP); @@ -1192,14 +1193,14 @@ static void PokeballGlowEffect_Flash1(struct Sprite *sprite) sprite->data[3]++; } phase = (sprite->sCounter + 3) & 3; - MultiplyInvertedPaletteRGBComponents((IndexOfSpritePaletteTag(FLDEFF_PAL_TAG_POKEBALL_GLOW) << 4) + 0x108, sPokeballGlowReds[phase], sPokeballGlowGreens[phase], sPokeballGlowBlues[phase]); + MultiplyInvertedPaletteRGBComponents(OBJ_PLTT_ID(IndexOfSpritePaletteTag(FLDEFF_PAL_TAG_POKEBALL_GLOW)) + 8, sPokeballGlowReds[phase], sPokeballGlowGreens[phase], sPokeballGlowBlues[phase]); phase = (sprite->sCounter + 2) & 3; - MultiplyInvertedPaletteRGBComponents((IndexOfSpritePaletteTag(FLDEFF_PAL_TAG_POKEBALL_GLOW) << 4) + 0x106, sPokeballGlowReds[phase], sPokeballGlowGreens[phase], sPokeballGlowBlues[phase]); + MultiplyInvertedPaletteRGBComponents(OBJ_PLTT_ID(IndexOfSpritePaletteTag(FLDEFF_PAL_TAG_POKEBALL_GLOW)) + 6, sPokeballGlowReds[phase], sPokeballGlowGreens[phase], sPokeballGlowBlues[phase]); phase = (sprite->sCounter + 1) & 3; - MultiplyInvertedPaletteRGBComponents((IndexOfSpritePaletteTag(FLDEFF_PAL_TAG_POKEBALL_GLOW) << 4) + 0x102, sPokeballGlowReds[phase], sPokeballGlowGreens[phase], sPokeballGlowBlues[phase]); + MultiplyInvertedPaletteRGBComponents(OBJ_PLTT_ID(IndexOfSpritePaletteTag(FLDEFF_PAL_TAG_POKEBALL_GLOW)) + 2, sPokeballGlowReds[phase], sPokeballGlowGreens[phase], sPokeballGlowBlues[phase]); phase = sprite->sCounter; - MultiplyInvertedPaletteRGBComponents((IndexOfSpritePaletteTag(FLDEFF_PAL_TAG_POKEBALL_GLOW) << 4) + 0x105, sPokeballGlowReds[phase], sPokeballGlowGreens[phase], sPokeballGlowBlues[phase]); - MultiplyInvertedPaletteRGBComponents((IndexOfSpritePaletteTag(FLDEFF_PAL_TAG_POKEBALL_GLOW) << 4) + 0x103, sPokeballGlowReds[phase], sPokeballGlowGreens[phase], sPokeballGlowBlues[phase]); + MultiplyInvertedPaletteRGBComponents(OBJ_PLTT_ID(IndexOfSpritePaletteTag(FLDEFF_PAL_TAG_POKEBALL_GLOW)) + 5, sPokeballGlowReds[phase], sPokeballGlowGreens[phase], sPokeballGlowBlues[phase]); + MultiplyInvertedPaletteRGBComponents(OBJ_PLTT_ID(IndexOfSpritePaletteTag(FLDEFF_PAL_TAG_POKEBALL_GLOW)) + 3, sPokeballGlowReds[phase], sPokeballGlowGreens[phase], sPokeballGlowBlues[phase]); if (sprite->data[3] > 2) { sprite->sState++; @@ -1223,19 +1224,17 @@ static void PokeballGlowEffect_Flash2(struct Sprite *sprite) } } phase = sprite->sCounter; - MultiplyInvertedPaletteRGBComponents((IndexOfSpritePaletteTag(FLDEFF_PAL_TAG_POKEBALL_GLOW) << 4) + 0x108, sPokeballGlowReds[phase], sPokeballGlowGreens[phase], sPokeballGlowBlues[phase]); - MultiplyInvertedPaletteRGBComponents((IndexOfSpritePaletteTag(FLDEFF_PAL_TAG_POKEBALL_GLOW) << 4) + 0x106, sPokeballGlowReds[phase], sPokeballGlowGreens[phase], sPokeballGlowBlues[phase]); - MultiplyInvertedPaletteRGBComponents((IndexOfSpritePaletteTag(FLDEFF_PAL_TAG_POKEBALL_GLOW) << 4) + 0x102, sPokeballGlowReds[phase], sPokeballGlowGreens[phase], sPokeballGlowBlues[phase]); - MultiplyInvertedPaletteRGBComponents((IndexOfSpritePaletteTag(FLDEFF_PAL_TAG_POKEBALL_GLOW) << 4) + 0x105, sPokeballGlowReds[phase], sPokeballGlowGreens[phase], sPokeballGlowBlues[phase]); - MultiplyInvertedPaletteRGBComponents((IndexOfSpritePaletteTag(FLDEFF_PAL_TAG_POKEBALL_GLOW) << 4) + 0x103, sPokeballGlowReds[phase], sPokeballGlowGreens[phase], sPokeballGlowBlues[phase]); + MultiplyInvertedPaletteRGBComponents(OBJ_PLTT_ID(IndexOfSpritePaletteTag(FLDEFF_PAL_TAG_POKEBALL_GLOW)) + 8, sPokeballGlowReds[phase], sPokeballGlowGreens[phase], sPokeballGlowBlues[phase]); + MultiplyInvertedPaletteRGBComponents(OBJ_PLTT_ID(IndexOfSpritePaletteTag(FLDEFF_PAL_TAG_POKEBALL_GLOW)) + 6, sPokeballGlowReds[phase], sPokeballGlowGreens[phase], sPokeballGlowBlues[phase]); + MultiplyInvertedPaletteRGBComponents(OBJ_PLTT_ID(IndexOfSpritePaletteTag(FLDEFF_PAL_TAG_POKEBALL_GLOW)) + 2, sPokeballGlowReds[phase], sPokeballGlowGreens[phase], sPokeballGlowBlues[phase]); + MultiplyInvertedPaletteRGBComponents(OBJ_PLTT_ID(IndexOfSpritePaletteTag(FLDEFF_PAL_TAG_POKEBALL_GLOW)) + 5, sPokeballGlowReds[phase], sPokeballGlowGreens[phase], sPokeballGlowBlues[phase]); + MultiplyInvertedPaletteRGBComponents(OBJ_PLTT_ID(IndexOfSpritePaletteTag(FLDEFF_PAL_TAG_POKEBALL_GLOW)) + 3, sPokeballGlowReds[phase], sPokeballGlowGreens[phase], sPokeballGlowBlues[phase]); } static void PokeballGlowEffect_WaitAfterFlash(struct Sprite *sprite) { if ((--sprite->sTimer) == 0) - { sprite->sState++; - } } static void PokeballGlowEffect_Dummy(struct Sprite *sprite) @@ -2433,7 +2432,7 @@ static void TeleportWarpOutFieldEffect_SpinExit(struct Task *task) { sprite->subspriteMode = SUBSPRITES_IGNORE_PRIORITY; } - if (task->data[4] >= 0xa8) + if (task->data[4] >= DISPLAY_HEIGHT + 8) { task->tState++; TryFadeOutOldMapMusic(); diff --git a/src/field_effect_helpers.c b/src/field_effect_helpers.c index 968cc3c789..3d4f0ce6bd 100755 --- a/src/field_effect_helpers.c +++ b/src/field_effect_helpers.c @@ -331,7 +331,11 @@ u32 FldEff_Shadow(void) gSprites[spriteId].data[0] = gFieldEffectArguments[0]; gSprites[spriteId].data[1] = gFieldEffectArguments[1]; gSprites[spriteId].data[2] = gFieldEffectArguments[2]; + #if LARGE_OW_SUPPORT + gSprites[spriteId].data[3] = gShadowVerticalOffsets[graphicsInfo->shadowSize]; + #else gSprites[spriteId].data[3] = (graphicsInfo->height >> 1) - gShadowVerticalOffsets[graphicsInfo->shadowSize]; + #endif } return 0; } @@ -352,7 +356,12 @@ void UpdateShadowFieldEffect(struct Sprite *sprite) linkedSprite = &gSprites[objectEvent->spriteId]; sprite->oam.priority = linkedSprite->oam.priority; sprite->x = linkedSprite->x; + #if LARGE_OW_SUPPORT + // Read 'live' size from linked sprite + sprite->y = linkedSprite->y - linkedSprite->centerToCornerVecY - sprite->data[3]; + #else sprite->y = linkedSprite->y + sprite->data[3]; + #endif sprite->invisible = linkedSprite->invisible; if (!objectEvent->active || !objectEvent->hasShadow || MetatileBehavior_IsPokeGrass(objectEvent->currentMetatileBehavior) diff --git a/src/field_special_scene.c b/src/field_special_scene.c index 7c98703c6b..a2b3d6366f 100644 --- a/src/field_special_scene.c +++ b/src/field_special_scene.c @@ -264,7 +264,7 @@ void ExecuteTruckSequence(void) MapGridSetMetatileIdAt(4 + MAP_OFFSET, 3 + MAP_OFFSET, METATILE_InsideOfTruck_DoorClosedFloor_Bottom); DrawWholeMapView(); LockPlayerFieldControls(); - CpuFastFill(0, gPlttBufferFaded, 0x400); + CpuFastFill(0, gPlttBufferFaded, PLTT_SIZE); CreateTask(Task_HandleTruckSequence, 0xA); } diff --git a/src/field_specials.c b/src/field_specials.c index 24208677c9..053aa395c9 100644 --- a/src/field_specials.c +++ b/src/field_specials.c @@ -57,7 +57,6 @@ #include "constants/heal_locations.h" #include "constants/map_types.h" #include "constants/mystery_gift.h" -#include "constants/script_menu.h" #include "constants/slot_machine.h" #include "constants/songs.h" #include "constants/moves.h" @@ -3194,8 +3193,8 @@ void GetBattleFrontierTutorMoveIndex(void) u16 moveIndex = 0; gSpecialVar_0x8005 = 0; - moveTutor = VarGet(VAR_TEMP_E); - moveIndex = VarGet(VAR_TEMP_D); + moveTutor = VarGet(VAR_TEMP_FRONTIER_TUTOR_ID); + moveIndex = VarGet(VAR_TEMP_FRONTIER_TUTOR_SELECTION); if (moveTutor != 0) { @@ -3261,6 +3260,7 @@ void ScrollableMultichoice_ClosePersistentMenu(void) #undef tTaskId #define DEOXYS_ROCK_LEVELS 11 +#define ROCK_PAL_ID 10 void DoDeoxysRockInteraction(void) { @@ -3340,7 +3340,7 @@ static void Task_DeoxysRockInteraction(u8 taskId) static void ChangeDeoxysRockLevel(u8 rockLevel) { u8 objectEventId; - LoadPalette(&sDeoxysRockPalettes[rockLevel], OBJ_PLTT_ID(10), PLTT_SIZEOF(4)); + LoadPalette(&sDeoxysRockPalettes[rockLevel], OBJ_PLTT_ID(ROCK_PAL_ID), PLTT_SIZEOF(4)); TryGetObjectEventIdByLocalIdAndMap(LOCALID_BIRTH_ISLAND_EXTERIOR_ROCK, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, &objectEventId); if (rockLevel == 0) @@ -3377,21 +3377,20 @@ static void WaitForDeoxysRockMovement(u8 taskId) void IncrementBirthIslandRockStepCount(void) { - u16 var = VarGet(VAR_DEOXYS_ROCK_STEP_COUNT); + u16 stepCount = VarGet(VAR_DEOXYS_ROCK_STEP_COUNT); if (gSaveBlock1Ptr->location.mapNum == MAP_NUM(BIRTH_ISLAND_EXTERIOR) && gSaveBlock1Ptr->location.mapGroup == MAP_GROUP(BIRTH_ISLAND_EXTERIOR)) { - var++; - if (var > 99) + if (++stepCount > 99) VarSet(VAR_DEOXYS_ROCK_STEP_COUNT, 0); else - VarSet(VAR_DEOXYS_ROCK_STEP_COUNT, var); + VarSet(VAR_DEOXYS_ROCK_STEP_COUNT, stepCount); } } void SetDeoxysRockPalette(void) { - LoadPalette(&sDeoxysRockPalettes[(u8)VarGet(VAR_DEOXYS_ROCK_LEVEL)], OBJ_PLTT_ID(10), PLTT_SIZEOF(4)); - BlendPalettes(0x04000000, 16, 0); + LoadPalette(&sDeoxysRockPalettes[(u8)VarGet(VAR_DEOXYS_ROCK_LEVEL)], OBJ_PLTT_ID(ROCK_PAL_ID), PLTT_SIZEOF(4)); + BlendPalettes(1 << (ROCK_PAL_ID + 16), 16, 0); } void SetPCBoxToSendMon(u8 boxId) @@ -3958,16 +3957,15 @@ bool8 InPokemonCenter(void) #define FANCLUB_BITFIELD (gSaveBlock1Ptr->vars[VAR_FANCLUB_FAN_COUNTER - VARS_START]) #define FANCLUB_COUNTER 0x007F -#define FANCLUB_FAN_FLAGS 0xFF80 #define GET_TRAINER_FAN_CLUB_FLAG(flag) (FANCLUB_BITFIELD >> (flag) & 1) #define SET_TRAINER_FAN_CLUB_FLAG(flag) (FANCLUB_BITFIELD |= 1 << (flag)) #define FLIP_TRAINER_FAN_CLUB_FLAG(flag)(FANCLUB_BITFIELD ^= 1 << (flag)) #define GET_TRAINER_FAN_CLUB_COUNTER (FANCLUB_BITFIELD & FANCLUB_COUNTER) -#define SET_TRAINER_FAN_CLUB_COUNTER(count) (FANCLUB_BITFIELD = (FANCLUB_BITFIELD & FANCLUB_FAN_FLAGS) | (count)) +#define SET_TRAINER_FAN_CLUB_COUNTER(count) (FANCLUB_BITFIELD = (FANCLUB_BITFIELD & ~FANCLUB_COUNTER) | (count)) #define INCR_TRAINER_FAN_CLUB_COUNTER(count)(FANCLUB_BITFIELD += (count)) -#define CLEAR_TRAINER_FAN_CLUB_COUNTER (FANCLUB_BITFIELD &= ~(FANCLUB_COUNTER)) +#define CLEAR_TRAINER_FAN_CLUB_COUNTER (FANCLUB_BITFIELD &= ~FANCLUB_COUNTER) void ResetFanClub(void) { diff --git a/src/field_tasks.c b/src/field_tasks.c index dec5cba800..8683301f26 100644 --- a/src/field_tasks.c +++ b/src/field_tasks.c @@ -100,6 +100,9 @@ static const struct PacifidlogMetatileOffsets sFloatingBridgeMetatileOffsets[] = }; // Each element corresponds to a y coordinate row in the sootopolis gym 1F map. +// The rows with ice each have a temp var used to track the ice steps. Each bit in the var +// represents whether ice at that x coordinate (starting from the left edge) has been visited. +// This method of tracking steps will break if the ice puzzle is more than 16 map spaces wide. static const u16 sSootopolisGymIceRowVars[] = { 0, diff --git a/src/field_weather.c b/src/field_weather.c index c3db066f85..5bde42edaa 100644 --- a/src/field_weather.c +++ b/src/field_weather.c @@ -61,7 +61,7 @@ static void None_Main(void); static u8 None_Finish(void); EWRAM_DATA struct Weather gWeather = {0}; -EWRAM_DATA static u8 sFieldEffectPaletteColorMapTypes[32] = {0}; +EWRAM_DATA static u8 ALIGNED(2) sFieldEffectPaletteColorMapTypes[32] = {0}; static const u8 *sPaletteColorMapTypes; @@ -111,7 +111,7 @@ void (*const gWeatherPalStateFuncs[])(void) = // This table specifies which of the color maps should be // applied to each of the background and sprite palettes. -static const u8 sBasePaletteColorMapTypes[32] = +static const u8 ALIGNED(2) sBasePaletteColorMapTypes[32] = { // background palettes COLOR_MAP_DARK_CONTRAST, @@ -149,14 +149,14 @@ static const u8 sBasePaletteColorMapTypes[32] = COLOR_MAP_DARK_CONTRAST, }; -const u16 gFogPalette[] = INCBIN_U16("graphics/weather/fog.gbapal"); +const u16 ALIGNED(4) gFogPalette[] = INCBIN_U16("graphics/weather/fog.gbapal"); void StartWeather(void) { if (!FuncIsActiveTask(Task_WeatherMain)) { u8 index = AllocSpritePalette(PALTAG_WEATHER); - CpuCopy32(gFogPalette, &gPlttBufferUnfaded[0x100 + index * 16], 32); + CpuCopy32(gFogPalette, &gPlttBufferUnfaded[OBJ_PLTT_ID(index)], PLTT_SIZE_4BPP); BuildColorMaps(); gWeatherPtr->contrastColorMapSpritePalIndex = index; gWeatherPtr->weatherPicSpritePalIndex = AllocSpritePalette(PALTAG_WEATHER_2); @@ -472,7 +472,7 @@ static void ApplyColorMap(u8 startPalIndex, u8 numPalettes, s8 colorMapIndex) if (colorMapIndex > 0) { colorMapIndex--; - palOffset = startPalIndex * 16; + palOffset = PLTT_ID(startPalIndex); numPalettes += startPalIndex; curPalIndex = startPalIndex; @@ -482,7 +482,7 @@ static void ApplyColorMap(u8 startPalIndex, u8 numPalettes, s8 colorMapIndex) if (sPaletteColorMapTypes[curPalIndex] == COLOR_MAP_NONE) { // No palette change. - CpuFastCopy(gPlttBufferUnfaded + palOffset, gPlttBufferFaded + palOffset, 16 * sizeof(u16)); + CpuFastCopy(&gPlttBufferUnfaded[palOffset], &gPlttBufferFaded[palOffset], PLTT_SIZE_4BPP); palOffset += 16; } else @@ -512,7 +512,7 @@ static void ApplyColorMap(u8 startPalIndex, u8 numPalettes, s8 colorMapIndex) { // A negative gammIndex value means that the blending will come from the special Drought weather's palette tables. colorMapIndex = -colorMapIndex - 1; - palOffset = startPalIndex * 16; + palOffset = PLTT_ID(startPalIndex); numPalettes += startPalIndex; curPalIndex = startPalIndex; @@ -521,7 +521,7 @@ static void ApplyColorMap(u8 startPalIndex, u8 numPalettes, s8 colorMapIndex) if (sPaletteColorMapTypes[curPalIndex] == COLOR_MAP_NONE) { // No palette change. - CpuFastCopy(gPlttBufferUnfaded + palOffset, gPlttBufferFaded + palOffset, 16 * sizeof(u16)); + CpuFastCopy(&gPlttBufferUnfaded[palOffset], &gPlttBufferFaded[palOffset], PLTT_SIZE_4BPP); palOffset += 16; } else @@ -539,7 +539,7 @@ static void ApplyColorMap(u8 startPalIndex, u8 numPalettes, s8 colorMapIndex) else { // No palette blending. - CpuFastCopy(gPlttBufferUnfaded + startPalIndex * 16, gPlttBufferFaded + startPalIndex * 16, numPalettes * 16 * sizeof(u16)); + CpuFastCopy(&gPlttBufferUnfaded[PLTT_ID(startPalIndex)], &gPlttBufferFaded[PLTT_ID(startPalIndex)], numPalettes * PLTT_SIZE_4BPP); } } @@ -553,7 +553,7 @@ static void ApplyColorMapWithBlend(u8 startPalIndex, u8 numPalettes, s8 colorMap u8 gBlend = color.g; u8 bBlend = color.b; - palOffset = BG_PLTT_ID(startPalIndex); + palOffset = PLTT_ID(startPalIndex); numPalettes += startPalIndex; colorMapIndex--; curPalIndex = startPalIndex; @@ -667,8 +667,8 @@ static void ApplyFogBlend(u8 blendCoeff, u16 blendColor) { if (LightenSpritePaletteInFog(curPalIndex)) { - u16 palEnd = (curPalIndex + 1) * 16; - u16 palOffset = curPalIndex * 16; + u16 palEnd = PLTT_ID(curPalIndex + 1); + u16 palOffset = PLTT_ID(curPalIndex); while (palOffset < palEnd) { @@ -787,7 +787,7 @@ void FadeScreen(u8 mode, s8 delay) if (fadeOut) { if (useWeatherPal) - CpuFastCopy(gPlttBufferFaded, gPlttBufferUnfaded, PLTT_BUFFER_SIZE * 2); + CpuFastCopy(gPlttBufferFaded, gPlttBufferUnfaded, PLTT_SIZE); BeginNormalPaletteFade(PALETTES_ALL, delay, 0, 16, fadeColor); gWeatherPtr->palProcessingState = WEATHER_PAL_STATE_SCREEN_FADING_OUT; @@ -825,14 +825,14 @@ void UpdateSpritePaletteWithWeather(u8 spritePaletteIndex) { if (gWeatherPtr->currWeather == WEATHER_FOG_HORIZONTAL) MarkFogSpritePalToLighten(paletteIndex); - paletteIndex *= 16; + paletteIndex = PLTT_ID(paletteIndex); for (i = 0; i < 16; i++) gPlttBufferFaded[paletteIndex + i] = gWeatherPtr->fadeDestColor; } break; case WEATHER_PAL_STATE_SCREEN_FADING_OUT: paletteIndex = PLTT_ID(paletteIndex); - CpuFastCopy(gPlttBufferFaded + paletteIndex, gPlttBufferUnfaded + paletteIndex, PLTT_SIZE_4BPP); + CpuFastCopy(&gPlttBufferFaded[paletteIndex], &gPlttBufferUnfaded[paletteIndex], PLTT_SIZE_4BPP); BlendPalette(paletteIndex, 16, gPaletteFade.y, gPaletteFade.blendColor); break; // WEATHER_PAL_STATE_CHANGING_WEATHER diff --git a/src/fieldmap.c b/src/fieldmap.c index df4db47b53..9534255c78 100644 --- a/src/fieldmap.c +++ b/src/fieldmap.c @@ -25,7 +25,7 @@ struct ConnectionFlags u8 east:1; }; -EWRAM_DATA static u16 sBackupMapData[MAX_MAP_DATA_SIZE] = {0}; +EWRAM_DATA static u16 ALIGNED(4) sBackupMapData[MAX_MAP_DATA_SIZE] = {0}; EWRAM_DATA struct MapHeader gMapHeader = {0}; EWRAM_DATA struct Camera gCamera = {0}; EWRAM_DATA static struct ConnectionFlags sMapConnectionFlags = {0}; @@ -871,7 +871,7 @@ static void ApplyGlobalTintToPaletteSlot(u8 slot, u8 count) } -void LoadTilesetPalette(struct Tileset const *tileset, u16 destOffset, u16 size) +static void LoadTilesetPalette(struct Tileset const *tileset, u16 destOffset, u16 size) { u16 black = RGB_BLACK; diff --git a/src/fldeff_flash.c b/src/fldeff_flash.c index 87d0117410..5c7d23b5ac 100644 --- a/src/fldeff_flash.c +++ b/src/fldeff_flash.c @@ -270,7 +270,7 @@ static void Task_ExitCaveTransition4(u8 taskId) if (count < 8) { gTasks[taskId].data[2]++; - LoadPalette(&sCaveTransitionPalette_Exit[count], BG_PLTT_ID(14), PLTT_SIZEOF(8) - PLTT_SIZEOF(count)); + LoadPalette(&sCaveTransitionPalette_Exit[count], BG_PLTT_ID(14), sizeof(sCaveTransitionPalette_Exit) - PLTT_SIZEOF(count)); } else { diff --git a/src/fldeff_sweetscent.c b/src/fldeff_sweetscent.c index 7e93526094..dd979c77a8 100644 --- a/src/fldeff_sweetscent.c +++ b/src/fldeff_sweetscent.c @@ -52,8 +52,8 @@ static void StartSweetScentFieldEffect(void) u8 taskId; PlaySE(SE_M_SWEET_SCENT); - CpuFastSet(gPlttBufferUnfaded, gPaletteDecompressionBuffer, 0x100); - CpuFastSet(gPlttBufferFaded, gPlttBufferUnfaded, 0x100); + CpuFastCopy(gPlttBufferUnfaded, gPaletteDecompressionBuffer, PLTT_SIZE); + CpuFastCopy(gPlttBufferFaded, gPlttBufferUnfaded, PLTT_SIZE); BeginNormalPaletteFade(~(1 << (gSprites[GetPlayerAvatarSpriteId()].oam.paletteNum + 16)), 4, 0, 8, RGB_RED); taskId = CreateTask(TrySweetScentEncounter, 0); gTasks[taskId].data[0] = 0; @@ -91,7 +91,7 @@ static void FailSweetScentEncounter(u8 taskId) { if (!gPaletteFade.active) { - CpuFastSet(gPaletteDecompressionBuffer, gPlttBufferUnfaded, 0x100); + CpuFastCopy(gPaletteDecompressionBuffer, gPlttBufferUnfaded, PLTT_SIZE); SetWeatherPalStateIdle(); ScriptContext_SetupScript(EventScript_FailSweetScent); DestroyTask(taskId); diff --git a/src/frontier_util.c b/src/frontier_util.c index 8cd385e653..08b0e68d2e 100644 --- a/src/frontier_util.c +++ b/src/frontier_util.c @@ -698,8 +698,8 @@ static const u8 *const sRecordsWindowChallengeTexts[][2] = static const u8 *const sLevelModeText[] = { - gText_RecordsLv50, - gText_RecordsOpenLevel, + [FRONTIER_LVL_50] = gText_RecordsLv50, + [FRONTIER_LVL_OPEN] = gText_RecordsOpenLevel, }; static const u8 *const sHallFacilityToRecordsText[] = @@ -789,28 +789,28 @@ void CallFrontierUtilFunc(void) sFrontierUtilFuncs[gSpecialVar_0x8004](); } -// Buffers into VAR_TEMP_0 specifically because this is used to react to the status in OnFrame map scripts +// VAR_TEMP_CHALLENGE_STATUS is used to react to the status in OnFrame map scripts static void GetChallengeStatus(void) { - VarSet(VAR_TEMP_0, 0xFF); + VarSet(VAR_TEMP_CHALLENGE_STATUS, 0xFF); switch (gSaveBlock2Ptr->frontier.challengeStatus) { case 0: break; case CHALLENGE_STATUS_SAVING: FrontierGamblerSetWonOrLost(FALSE); - VarSet(VAR_TEMP_0, gSaveBlock2Ptr->frontier.challengeStatus); + VarSet(VAR_TEMP_CHALLENGE_STATUS, gSaveBlock2Ptr->frontier.challengeStatus); break; case CHALLENGE_STATUS_LOST: FrontierGamblerSetWonOrLost(FALSE); - VarSet(VAR_TEMP_0, gSaveBlock2Ptr->frontier.challengeStatus); + VarSet(VAR_TEMP_CHALLENGE_STATUS, gSaveBlock2Ptr->frontier.challengeStatus); break; case CHALLENGE_STATUS_WON: FrontierGamblerSetWonOrLost(TRUE); - VarSet(VAR_TEMP_0, gSaveBlock2Ptr->frontier.challengeStatus); + VarSet(VAR_TEMP_CHALLENGE_STATUS, gSaveBlock2Ptr->frontier.challengeStatus); break; case CHALLENGE_STATUS_PAUSED: - VarSet(VAR_TEMP_0, gSaveBlock2Ptr->frontier.challengeStatus); + VarSet(VAR_TEMP_CHALLENGE_STATUS, gSaveBlock2Ptr->frontier.challengeStatus); break; } } diff --git a/src/graphics.c b/src/graphics.c index e8f891d8b2..7c327c4451 100644 --- a/src/graphics.c +++ b/src/graphics.c @@ -865,18 +865,17 @@ const u32 gBattleAnimSpritePal_PinkCloud[] = INCBIN_U32("graphics/battle_anims/s const u32 gBattleAnimSpriteGfx_SweatDrop[] = INCBIN_U32("graphics/battle_anims/sprites/sweat_drop.4bpp.lz"); const u32 gBattleAnimSpritePal_SweatDrop[] = INCBIN_U32("graphics/battle_anims/sprites/sweat_drop.gbapal.lz"); -const u32 gBattleStatMask_Gfx[] = INCBIN_U32("graphics/battle_anims/masks/stat.4bpp.lz"); -const u32 gBattleStatMask1_Tilemap[] = INCBIN_U32("graphics/battle_anims/masks/stat_tilemap_1.bin.lz"); -const u32 gBattleStatMask2_Tilemap[] = INCBIN_U32("graphics/battle_anims/masks/stat_tilemap_2.bin.lz"); - -const u32 gBattleStatMask1_Pal[] = INCBIN_U32("graphics/battle_anims/masks/stat1.gbapal.lz"); -const u32 gBattleStatMask2_Pal[] = INCBIN_U32("graphics/battle_anims/masks/stat2.gbapal.lz"); -const u32 gBattleStatMask3_Pal[] = INCBIN_U32("graphics/battle_anims/masks/stat3.gbapal.lz"); -const u32 gBattleStatMask4_Pal[] = INCBIN_U32("graphics/battle_anims/masks/stat4.gbapal.lz"); -const u32 gBattleStatMask5_Pal[] = INCBIN_U32("graphics/battle_anims/masks/stat5.gbapal.lz"); -const u32 gBattleStatMask6_Pal[] = INCBIN_U32("graphics/battle_anims/masks/stat6.gbapal.lz"); -const u32 gBattleStatMask7_Pal[] = INCBIN_U32("graphics/battle_anims/masks/stat7.gbapal.lz"); -const u32 gBattleStatMask8_Pal[] = INCBIN_U32("graphics/battle_anims/masks/stat8.gbapal.lz"); +const u32 gStatAnim_Gfx[] = INCBIN_U32("graphics/battle_anims/stat_change/tiles.4bpp.lz"); +const u32 gStatAnim_Increase_Tilemap[] = INCBIN_U32("graphics/battle_anims/stat_change/increase.bin.lz"); +const u32 gStatAnim_Decrease_Tilemap[] = INCBIN_U32("graphics/battle_anims/stat_change/decrease.bin.lz"); +const u32 gStatAnim_Defense_Pal[] = INCBIN_U32("graphics/battle_anims/stat_change/defense.gbapal.lz"); +const u32 gStatAnim_Attack_Pal[] = INCBIN_U32("graphics/battle_anims/stat_change/attack.gbapal.lz"); +const u32 gStatAnim_Accuracy_Pal[] = INCBIN_U32("graphics/battle_anims/stat_change/accuracy.gbapal.lz"); +const u32 gStatAnim_Speed_Pal[] = INCBIN_U32("graphics/battle_anims/stat_change/speed.gbapal.lz"); +const u32 gStatAnim_Multiple_Pal[] = INCBIN_U32("graphics/battle_anims/stat_change/multiple.gbapal.lz"); +const u32 gStatAnim_Evasion_Pal[] = INCBIN_U32("graphics/battle_anims/stat_change/evasion.gbapal.lz"); +const u32 gStatAnim_SpAttack_Pal[] = INCBIN_U32("graphics/battle_anims/stat_change/sp_attack.gbapal.lz"); +const u32 gStatAnim_SpDefense_Pal[] = INCBIN_U32("graphics/battle_anims/stat_change/sp_defense.gbapal.lz"); const u32 gCureBubblesGfx[] = INCBIN_U32("graphics/battle_anims/masks/cure_bubbles.4bpp.lz"); const u32 gCureBubblesPal[] = INCBIN_U32("graphics/battle_anims/masks/cure_bubbles.gbapal.lz"); @@ -955,7 +954,7 @@ const u32 gDomeTourneyInfoCard_Gfx[] = INCBIN_U32("graphics/battle_frontier/tour const u32 gDomeTourneyInfoCard_Tilemap[] = INCBIN_U32("graphics/battle_frontier/tourney_info_card_tilemap.bin.lz"); const u32 gDomeTourneyInfoCardBg_Tilemap[] = INCBIN_U32("graphics/battle_frontier/tourney_info_card_bg.bin.lz"); const u32 gDomeTourneyTreeButtons_Gfx[] = INCBIN_U32("graphics/battle_frontier/tourney_buttons.4bpp.lz"); // exit/cancel and pokeball buttons -const u32 gDomeTourneyTree_Pal[] = INCBIN_U32("graphics/battle_frontier/tourney.gbapal.lz"); +const u32 gDomeTourneyTree_Pal[] = INCBIN_U32("graphics/battle_frontier/tourney_tree.gbapal.lz"); const u32 gDomeTourneyTreeButtons_Pal[] = INCBIN_U32("graphics/battle_frontier/tourney_buttons.gbapal.lz"); const u32 gDomeTourneyMatchCardBg_Pal[] = INCBIN_U32("graphics/battle_frontier/tourney_match_card_bg.gbapal.lz"); @@ -1216,13 +1215,9 @@ const u32 gRouletteMultiplier_Gfx[] = INCBIN_U32("graphics/roulette/multiplier.4 #include "data/graphics/mail.h" -const u16 gFrontierFactorySelectMenu_Pal[] = INCBIN_U16("graphics/battle_frontier/factory_menu1.gbapal"); -const u16 gFrontierFactorySelectMenu_Pal2[] = INCBIN_U16("graphics/battle_frontier/factory_menu2.gbapal"); - -const u8 gFrontierFactorySelectMenu_Gfx[] = INCBIN_U8("graphics/battle_frontier/factory_menu1.4bpp"); -const u8 gFrontierFactorySelectMenu_Gfx2[] = INCBIN_U8("graphics/battle_frontier/factory_menu2.4bpp"); - -const u16 gFrontierFactorySelectMenu_Tilemap[] = INCBIN_U16("graphics/battle_frontier/factory_menu.bin"); +const u16 gFrontierFactoryMenu_Pal[] = INCBIN_U16("graphics/battle_frontier/factory_screen/menu.gbapal"); +const u16 gFrontierFactoryMenu_Gfx[] = INCBIN_U16("graphics/battle_frontier/factory_screen/menu.4bpp"); +const u16 gFrontierFactoryMenu_Tilemap[] = INCBIN_U16("graphics/battle_frontier/factory_screen/menu.bin"); const u32 gFrontierPassMedals_Gfx[] = INCBIN_U32("graphics/frontier_pass/medals.4bpp.lz"); diff --git a/src/hall_of_fame.c b/src/hall_of_fame.c index f4a4c96d71..63c7c30c26 100644 --- a/src/hall_of_fame.c +++ b/src/hall_of_fame.c @@ -44,7 +44,7 @@ struct HallofFameMon u32 personality; u16 species:9; u16 lvl:7; - u8 nick[POKEMON_NAME_LENGTH]; + u8 nickname[POKEMON_NAME_LENGTH]; }; struct HallofFameTeam @@ -338,7 +338,7 @@ static const struct HallofFameMon sDummyFameMon = .personality = 0, .species = SPECIES_NONE, .lvl = 0, - .nick = {0} + .nickname = {0} }; // Unused, order of party slots on Hall of Fame screen @@ -442,18 +442,16 @@ static void Task_Hof_InitMonData(u8 taskId) for (i = 0; i < PARTY_SIZE; i++) { - u8 nick[POKEMON_NAME_LENGTH + 2]; + u8 nickname[POKEMON_NAME_LENGTH + 1]; if (GetMonData(&gPlayerParty[i], MON_DATA_SPECIES)) { sHofMonPtr->mon[i].species = GetMonData(&gPlayerParty[i], MON_DATA_SPECIES_OR_EGG); sHofMonPtr->mon[i].tid = GetMonData(&gPlayerParty[i], MON_DATA_OT_ID); sHofMonPtr->mon[i].personality = GetMonData(&gPlayerParty[i], MON_DATA_PERSONALITY); sHofMonPtr->mon[i].lvl = GetMonData(&gPlayerParty[i], MON_DATA_LEVEL); - GetMonData(&gPlayerParty[i], MON_DATA_NICKNAME, nick); + GetMonData(&gPlayerParty[i], MON_DATA_NICKNAME, nickname); for (j = 0; j < POKEMON_NAME_LENGTH; j++) - { - sHofMonPtr->mon[i].nick[j] = nick[j]; - } + sHofMonPtr->mon[i].nickname[j] = nickname[j]; gTasks[taskId].tMonNumber++; } else @@ -462,7 +460,7 @@ static void Task_Hof_InitMonData(u8 taskId) sHofMonPtr->mon[i].tid = 0; sHofMonPtr->mon[i].personality = 0; sHofMonPtr->mon[i].lvl = 0; - sHofMonPtr->mon[i].nick[0] = EOS; + sHofMonPtr->mon[i].nickname[0] = EOS; } } @@ -740,7 +738,7 @@ static void Task_Hof_ExitOnKeyPressed(u8 taskId) static void Task_Hof_HandlePaletteOnExit(u8 taskId) { - CpuCopy16(gPlttBufferFaded, gPlttBufferUnfaded, 0x400); + CpuCopy16(gPlttBufferFaded, gPlttBufferUnfaded, PLTT_SIZE); BeginNormalPaletteFade(PALETTES_ALL, 8, 0, 0x10, RGB_BLACK); gTasks[taskId].func = Task_Hof_HandleExit; } @@ -1044,7 +1042,7 @@ static void Task_HofPC_HandlePaletteOnExit(u8 taskId) { struct HallofFameTeam *fameTeam; - CpuCopy16(gPlttBufferFaded, gPlttBufferUnfaded, 0x400); + CpuCopy16(gPlttBufferFaded, gPlttBufferUnfaded, PLTT_SIZE); fameTeam = (struct HallofFameTeam *)(gDecompressionBuffer); fameTeam->mon[0] = sDummyFameMon; ComputerScreenCloseEffect(0, 0, 0); @@ -1115,7 +1113,7 @@ static void HallOfFame_PrintWelcomeText(u8 unusedPossiblyWindowId, u8 unused2) static void HallOfFame_PrintMonInfo(struct HallofFameMon* currMon, u8 unused1, u8 unused2) { - u8 text[30]; + u8 text[max(32, POKEMON_NAME_LENGTH + 1)]; u8 *stringPtr; s32 dexNumber; s32 width; @@ -1148,8 +1146,8 @@ static void HallOfFame_PrintMonInfo(struct HallofFameMon* currMon, u8 unused1, u AddTextPrinterParameterized3(0, FONT_NORMAL, 0x10, 1, sMonInfoTextColors, TEXT_SKIP_DRAW, text); } - // nick, species names, gender and level - memcpy(text, currMon->nick, POKEMON_NAME_LENGTH); + // nickname, species names, gender and level + memcpy(text, currMon->nickname, POKEMON_NAME_LENGTH); text[POKEMON_NAME_LENGTH] = EOS; if (currMon->species == SPECIES_EGG) { @@ -1269,7 +1267,7 @@ static void ClearVramOamPltt_LoadHofPal(void) DmaFill16(3, 0, plttOffset, plttSize); ResetPaletteFade(); - LoadPalette(sHallOfFame_Pal, BG_PLTT_ID(0), PLTT_SIZE_4BPP); + LoadPalette(sHallOfFame_Pal, BG_PLTT_ID(0), sizeof(sHallOfFame_Pal)); } static void LoadHofGfx(void) diff --git a/src/intro.c b/src/intro.c index fd9c124670..6a6a58ddd5 100644 --- a/src/intro.c +++ b/src/intro.c @@ -1163,7 +1163,7 @@ void CB2_InitCopyrightScreenAfterTitleScreen(void) static void Task_Scene1_Load(u8 taskId) { SetVBlankCallback(NULL); - sIntroCharacterGender = Random() & 1; + sIntroCharacterGender = MOD(Random(), GENDER_COUNT); IntroResetGpuRegs(); SetGpuReg(REG_OFFSET_BG3VOFS, 0); SetGpuReg(REG_OFFSET_BG2VOFS, 80); @@ -1188,14 +1188,14 @@ static void Task_Scene1_Load(u8 taskId) LoadSpritePalettes(sSpritePalettes_Intro1); LoadCompressedSpriteSheet(sSpriteSheet_Sparkle); LoadSpritePalettes(sSpritePalette_Sparkle); - CpuCopy16(&gPlttBufferUnfaded[0x100], &gPlttBufferUnfaded[0x1F0], 0x20); - CpuCopy16(&gPlttBufferUnfaded[0x100], &gPlttBufferUnfaded[0x1E1], 0x1E); - CpuCopy16(&gPlttBufferUnfaded[0x100], &gPlttBufferUnfaded[0x1D2], 0x1C); - CpuCopy16(&gPlttBufferUnfaded[0x100], &gPlttBufferUnfaded[0x1C3], 0x1A); - CpuCopy16(&gPlttBufferUnfaded[0x100], &gPlttBufferUnfaded[0x1B4], 0x18); - CpuCopy16(&gPlttBufferUnfaded[0x100], &gPlttBufferUnfaded[0x1A5], 0x16); - CpuCopy16(&gPlttBufferUnfaded[0x100], &gPlttBufferUnfaded[0x196], 0x14); - CreateGameFreakLogoSprites(120, 80, 0); + CpuCopy16(&gPlttBufferUnfaded[OBJ_PLTT_ID(0)], &gPlttBufferUnfaded[OBJ_PLTT_ID(15) + 0], PLTT_SIZEOF(16 - 0)); + CpuCopy16(&gPlttBufferUnfaded[OBJ_PLTT_ID(0)], &gPlttBufferUnfaded[OBJ_PLTT_ID(14) + 1], PLTT_SIZEOF(16 - 1) + 1); // Copying an extra half color? + CpuCopy16(&gPlttBufferUnfaded[OBJ_PLTT_ID(0)], &gPlttBufferUnfaded[OBJ_PLTT_ID(13) + 2], PLTT_SIZEOF(16 - 2)); + CpuCopy16(&gPlttBufferUnfaded[OBJ_PLTT_ID(0)], &gPlttBufferUnfaded[OBJ_PLTT_ID(12) + 3], PLTT_SIZEOF(16 - 3)); + CpuCopy16(&gPlttBufferUnfaded[OBJ_PLTT_ID(0)], &gPlttBufferUnfaded[OBJ_PLTT_ID(11) + 4], PLTT_SIZEOF(16 - 4)); + CpuCopy16(&gPlttBufferUnfaded[OBJ_PLTT_ID(0)], &gPlttBufferUnfaded[OBJ_PLTT_ID(10) + 5], PLTT_SIZEOF(16 - 5)); + CpuCopy16(&gPlttBufferUnfaded[OBJ_PLTT_ID(0)], &gPlttBufferUnfaded[OBJ_PLTT_ID( 9) + 6], PLTT_SIZEOF(16 - 6)); + CreateGameFreakLogoSprites(DISPLAY_WIDTH / 2, DISPLAY_HEIGHT / 2, 0); gTasks[taskId].sBigDropSpriteId = CreateWaterDrop(236, -14, 0x200, 1, 0x78, FALSE); gTasks[taskId].func = Task_Scene1_FadeIn; } @@ -1722,7 +1722,7 @@ static void Task_Scene3_Load(u8 taskId) gTasks[taskId].tZoomDiv = 0; gTasks[taskId].tZoomDivSpeed = 0; gTasks[taskId].data[3] = 0; - PanFadeAndZoomScreen(0x78, 0x50, 0, 0); + PanFadeAndZoomScreen(DISPLAY_WIDTH / 2, DISPLAY_HEIGHT / 2, 0, 0); ResetSpriteData(); FreeAllSpritePalettes(); BeginNormalPaletteFade(PALETTES_ALL, 0, 16, 0, RGB_WHITEALPHA); @@ -1746,7 +1746,7 @@ static void Task_Scene3_SpinPokeball(u8 taskId) gTasks[taskId].func = Task_Scene3_WaitGroudon; } - PanFadeAndZoomScreen(0x78, 0x50, SAFE_DIV(0x10000, gTasks[taskId].tZoomDiv), gTasks[taskId].tAlpha); + PanFadeAndZoomScreen(DISPLAY_WIDTH / 2, DISPLAY_HEIGHT / 2, SAFE_DIV(0x10000, gTasks[taskId].tZoomDiv), gTasks[taskId].tAlpha); if (gIntroFrameCounter == TIMER_POKEBALL_FADE) BeginNormalPaletteFade(PALETTES_ALL, 0, 0, 16, RGB_WHITEALPHA); @@ -1848,7 +1848,7 @@ static void Task_Scene3_StartGroudon(u8 taskId) { gTasks[taskId].tState = 0; gTasks[taskId].func = Task_Scene3_Groudon; - ScanlineEffect_InitWave(0, 160, 4, 4, 1, SCANLINE_EFFECT_REG_BG1HOFS, FALSE); + ScanlineEffect_InitWave(0, DISPLAY_HEIGHT, 4, 4, 1, SCANLINE_EFFECT_REG_BG1HOFS, FALSE); } #define tScreenX data[1] @@ -1884,7 +1884,7 @@ static void Task_Scene3_Groudon(u8 taskId) if (--tDelay == 0) { tDelay = 2; - CpuCopy16(&gIntro3Bg_Pal[tPalIdx], &gPlttBufferFaded[31], sizeof(u16)); + CpuCopy16(&gIntro3Bg_Pal[tPalIdx], &gPlttBufferFaded[BG_PLTT_ID(1) + 15], PLTT_SIZEOF(1)); tPalIdx += 2; if (tPalIdx == 0x1EC) tState++; @@ -1901,7 +1901,7 @@ static void Task_Scene3_Groudon(u8 taskId) if (--tDelay == 0) { tDelay = 2; - CpuCopy16(&gIntro3Bg_Pal[tPalIdx], &gPlttBufferFaded[31], sizeof(u16)); + CpuCopy16(&gIntro3Bg_Pal[tPalIdx], &gPlttBufferFaded[BG_PLTT_ID(1) + 15], PLTT_SIZEOF(1)); tPalIdx -= 2; if (tPalIdx == 0x1E0) { @@ -2058,7 +2058,7 @@ static void Task_Scene3_LoadKyogre(u8 taskId) gTasks[taskId].tDelay = 16; gTasks[taskId].tZoom = 256; PanFadeAndZoomScreen(gTasks[taskId].tScreenX, gTasks[taskId].tScreenY, gTasks[taskId].tZoom, 0); - ScanlineEffect_InitWave(0, 0xA0, 4, 4, 1, SCANLINE_EFFECT_REG_BG1VOFS, FALSE); + ScanlineEffect_InitWave(0, DISPLAY_HEIGHT, 4, 4, 1, SCANLINE_EFFECT_REG_BG1VOFS, FALSE); } static void Task_Scene3_Kyogre(u8 taskId) @@ -2143,7 +2143,7 @@ static void Task_Scene3_Kyogre(u8 taskId) if (--tDelay == 0) { tDelay = 4; - CpuCopy16(&gIntro3Bg_Pal[tPalIdx], &gPlttBufferFaded[47], sizeof(u16)); + CpuCopy16(&gIntro3Bg_Pal[tPalIdx], &gPlttBufferFaded[BG_PLTT_ID(2) + 15], PLTT_SIZEOF(1)); tPalIdx -= 2; if (tPalIdx == 0x1E0) tState++; @@ -2161,7 +2161,7 @@ static void Task_Scene3_Kyogre(u8 taskId) if (--tDelay == 0) { tDelay = 4; - CpuCopy16(&gIntro3Bg_Pal[tPalIdx], &gPlttBufferFaded[47], sizeof(u16)); + CpuCopy16(&gIntro3Bg_Pal[tPalIdx], &gPlttBufferFaded[BG_PLTT_ID(2) + 15], PLTT_SIZEOF(1)); tPalIdx += 2; if (tPalIdx == 0x1EE) { @@ -2492,7 +2492,7 @@ static void SpriteCB_Lightning(struct Sprite *sprite) sprite->sPalIdx = 0x1C2; sprite->sState++; case 1: - CpuCopy16(&gIntro3Bg_Pal[sprite->sPalIdx], &gPlttBufferFaded[93], 2); + CpuCopy16(&gIntro3Bg_Pal[sprite->sPalIdx], &gPlttBufferFaded[BG_PLTT_ID(5) + 13], PLTT_SIZEOF(1)); sprite->sPalIdx += 2; if (sprite->sPalIdx != 0x1CE) break; @@ -2503,7 +2503,7 @@ static void SpriteCB_Lightning(struct Sprite *sprite) if (--sprite->sDelay == 0) { sprite->sDelay = 4; - CpuCopy16(&gIntro3Bg_Pal[sprite->sPalIdx], &gPlttBufferFaded[93], 2); + CpuCopy16(&gIntro3Bg_Pal[sprite->sPalIdx], &gPlttBufferFaded[BG_PLTT_ID(5) + 13], PLTT_SIZEOF(1)); sprite->sPalIdx -= 2; if (sprite->sPalIdx == 0x1C0) DestroySprite(sprite); @@ -2606,7 +2606,7 @@ static void Task_RayquazaAttack(u8 taskId) case 0: if ((data[2] & 1) != 0) { - CpuCopy16(&gIntro3Bg_Pal[0x1A2 + data[1] * 2], &gPlttBufferFaded[94], 2); + CpuCopy16(&gIntro3Bg_Pal[0x1A2 + data[1] * 2], &gPlttBufferFaded[BG_PLTT_ID(5) + 14], PLTT_SIZEOF(1)); data[1]++; } if (data[1] == 6) @@ -2621,7 +2621,7 @@ static void Task_RayquazaAttack(u8 taskId) { if ((data[2] & 1) != 0) { - CpuCopy16(&gIntro3Bg_Pal[0x1A2 + data[1] * 2], &gPlttBufferFaded[88], 2); + CpuCopy16(&gIntro3Bg_Pal[0x1A2 + data[1] * 2], &gPlttBufferFaded[BG_PLTT_ID(5) + 8], PLTT_SIZEOF(1)); data[1]++; } if (data[1] == 6) @@ -2640,7 +2640,7 @@ static void Task_RayquazaAttack(u8 taskId) { if ((data[2] & 1) != 0) { - CpuCopy16(&gIntro3Bg_Pal[0x182 + data[1] * 2], &gPlttBufferFaded[92], 2); + CpuCopy16(&gIntro3Bg_Pal[0x182 + data[1] * 2], &gPlttBufferFaded[BG_PLTT_ID(5) + 12], PLTT_SIZEOF(1)); data[1]++; } if (data[1] == 6) @@ -3197,16 +3197,16 @@ static void SpriteCB_LogoLetter(struct Sprite *sprite) sprite->sColorDelay = 2; if (sprite->sTimer != 0) { - CpuCopy16(&gIntroGameFreakTextFade_Pal[sprite->sTimer], &gPlttBufferFaded[0x11F], 2); - CpuCopy16(&gIntroGameFreakTextFade_Pal[sprite->sTimer + 16], &gPlttBufferFaded[0x114], 2); - CpuCopy16(&gIntroGameFreakTextFade_Pal[sprite->sTimer + 32], &gPlttBufferFaded[0x11A], 2); + CpuCopy16(&gIntroGameFreakTextFade_Pal[sprite->sTimer], &gPlttBufferFaded[OBJ_PLTT_ID(1) + 15], PLTT_SIZEOF(1)); + CpuCopy16(&gIntroGameFreakTextFade_Pal[sprite->sTimer + 16], &gPlttBufferFaded[OBJ_PLTT_ID(1) + 4], PLTT_SIZEOF(1)); + CpuCopy16(&gIntroGameFreakTextFade_Pal[sprite->sTimer + 32], &gPlttBufferFaded[OBJ_PLTT_ID(1) + 10], PLTT_SIZEOF(1)); sprite->sTimer--; } else { - CpuCopy16(&gIntroGameFreakTextFade_Pal[sprite->sTimer], &gPlttBufferFaded[0x11F], 2); - CpuCopy16(&gIntroGameFreakTextFade_Pal[sprite->sTimer + 16], &gPlttBufferFaded[0x114], 2); - CpuCopy16(&gIntroGameFreakTextFade_Pal[sprite->sTimer + 32], &gPlttBufferFaded[0x11A], 2); + CpuCopy16(&gIntroGameFreakTextFade_Pal[sprite->sTimer], &gPlttBufferFaded[OBJ_PLTT_ID(1) + 15], PLTT_SIZEOF(1)); + CpuCopy16(&gIntroGameFreakTextFade_Pal[sprite->sTimer + 16], &gPlttBufferFaded[OBJ_PLTT_ID(1) + 4], PLTT_SIZEOF(1)); + CpuCopy16(&gIntroGameFreakTextFade_Pal[sprite->sTimer + 32], &gPlttBufferFaded[OBJ_PLTT_ID(1) + 10], PLTT_SIZEOF(1)); sprite->sState++; } } @@ -3226,9 +3226,9 @@ static void SpriteCB_LogoLetter(struct Sprite *sprite) sprite->sColorDelay = 2; if (sprite->sTimer <= COLOR_CHANGES) { - CpuCopy16(&gIntroGameFreakTextFade_Pal[sprite->sTimer], &gPlttBufferFaded[0x11F], 2); - CpuCopy16(&gIntroGameFreakTextFade_Pal[sprite->sTimer + 16], &gPlttBufferFaded[0x114], 2); - CpuCopy16(&gIntroGameFreakTextFade_Pal[sprite->sTimer + 32], &gPlttBufferFaded[0x11A], 2); + CpuCopy16(&gIntroGameFreakTextFade_Pal[sprite->sTimer], &gPlttBufferFaded[OBJ_PLTT_ID(1) + 15], PLTT_SIZEOF(1)); + CpuCopy16(&gIntroGameFreakTextFade_Pal[sprite->sTimer + 16], &gPlttBufferFaded[OBJ_PLTT_ID(1) + 4], PLTT_SIZEOF(1)); + CpuCopy16(&gIntroGameFreakTextFade_Pal[sprite->sTimer + 32], &gPlttBufferFaded[OBJ_PLTT_ID(1) + 10], PLTT_SIZEOF(1)); sprite->sTimer++; } else diff --git a/src/intro_credits_graphics.c b/src/intro_credits_graphics.c index 7593a296e8..05b5a3a050 100644 --- a/src/intro_credits_graphics.c +++ b/src/intro_credits_graphics.c @@ -998,13 +998,13 @@ void CycleSceneryPalette(u8 mode) break; if (gMain.vblankCounter1 & 4) { - x = gPlttBufferUnfaded[9]; - y = gPlttBufferUnfaded[10]; + x = gPlttBufferUnfaded[BG_PLTT_ID(0) + 9]; + y = gPlttBufferUnfaded[BG_PLTT_ID(0) + 10]; } else { - x = gPlttBufferUnfaded[10]; - y = gPlttBufferUnfaded[9]; + x = gPlttBufferUnfaded[BG_PLTT_ID(0) + 10]; + y = gPlttBufferUnfaded[BG_PLTT_ID(0) + 9]; } LoadPalette(&x, BG_PLTT_ID(0) + 9, sizeof(x)); LoadPalette(&y, BG_PLTT_ID(0) + 10, sizeof(y)); diff --git a/src/item_menu.c b/src/item_menu.c index 00449c6ec7..223f028d02 100755 --- a/src/item_menu.c +++ b/src/item_menu.c @@ -2429,16 +2429,16 @@ static void PrintPocketNames(const u8 *pocketName1, const u8 *pocketName2) static void CopyPocketNameToWindow(u32 a) { - u8 (* tileDataBuffer)[32][32]; + u8 (*tileDataBuffer)[32][32]; u8 *windowTileData; int b; if (a > 8) a = 8; tileDataBuffer = &gBagMenu->pocketNameBuffer; windowTileData = (u8 *)GetWindowAttribute(2, WINDOW_TILE_DATA); - CpuCopy32(tileDataBuffer[0][a], windowTileData, 0x100); // Top half of pocket name + CpuCopy32(&tileDataBuffer[0][a], windowTileData, 0x100); // Top half of pocket name b = a + 16; - CpuCopy32(tileDataBuffer[0][b], windowTileData + 0x100, 0x100); // Bottom half of pocket name + CpuCopy32(&tileDataBuffer[0][b], windowTileData + 0x100, 0x100); // Bottom half of pocket name CopyWindowToVram(WIN_POCKET_NAME, COPYWIN_GFX); } diff --git a/src/item_use.c b/src/item_use.c index 8a02827176..9737ca7d87 100755 --- a/src/item_use.c +++ b/src/item_use.c @@ -781,7 +781,7 @@ void ItemUseOutOfBattle_RareCandy(u8 taskId) void ItemUseOutOfBattle_TMHM(u8 taskId) { - if (gSpecialVar_ItemId >= ITEM_HM01_CUT) + if (gSpecialVar_ItemId >= ITEM_HM01) DisplayItemMessage(taskId, FONT_NORMAL, gText_BootedUpHM, BootUpSoundTMHM); // HM else DisplayItemMessage(taskId, FONT_NORMAL, gText_BootedUpTM, BootUpSoundTMHM); // TM diff --git a/src/librfu_rfu.c b/src/librfu_rfu.c index 319743d0d2..da37b8fc11 100644 --- a/src/librfu_rfu.c +++ b/src/librfu_rfu.c @@ -139,7 +139,7 @@ u16 rfu_initializeAPI(u32 *APIBuffer, u16 buffByteSize, IntrFunc *sioIntrTable_p u16 buffByteSizeMax; // is in EWRAM? - if (((uintptr_t)APIBuffer & 0xF000000) == 0x2000000 && copyInterruptToRam) + if (((uintptr_t)APIBuffer & 0xF000000) == EWRAM_START && copyInterruptToRam) return ERR_RFU_API_BUFF_ADR; // is not 4-byte aligned? if ((u32)APIBuffer & 3) @@ -338,7 +338,7 @@ u16 rfu_getRFUStatus(u8 *rfuState) u16 rfu_MBOOT_CHILD_inheritanceLinkStatus(void) { const char *s1 = str_checkMbootLL; - char *s2 = (char *)0x30000F0; + char *s2 = (char *)(IWRAM_START + 0xF0); u16 checksum; u16 *mb_buff_iwram_p; u8 i; @@ -347,15 +347,15 @@ u16 rfu_MBOOT_CHILD_inheritanceLinkStatus(void) while (*s1 != '\0') if (*s1++ != *s2++) return 1; - mb_buff_iwram_p = (u16 *)0x3000000; + mb_buff_iwram_p = (u16 *)IWRAM_START; // The size of struct RfuLinkStatus is 180 checksum = 0; for (i = 0; i < 180/2; ++i) checksum += *mb_buff_iwram_p++; - if (checksum != *(u16 *)0x30000FA) + if (checksum != *(u16 *)(IWRAM_START + 0xFA)) return 1; - CpuCopy16((u16 *)0x3000000, gRfuLinkStatus, sizeof(struct RfuLinkStatus)); + CpuCopy16((u16 *)IWRAM_START, gRfuLinkStatus, sizeof(struct RfuLinkStatus)); gRfuStatic->flags |= 0x80; // mboot return 0; } diff --git a/src/link.c b/src/link.c index 06bde1e38f..c51abc9526 100644 --- a/src/link.c +++ b/src/link.c @@ -78,7 +78,7 @@ bool8 gRemoteLinkPlayersNotReceived[MAX_LINK_PLAYERS]; u8 gBlockReceivedStatus[MAX_LINK_PLAYERS]; u32 gLinkFiller2; u16 gLinkHeldKeys; -u16 gRecvCmds[MAX_RFU_PLAYERS][CMD_LENGTH]; +u16 ALIGNED(4) gRecvCmds[MAX_RFU_PLAYERS][CMD_LENGTH]; u32 gLinkStatus; bool8 gLinkDummy1; // Never read bool8 gLinkDummy2; // Never read @@ -1650,7 +1650,7 @@ static void ErrorMsg_MoveCloserToPartner(void) DecompressAndLoadBgGfxUsingHeap(1, sWirelessLinkDisplayGfx, FALSE, 0, 0); CopyToBgTilemapBuffer(1, sWirelessLinkDisplayTilemap, 0, 0); CopyBgTilemapBufferToVram(1); - LoadPalette(sWirelessLinkDisplayPal, 0, 0x20); + LoadPalette(sWirelessLinkDisplayPal, BG_PLTT_ID(0), sizeof(sWirelessLinkDisplayPal)); FillWindowPixelBuffer(WIN_LINK_ERROR_TOP, PIXEL_FILL(0)); FillWindowPixelBuffer(WIN_LINK_ERROR_BOTTOM, PIXEL_FILL(0)); AddTextPrinterParameterized3(WIN_LINK_ERROR_TOP, FONT_SHORT_COPY_1, 2, 6, sTextColors, 0, gText_CommErrorEllipsis); diff --git a/src/link_rfu_2.c b/src/link_rfu_2.c index 9d66a18378..6c84ffefe0 100644 --- a/src/link_rfu_2.c +++ b/src/link_rfu_2.c @@ -1918,7 +1918,8 @@ static void Task_PlayerExchangeUpdate(u8 taskId) for (i = 0; i < RFU_CHILD_MAX; i++) sio->linkPlayerIdx[i] = gRfu.linkPlayerIdx[i]; memcpy(sio->linkPlayers, gLinkPlayers, sizeof(gLinkPlayers)); - if (SendBlock(0, gBlockSendBuffer, 0xa0)) + // Send SioInfo but exclude the 92 unused bytes at the end + if (SendBlock(0, gBlockSendBuffer, offsetof(struct SioInfo, filler))) gTasks[taskId].tState++; break; case 5: diff --git a/src/list_menu.c b/src/list_menu.c index 546ec6f6cd..e24442ca02 100644 --- a/src/list_menu.c +++ b/src/list_menu.c @@ -316,7 +316,7 @@ static void ListMenuDummyTask(u8 taskId) } -s32 DoMysteryGiftListMenu(const struct WindowTemplate *windowTemplate, const struct ListMenuTemplate *listMenuTemplate, u8 drawMode, u16 tileNum, u16 palNum) +s32 DoMysteryGiftListMenu(const struct WindowTemplate *windowTemplate, const struct ListMenuTemplate *listMenuTemplate, u8 drawMode, u16 tileNum, u16 palOffset) { switch (sMysteryGiftLinkMenu.state) { @@ -326,9 +326,9 @@ s32 DoMysteryGiftListMenu(const struct WindowTemplate *windowTemplate, const str switch (drawMode) { case 2: - LoadUserWindowBorderGfx(sMysteryGiftLinkMenu.windowId, tileNum, palNum); + LoadUserWindowBorderGfx(sMysteryGiftLinkMenu.windowId, tileNum, palOffset); case 1: - DrawTextBorderOuter(sMysteryGiftLinkMenu.windowId, tileNum, palNum / 16); + DrawTextBorderOuter(sMysteryGiftLinkMenu.windowId, tileNum, palOffset / 16); break; } gMultiuseListMenuTemplate = *listMenuTemplate; diff --git a/src/mail.c b/src/mail.c index a6f3bc0ffd..424a286f3f 100644 --- a/src/mail.c +++ b/src/mail.c @@ -551,9 +551,7 @@ static bool8 MailReadBuildGraphics(void) break; case 9: if (FreeTempTileDataBuffersIfPossible()) - { return FALSE; - } break; case 10: FillBgTilemapBufferRect_Palette0(0, 0, 0, 0, DISPLAY_TILE_WIDTH, DISPLAY_TILE_HEIGHT); @@ -567,23 +565,20 @@ static bool8 MailReadBuildGraphics(void) break; case 12: LoadPalette(GetOverworldTextboxPalettePtr(), BG_PLTT_ID(15), PLTT_SIZE_4BPP); + gPlttBufferUnfaded[BG_PLTT_ID(15) + 10] = sMailGraphics[sMailRead->mailType].textColor; + gPlttBufferFaded[BG_PLTT_ID(15) + 10] = sMailGraphics[sMailRead->mailType].textColor; + gPlttBufferUnfaded[BG_PLTT_ID(15) + 11] = sMailGraphics[sMailRead->mailType].textShadow; + gPlttBufferFaded[BG_PLTT_ID(15) + 11] = sMailGraphics[sMailRead->mailType].textShadow; - gPlttBufferUnfaded[250] = sMailGraphics[sMailRead->mailType].textColor; - gPlttBufferFaded[250] = sMailGraphics[sMailRead->mailType].textColor; - gPlttBufferUnfaded[251] = sMailGraphics[sMailRead->mailType].textShadow; - gPlttBufferFaded[251] = sMailGraphics[sMailRead->mailType].textShadow; LoadPalette(sMailGraphics[sMailRead->mailType].palette, BG_PLTT_ID(0), PLTT_SIZE_4BPP); - - gPlttBufferUnfaded[10] = sBgColors[gSaveBlock2Ptr->playerGender][0]; - gPlttBufferFaded[10] = sBgColors[gSaveBlock2Ptr->playerGender][0]; - gPlttBufferUnfaded[11] = sBgColors[gSaveBlock2Ptr->playerGender][1]; - gPlttBufferFaded[11] = sBgColors[gSaveBlock2Ptr->playerGender][1]; + gPlttBufferUnfaded[BG_PLTT_ID(0) + 10] = sBgColors[gSaveBlock2Ptr->playerGender][0]; + gPlttBufferFaded[BG_PLTT_ID(0) + 10] = sBgColors[gSaveBlock2Ptr->playerGender][0]; + gPlttBufferUnfaded[BG_PLTT_ID(0) + 11] = sBgColors[gSaveBlock2Ptr->playerGender][1]; + gPlttBufferFaded[BG_PLTT_ID(0) + 11] = sBgColors[gSaveBlock2Ptr->playerGender][1]; break; case 13: if (sMailRead->hasText) - { BufferMailText(); - } break; case 14: if (sMailRead->hasText) diff --git a/src/main_menu.c b/src/main_menu.c index 6808a8f11a..ddbcda5fd2 100644 --- a/src/main_menu.c +++ b/src/main_menu.c @@ -4,6 +4,7 @@ #include "constants/rgb.h" #include "constants/songs.h" #include "constants/trainers.h" +#include "data.h" #include "decompress.h" #include "event_data.h" #include "field_effect.h" @@ -1086,8 +1087,8 @@ static void Task_HandleMainMenuAPressed(u8 taskId) case ACTION_INVALID: gTasks[taskId].tCurrItem = 0; gTasks[taskId].func = Task_DisplayMainMenuInvalidActionError; - gPlttBufferUnfaded[0xF1] = RGB_WHITE; - gPlttBufferFaded[0xF1] = RGB_WHITE; + gPlttBufferUnfaded[BG_PLTT_ID(15) + 1] = RGB_WHITE; + gPlttBufferFaded[BG_PLTT_ID(15) + 1] = RGB_WHITE; SetGpuReg(REG_OFFSET_BG2HOFS, 0); SetGpuReg(REG_OFFSET_BG2VOFS, 0); SetGpuReg(REG_OFFSET_BG1HOFS, 0); @@ -1900,7 +1901,7 @@ static void AddBirchSpeechObjects(u8 taskId) gSprites[brendanSpriteId].invisible = TRUE; gSprites[brendanSpriteId].oam.priority = 0; gTasks[taskId].tBrendanSpriteId = brendanSpriteId; - maySpriteId = CreateTrainerSprite(FacilityClassToPicIndex(FACILITY_CLASS_MAY), 120, 60, 0, &gDecompressionBuffer[0x800]); + maySpriteId = CreateTrainerSprite(FacilityClassToPicIndex(FACILITY_CLASS_MAY), 120, 60, 0, &gDecompressionBuffer[TRAINER_PIC_SIZE]); gSprites[maySpriteId].callback = SpriteCB_Null; gSprites[maySpriteId].invisible = TRUE; gSprites[maySpriteId].oam.priority = 0; diff --git a/src/mauville_old_man.c b/src/mauville_old_man.c index 6075bd5d95..36b29ed73b 100644 --- a/src/mauville_old_man.c +++ b/src/mauville_old_man.c @@ -969,7 +969,7 @@ static const struct Story sStorytellerStories[] = { MauvilleCity_PokemonCenter_1F_Text_PokemonCaughtStory }, { - GAME_STAT_FISHING_CAPTURES, 1, + GAME_STAT_FISHING_ENCOUNTERS, 1, MauvilleCity_PokemonCenter_1F_Text_FishingPokemonCaughtTitle, MauvilleCity_PokemonCenter_1F_Text_FishingPokemonCaughtAction, MauvilleCity_PokemonCenter_1F_Text_FishingPokemonCaughtStory diff --git a/src/menu_specialized.c b/src/menu_specialized.c index 8f25c3188f..15fdafbeb2 100644 --- a/src/menu_specialized.c +++ b/src/menu_specialized.c @@ -918,7 +918,7 @@ static u8 *GetConditionMenuMonString(u8 *dst, u16 boxId, u16 monId) *(dst++) = TEXT_COLOR_TRANSPARENT; *(dst++) = TEXT_COLOR_LIGHT_BLUE; if (GetBoxOrPartyMonData(box, mon, MON_DATA_IS_EGG, NULL)) - return StringCopyPadded(dst, gText_EggNickname, 0, 12); + return StringCopyPadded(dst, gText_EggNickname, 0, POKEMON_NAME_LENGTH + 2); GetBoxOrPartyMonData(box, mon, MON_DATA_NICKNAME, dst); StringGet_Nickname(dst); species = GetBoxOrPartyMonData(box, mon, MON_DATA_SPECIES, NULL); @@ -1020,7 +1020,7 @@ void GetConditionMenuMonNameAndLocString(u8 *locationDst, u8 *nameDst, u16 boxId locationDst[3] = TEXT_COLOR_TRANSPARENT; locationDst[4] = TEXT_COLOR_LIGHT_BLUE; if (box == TOTAL_BOXES_COUNT) // Party mon. - BufferConditionMenuSpacedStringN(&locationDst[5], gText_InParty, 8); + BufferConditionMenuSpacedStringN(&locationDst[5], gText_InParty, BOX_NAME_LENGTH); else BufferConditionMenuSpacedStringN(&locationDst[5], GetBoxNamePtr(box), BOX_NAME_LENGTH); } @@ -1029,7 +1029,7 @@ void GetConditionMenuMonNameAndLocString(u8 *locationDst, u8 *nameDst, u16 boxId for (i = 0; i < POKEMON_NAME_LENGTH + 2; i++) nameDst[i] = CHAR_SPACE; nameDst[i] = EOS; - for (i = 0; i < 8; i++) + for (i = 0; i < BOX_NAME_LENGTH; i++) locationDst[i] = CHAR_SPACE; locationDst[i] = EOS; } diff --git a/src/mirage_tower.c b/src/mirage_tower.c index 4b9558d71c..dce3c3e64c 100644 --- a/src/mirage_tower.c +++ b/src/mirage_tower.c @@ -9,6 +9,7 @@ #include "gpu_regs.h" #include "menu.h" #include "random.h" +#include "palette.h" #include "palette_util.h" #include "script.h" #include "sound.h" @@ -75,7 +76,7 @@ static void Task_FossilFallAndSink(u8); static void SpriteCB_FallingFossil(struct Sprite *); static void UpdateDisintegrationEffect(u8 *, u16, u8, u8, u8); -static const u8 sBlankTile_Gfx[32] = {0}; +static const u8 ALIGNED(2) sBlankTile_Gfx[32] = {0}; static const u8 sMirageTower_Gfx[] = INCBIN_U8("graphics/misc/mirage_tower.4bpp"); static const u16 sMirageTowerTilemap[] = INCBIN_U16("graphics/misc/mirage_tower.bin"); static const u16 sFossil_Pal[] = INCBIN_U16("graphics/object_events/pics/misc/fossil.gbapal"); // Unused @@ -167,7 +168,7 @@ static const struct SpriteTemplate sSpriteTemplate_FallingFossil = const struct PulseBlendSettings gMirageTowerPulseBlendSettings = { .blendColor = RGB(27, 25, 16), - .paletteOffset = 0x61, + .paletteOffset = BG_PLTT_ID(6) + 1, .numColors = 15, .delay = 5, .numFadeCycles = -1, diff --git a/src/naming_screen.c b/src/naming_screen.c index a08d1d6385..072df9a079 100644 --- a/src/naming_screen.c +++ b/src/naming_screen.c @@ -978,10 +978,10 @@ static u16 GetButtonPalOffset(u8 button) { const u16 palOffsets[BUTTON_COUNT + 1] = { - [BUTTON_PAGE] = IndexOfSpritePaletteTag(PALTAG_PAGE_SWAP) * 16 + 0x10E, - [BUTTON_BACK] = IndexOfSpritePaletteTag(PALTAG_BACK_BUTTON) * 16 + 0x10E, - [BUTTON_OK] = IndexOfSpritePaletteTag(PALTAG_OK_BUTTON) * 16 + 0x10E, - [BUTTON_COUNT] = IndexOfSpritePaletteTag(PALTAG_OK_BUTTON) * 16 + 0x101, + [BUTTON_PAGE] = OBJ_PLTT_ID(IndexOfSpritePaletteTag(PALTAG_PAGE_SWAP)) + 14, + [BUTTON_BACK] = OBJ_PLTT_ID(IndexOfSpritePaletteTag(PALTAG_BACK_BUTTON)) + 14, + [BUTTON_OK] = OBJ_PLTT_ID(IndexOfSpritePaletteTag(PALTAG_OK_BUTTON)) + 14, + [BUTTON_COUNT] = OBJ_PLTT_ID(IndexOfSpritePaletteTag(PALTAG_OK_BUTTON)) + 1, }; return palOffsets[button]; @@ -1051,7 +1051,7 @@ static void SpriteCB_Cursor(struct Sprite *sprite) { s8 gb = sprite->sColor; s8 r = sprite->sColor >> 1; - u16 index = IndexOfSpritePaletteTag(PALTAG_CURSOR) * 16 + 0x0101; + u16 index = OBJ_PLTT_ID(IndexOfSpritePaletteTag(PALTAG_CURSOR)) + 1; MultiplyInvertedPaletteRGBComponents(index, r, gb, gb); } @@ -1067,7 +1067,7 @@ static void SpriteCB_InputArrow(struct Sprite *sprite) if (sprite->sDelay == 0 || --sprite->sDelay == 0) { sprite->sDelay = 8; - sprite->sXPosId = (sprite->sXPosId + 1) & (ARRAY_COUNT(x) - 1); + sprite->sXPosId = MOD(sprite->sXPosId + 1, ARRAY_COUNT(x)); } sprite->x2 = x[sprite->sXPosId]; } @@ -1097,7 +1097,7 @@ static void SpriteCB_Underscore(struct Sprite *sprite) sprite->sDelay++; if (sprite->sDelay > 8) { - sprite->sYPosId = (sprite->sYPosId + 1) & (ARRAY_COUNT(y) - 1); + sprite->sYPosId = MOD(sprite->sYPosId + 1, ARRAY_COUNT(y)); sprite->sDelay = 0; } } diff --git a/src/overworld.c b/src/overworld.c index 61cc0ce1be..937643c5e1 100644 --- a/src/overworld.c +++ b/src/overworld.c @@ -2974,7 +2974,7 @@ static void InitLinkPlayerObjectEventPos(struct ObjectEvent *objEvent, s16 x, s1 objEvent->previousCoords.y = y; SetSpritePosToMapCoords(x, y, &objEvent->initialCoords.x, &objEvent->initialCoords.y); objEvent->initialCoords.x += 8; - ObjectEventUpdateElevation(objEvent); + ObjectEventUpdateElevation(objEvent, NULL); } static void SetLinkPlayerObjectRange(u8 linkPlayerId, u8 dir) @@ -3114,7 +3114,7 @@ static bool8 FacingHandler_DpadMovement(struct LinkPlayerObjectEvent *linkPlayer { objEvent->directionSequenceIndex = 16; ShiftObjectEventCoords(objEvent, x, y); - ObjectEventUpdateElevation(objEvent); + ObjectEventUpdateElevation(objEvent, NULL); return TRUE; } } diff --git a/src/palette.c b/src/palette.c index 9794c5b914..63578d5d49 100644 --- a/src/palette.c +++ b/src/palette.c @@ -66,7 +66,7 @@ static EWRAM_DATA struct PaletteStruct sPaletteStructs[NUM_PALETTE_STRUCTS] = {0 EWRAM_DATA struct PaletteFadeControl gPaletteFade = {0}; static EWRAM_DATA u32 sFiller = 0; static EWRAM_DATA u32 sPlttBufferTransferPending = 0; -EWRAM_DATA u8 gPaletteDecompressionBuffer[PLTT_DECOMP_BUFFER_SIZE] = {0}; +EWRAM_DATA u8 ALIGNED(2) gPaletteDecompressionBuffer[PLTT_SIZE] = {0}; static const struct PaletteStructTemplate sDummyPaletteStructTemplate = { .id = 0xFFFF, @@ -152,7 +152,7 @@ static void ReadPlttIntoBuffers(void) u16 i; u16 *pltt = (u16 *)PLTT; - for (i = 0; i < PLTT_SIZE / 2; i++) + for (i = 0; i < PLTT_BUFFER_SIZE; i++) { gPlttBufferUnfaded[i] = pltt[i]; gPlttBufferFaded[i] = pltt[i]; @@ -532,7 +532,7 @@ static u8 UpdateNormalPaletteFade(void) else { selectedPalettes = gPaletteFade_selectedPalettes >> 16; - paletteOffset = 256; + paletteOffset = OBJ_PLTT_OFFSET; } while (selectedPalettes) @@ -683,13 +683,13 @@ static u8 UpdateFastPaletteFade(void) if (gPaletteFade.objPaletteToggle) { - paletteOffsetStart = 256; - paletteOffsetEnd = 512; + paletteOffsetStart = OBJ_PLTT_OFFSET; + paletteOffsetEnd = PLTT_BUFFER_SIZE; } else { paletteOffsetStart = 0; - paletteOffsetEnd = 256; + paletteOffsetEnd = OBJ_PLTT_OFFSET; } switch (gPaletteFade_submode) diff --git a/src/party_menu.c b/src/party_menu.c index 191c9417e7..abed29e78c 100755 --- a/src/party_menu.c +++ b/src/party_menu.c @@ -777,11 +777,11 @@ static bool8 AllocPartyMenuBgGfx(void) return FALSE; } -static void PartyPaletteBufferCopy(u8 offset) +static void PartyPaletteBufferCopy(u8 palNum) { - offset *= 16; - CpuCopy16(&gPlttBufferUnfaded[0x30], &gPlttBufferUnfaded[offset], 32); - CpuCopy16(&gPlttBufferUnfaded[0x30], &gPlttBufferFaded[offset], 32); + u8 offset = PLTT_ID(palNum); + CpuCopy16(&gPlttBufferUnfaded[BG_PLTT_ID(3)], &gPlttBufferUnfaded[offset], PLTT_SIZE_4BPP); + CpuCopy16(&gPlttBufferUnfaded[BG_PLTT_ID(3)], &gPlttBufferFaded[offset], PLTT_SIZE_4BPP); } static void FreePartyPointers(void) @@ -2196,16 +2196,16 @@ static void DrawEmptySlot(u8 windowId) BlitBitmapToPartyWindow(windowId, sSlotTilemap_WideEmpty, 18, 0, 0, 18, 3); } -#define LOAD_PARTY_BOX_PAL(paletteIds, paletteOffsets) \ -{ \ - LoadPalette(GetPartyMenuPalBufferPtr(paletteIds[0]), paletteOffsets[0] + palNum, PLTT_SIZEOF(1)); \ - LoadPalette(GetPartyMenuPalBufferPtr(paletteIds[1]), paletteOffsets[1] + palNum, PLTT_SIZEOF(1)); \ - LoadPalette(GetPartyMenuPalBufferPtr(paletteIds[2]), paletteOffsets[2] + palNum, PLTT_SIZEOF(1)); \ +#define LOAD_PARTY_BOX_PAL(paletteIds, paletteOffsets) \ +{ \ + LoadPalette(GetPartyMenuPalBufferPtr(paletteIds[0]), paletteOffsets[0] + palOffset, PLTT_SIZEOF(1)); \ + LoadPalette(GetPartyMenuPalBufferPtr(paletteIds[1]), paletteOffsets[1] + palOffset, PLTT_SIZEOF(1)); \ + LoadPalette(GetPartyMenuPalBufferPtr(paletteIds[2]), paletteOffsets[2] + palOffset, PLTT_SIZEOF(1)); \ } static void LoadPartyBoxPalette(struct PartyMenuBox *menuBox, u8 palFlags) { - u8 palNum = GetWindowAttribute(menuBox->windowId, WINDOW_PALETTE_NUM) * 16; + u8 palOffset = BG_PLTT_ID(GetWindowAttribute(menuBox->windowId, WINDOW_PALETTE_NUM)); if (palFlags & PARTY_PAL_NO_MON) { @@ -2333,7 +2333,7 @@ static void DisplayPartyPokemonGenderNidoranCheck(struct Pokemon *mon, struct Pa static void DisplayPartyPokemonGender(u8 gender, u16 species, u8 *nickname, struct PartyMenuBox *menuBox) { - u8 palNum = GetWindowAttribute(menuBox->windowId, WINDOW_PALETTE_NUM) * 16; + u8 palOffset = BG_PLTT_ID(GetWindowAttribute(menuBox->windowId, WINDOW_PALETTE_NUM)); if (species == SPECIES_NONE) return; @@ -2342,13 +2342,13 @@ static void DisplayPartyPokemonGender(u8 gender, u16 species, u8 *nickname, stru switch (gender) { case MON_MALE: - LoadPalette(GetPartyMenuPalBufferPtr(sGenderMalePalIds[0]), sGenderPalOffsets[0] + palNum, PLTT_SIZEOF(1)); - LoadPalette(GetPartyMenuPalBufferPtr(sGenderMalePalIds[1]), sGenderPalOffsets[1] + palNum, PLTT_SIZEOF(1)); + LoadPalette(GetPartyMenuPalBufferPtr(sGenderMalePalIds[0]), sGenderPalOffsets[0] + palOffset, PLTT_SIZEOF(1)); + LoadPalette(GetPartyMenuPalBufferPtr(sGenderMalePalIds[1]), sGenderPalOffsets[1] + palOffset, PLTT_SIZEOF(1)); DisplayPartyPokemonBarDetail(menuBox->windowId, gText_MaleSymbol, 2, &menuBox->infoRects->dimensions[8]); break; case MON_FEMALE: - LoadPalette(GetPartyMenuPalBufferPtr(sGenderFemalePalIds[0]), sGenderPalOffsets[0] + palNum, PLTT_SIZEOF(1)); - LoadPalette(GetPartyMenuPalBufferPtr(sGenderFemalePalIds[1]), sGenderPalOffsets[1] + palNum, PLTT_SIZEOF(1)); + LoadPalette(GetPartyMenuPalBufferPtr(sGenderFemalePalIds[0]), sGenderPalOffsets[0] + palOffset, PLTT_SIZEOF(1)); + LoadPalette(GetPartyMenuPalBufferPtr(sGenderFemalePalIds[1]), sGenderPalOffsets[1] + palOffset, PLTT_SIZEOF(1)); DisplayPartyPokemonBarDetail(menuBox->windowId, gText_FemaleSymbol, 2, &menuBox->infoRects->dimensions[8]); break; } @@ -2402,23 +2402,23 @@ static void DisplayPartyPokemonHPBarCheck(struct Pokemon *mon, struct PartyMenuB static void DisplayPartyPokemonHPBar(u16 hp, u16 maxhp, struct PartyMenuBox *menuBox) { - u8 palNum = GetWindowAttribute(menuBox->windowId, WINDOW_PALETTE_NUM) * 16; + u8 palOffset = BG_PLTT_ID(GetWindowAttribute(menuBox->windowId, WINDOW_PALETTE_NUM)); u8 hpFraction; switch (GetHPBarLevel(hp, maxhp)) { case HP_BAR_GREEN: case HP_BAR_FULL: - LoadPalette(GetPartyMenuPalBufferPtr(sHPBarGreenPalIds[0]), sHPBarPalOffsets[0] + palNum, PLTT_SIZEOF(1)); - LoadPalette(GetPartyMenuPalBufferPtr(sHPBarGreenPalIds[1]), sHPBarPalOffsets[1] + palNum, PLTT_SIZEOF(1)); + LoadPalette(GetPartyMenuPalBufferPtr(sHPBarGreenPalIds[0]), sHPBarPalOffsets[0] + palOffset, PLTT_SIZEOF(1)); + LoadPalette(GetPartyMenuPalBufferPtr(sHPBarGreenPalIds[1]), sHPBarPalOffsets[1] + palOffset, PLTT_SIZEOF(1)); break; case HP_BAR_YELLOW: - LoadPalette(GetPartyMenuPalBufferPtr(sHPBarYellowPalIds[0]), sHPBarPalOffsets[0] + palNum, PLTT_SIZEOF(1)); - LoadPalette(GetPartyMenuPalBufferPtr(sHPBarYellowPalIds[1]), sHPBarPalOffsets[1] + palNum, PLTT_SIZEOF(1)); + LoadPalette(GetPartyMenuPalBufferPtr(sHPBarYellowPalIds[0]), sHPBarPalOffsets[0] + palOffset, PLTT_SIZEOF(1)); + LoadPalette(GetPartyMenuPalBufferPtr(sHPBarYellowPalIds[1]), sHPBarPalOffsets[1] + palOffset, PLTT_SIZEOF(1)); break; default: - LoadPalette(GetPartyMenuPalBufferPtr(sHPBarRedPalIds[0]), sHPBarPalOffsets[0] + palNum, PLTT_SIZEOF(1)); - LoadPalette(GetPartyMenuPalBufferPtr(sHPBarRedPalIds[1]), sHPBarPalOffsets[1] + palNum, PLTT_SIZEOF(1)); + LoadPalette(GetPartyMenuPalBufferPtr(sHPBarRedPalIds[0]), sHPBarPalOffsets[0] + palOffset, PLTT_SIZEOF(1)); + LoadPalette(GetPartyMenuPalBufferPtr(sHPBarRedPalIds[1]), sHPBarPalOffsets[1] + palOffset, PLTT_SIZEOF(1)); break; } @@ -4781,7 +4781,7 @@ static void Task_LearnedMove(u8 taskId) if (move[1] == 0) { AdjustFriendship(mon, FRIENDSHIP_EVENT_LEARN_TMHM); - if (item < ITEM_HM01_CUT) + if (item < ITEM_HM01) RemoveBagItem(item, 1); } GetMonNickname(mon, gStringVar1); diff --git a/src/pokeball.c b/src/pokeball.c index 5d48bdd2b3..3340ea76c4 100644 --- a/src/pokeball.c +++ b/src/pokeball.c @@ -1039,13 +1039,13 @@ static u8 LaunchBallFadeMonTaskForPokeball(bool8 unFadeLater, u8 spritePalNum, u #define sTrigIdx data[7] // Pokeball in Birch intro, and when receiving via trade -void CreatePokeballSpriteToReleaseMon(u8 monSpriteId, u8 monPalNum, u8 x, u8 y, u8 oamPriority, u8 subpriortiy, u8 delay, u32 fadePalettes, u16 species) +void CreatePokeballSpriteToReleaseMon(u8 monSpriteId, u8 monPalNum, u8 x, u8 y, u8 oamPriority, u8 subpriority, u8 delay, u32 fadePalettes, u16 species) { u8 spriteId; LoadCompressedSpriteSheetUsingHeap(&gBallSpriteSheets[BALL_POKE]); LoadCompressedSpritePaletteUsingHeap(&gBallSpritePalettes[BALL_POKE]); - spriteId = CreateSprite(&gBallSpriteTemplates[BALL_POKE], x, y, subpriortiy); + spriteId = CreateSprite(&gBallSpriteTemplates[BALL_POKE], x, y, subpriority); gSprites[spriteId].sMonSpriteId = monSpriteId; gSprites[spriteId].sFinalMonX = gSprites[monSpriteId].x; diff --git a/src/pokedex.c b/src/pokedex.c index 88558d6f2c..3f5ab22431 100644 --- a/src/pokedex.c +++ b/src/pokedex.c @@ -93,6 +93,13 @@ enum NAME_YZ, }; +enum { + WIN_INFO, + WIN_FOOTPRINT, + WIN_CRY_WAVE, + WIN_VU_METER, +}; + // For scrolling search parameter #define MAX_SEARCH_PARAM_ON_SCREEN 6 #define MAX_SEARCH_PARAM_CURSOR_POS (MAX_SEARCH_PARAM_ON_SCREEN - 1) @@ -888,11 +895,6 @@ static const struct BgTemplate sInfoScreen_BgTemplate[] = } }; -#define WIN_INFO 0 -#define WIN_FOOTPRINT 1 -#define WIN_CRY_WAVE 2 -#define WIN_VU_METER 3 - static const struct WindowTemplate sInfoScreen_WindowTemplates[] = { [WIN_INFO] = @@ -3264,7 +3266,7 @@ static void Task_LoadInfoScreen(u8 taskId) case 4: PrintMonInfo(sPokedexListItem->dexNum, sPokedexView->dexMode == DEX_MODE_HOENN ? FALSE : TRUE, sPokedexListItem->owned, 0); if (!sPokedexListItem->owned) - LoadPalette(gPlttBufferUnfaded + 1, BG_PLTT_ID(3) + 1, PLTT_SIZEOF(16 - 1)); + LoadPalette(&gPlttBufferUnfaded[BG_PLTT_ID(0) + 1], BG_PLTT_ID(3) + 1, PLTT_SIZEOF(16 - 1)); CopyWindowToVram(WIN_INFO, COPYWIN_FULL); CopyBgTilemapBufferToVram(1); CopyBgTilemapBufferToVram(2); @@ -3753,7 +3755,7 @@ static void Task_LoadSizeScreen(u8 taskId) StringCopy(string, gText_SizeComparedTo); StringAppend(string, gSaveBlock2Ptr->playerName); - PrintInfoScreenText(string, GetStringCenterAlignXOffset(FONT_NORMAL, string, 0xF0), 0x79); + PrintInfoScreenText(string, GetStringCenterAlignXOffset(FONT_NORMAL, string, DISPLAY_WIDTH), 121); gMain.state++; } break; @@ -4070,14 +4072,14 @@ static void Task_ExitCaughtMonPage(u8 taskId) static void SpriteCB_SlideCaughtMonToCenter(struct Sprite *sprite) { - if (sprite->x < 0x78) + if (sprite->x < DISPLAY_WIDTH / 2) sprite->x += 2; - if (sprite->x > 0x78) + if (sprite->x > DISPLAY_WIDTH / 2) sprite->x -= 2; - if (sprite->y < 0x50) + if (sprite->y < DISPLAY_HEIGHT / 2) sprite->y += 1; - if (sprite->y > 0x50) + if (sprite->y > DISPLAY_HEIGHT / 2) sprite->y -= 1; } @@ -4101,7 +4103,7 @@ static void PrintMonInfo(u32 num, u32 value, u32 owned, u32 newEntry) const u8 *description; if (newEntry) - PrintInfoScreenText(gText_PokedexRegistration, GetStringCenterAlignXOffset(FONT_NORMAL, gText_PokedexRegistration, 0xF0), 0); + PrintInfoScreenText(gText_PokedexRegistration, GetStringCenterAlignXOffset(FONT_NORMAL, gText_PokedexRegistration, DISPLAY_WIDTH), 0); if (value == 0) value = NationalToHoennOrder(num); else @@ -4140,7 +4142,7 @@ static void PrintMonInfo(u32 num, u32 value, u32 owned, u32 newEntry) description = gPokedexEntries[num].description; else description = sExpandedPlaceholder_PokedexDescription; - PrintInfoScreenText(description, GetStringCenterAlignXOffset(FONT_NORMAL, description, 0xF0), 0x5F); + PrintInfoScreenText(description, GetStringCenterAlignXOffset(FONT_NORMAL, description, DISPLAY_WIDTH), 95); } static void PrintMonHeight(u16 height, u8 left, u8 top) @@ -4570,26 +4572,38 @@ static void PrintDecimalNum(u8 windowId, u16 num, u8 left, u8 top) PrintInfoSubMenuText(windowId, str, left, top); } +// The footprints are drawn on WIN_FOOTPRINT, which uses BG palette 15 (loaded with graphics/text_window/message_box.gbapal) +// The footprint pixels are stored as 1BPP, and set to the below color index in this palette when converted to 4BPP. +#define FOOTPRINT_COLOR_IDX 2 + +#define NUM_FOOTPRINT_TILES 4 + static void DrawFootprint(u8 windowId, u16 dexNum) { - u8 footprint[32 * 4]; + u8 footprint4bpp[TILE_SIZE_4BPP * NUM_FOOTPRINT_TILES]; const u8 * footprintGfx = gMonFootprintTable[NationalPokedexNumToSpecies(dexNum)]; u16 tileIdx = 0; u16 i, j; - for (i = 0; i < 32; i++) + for (i = 0; i < TILE_SIZE_1BPP * NUM_FOOTPRINT_TILES; i++) { - u8 tile = footprintGfx[i]; + u8 footprint1bpp = footprintGfx[i]; + + // Convert the 8 pixels in the above 1BPP byte to 4BPP. + // Each iteration creates one 4BPP byte (2 pixels), + // so we need 4 iterations to do all 8 pixels. for (j = 0; j < 4; j++) { - u8 value = ((tile >> (2 * j)) & 1 ? 2 : 0); - if (tile & (2 << (2 * j))) - value |= 0x20; - footprint[tileIdx] = value; + u8 tile = 0; + if (footprint1bpp & (1 << (2 * j))) + tile |= FOOTPRINT_COLOR_IDX; // Set pixel + if (footprint1bpp & (2 << (2 * j))) + tile |= FOOTPRINT_COLOR_IDX << 4; // Set pixel + footprint4bpp[tileIdx] = tile; tileIdx++; } } - CopyToWindowPixelBuffer(windowId, footprint, sizeof(footprint), 0); + CopyToWindowPixelBuffer(windowId, footprint4bpp, sizeof(footprint4bpp), 0); } // Unused Ruby/Sapphire function. diff --git a/src/pokedex_area_region_map.c b/src/pokedex_area_region_map.c index ff32f8eef1..cd2975473a 100644 --- a/src/pokedex_area_region_map.c +++ b/src/pokedex_area_region_map.c @@ -8,7 +8,7 @@ static EWRAM_DATA u8 *sPokedexAreaMapBgNum = NULL; -static const u16 sPokedexAreaMap_Pal[] = INCBIN_U16("graphics/pokedex/region_map.gbapal"); +static const u16 ALIGNED(4) sPokedexAreaMap_Pal[] = INCBIN_U16("graphics/pokedex/region_map.gbapal"); static const u32 sPokedexAreaMap_Gfx[] = INCBIN_U32("graphics/pokedex/region_map.8bpp.lz"); static const u32 sPokedexAreaMap_Tilemap[] = INCBIN_U32("graphics/pokedex/region_map.bin.lz"); static const u32 sPokedexAreaMapAffine_Gfx[] = INCBIN_U32("graphics/pokedex/region_map_affine.8bpp.lz"); @@ -41,7 +41,7 @@ void LoadPokedexAreaMapGfx(const struct PokedexAreaMapTemplate *template) ChangeBgX(template->bg, 0, BG_COORD_SET); ChangeBgY(template->bg, 0, BG_COORD_SET); SetBgAttribute(template->bg, BG_ATTR_PALETTEMODE, 1); - CpuCopy32(sPokedexAreaMap_Pal, &gPlttBufferUnfaded[0x70], sizeof(sPokedexAreaMap_Pal)); + CpuCopy32(sPokedexAreaMap_Pal, &gPlttBufferUnfaded[BG_PLTT_ID(7)], sizeof(sPokedexAreaMap_Pal)); *sPokedexAreaMapBgNum = template->bg; } diff --git a/src/pokedex_area_screen.c b/src/pokedex_area_screen.c index 01cbacb447..f9181a985b 100755 --- a/src/pokedex_area_screen.c +++ b/src/pokedex_area_screen.c @@ -224,7 +224,7 @@ static bool8 DrawAreaGlow(void) case 3: if (!FreeTempTileDataBuffersIfPossible()) { - CpuCopy32(sAreaGlow_Pal, &gPlttBufferUnfaded[GLOW_PALETTE * 16], sizeof(sAreaGlow_Pal)); + CpuCopy32(sAreaGlow_Pal, &gPlttBufferUnfaded[BG_PLTT_ID(GLOW_PALETTE)], sizeof(sAreaGlow_Pal)); sPokedexAreaScreen->drawAreaGlowState++; } return TRUE; diff --git a/src/pokemon.c b/src/pokemon.c index 108f1ffa3e..c931352c09 100644 --- a/src/pokemon.c +++ b/src/pokemon.c @@ -1346,10 +1346,10 @@ static const u16 sHoennToNationalOrder[NUM_SPECIES - 1] = const struct SpindaSpot gSpindaSpotGraphics[] = { - {.x = 16, .y = 7, .image = INCBIN_U16("graphics/spinda_spots/spot_0.bin")}, - {.x = 40, .y = 8, .image = INCBIN_U16("graphics/spinda_spots/spot_1.bin")}, - {.x = 22, .y = 25, .image = INCBIN_U16("graphics/spinda_spots/spot_2.bin")}, - {.x = 34, .y = 26, .image = INCBIN_U16("graphics/spinda_spots/spot_3.bin")} + {.x = 16, .y = 7, .image = INCBIN_U16("graphics/spinda_spots/spot_0.1bpp")}, + {.x = 40, .y = 8, .image = INCBIN_U16("graphics/spinda_spots/spot_1.1bpp")}, + {.x = 22, .y = 25, .image = INCBIN_U16("graphics/spinda_spots/spot_2.1bpp")}, + {.x = 34, .y = 26, .image = INCBIN_U16("graphics/spinda_spots/spot_3.1bpp")} }; #include "data/pokemon/item_effects.h" @@ -2406,7 +2406,7 @@ void CreateMonWithEVSpread(struct Pokemon *mon, u16 species, u8 level, u8 fixedI void CreateBattleTowerMon(struct Pokemon *mon, struct BattleTowerPokemon *src) { s32 i; - u8 nickname[30]; + u8 nickname[max(32, POKEMON_NAME_BUFFER_SIZE)]; u8 language; u8 value; @@ -2460,7 +2460,7 @@ void CreateBattleTowerMon(struct Pokemon *mon, struct BattleTowerPokemon *src) void CreateBattleTowerMon_HandleLevel(struct Pokemon *mon, struct BattleTowerPokemon *src, bool8 lvl50) { s32 i; - u8 nickname[30]; + u8 nickname[max(32, POKEMON_NAME_BUFFER_SIZE)]; u8 level; u8 language; u8 value; @@ -3622,7 +3622,11 @@ static union PokemonSubstruct *GetSubstruct(struct BoxPokemon *boxMon, u32 perso return substruct; } -u32 GetMonData(struct Pokemon *mon, s32 field, u8 *data) +/* GameFreak called GetMonData with either 2 or 3 arguments, for type + * safety we have a GetMonData macro (in include/pokemon.h) which + * dispatches to either GetMonData2 or GetMonData3 based on the number + * of arguments. */ +u32 GetMonData3(struct Pokemon *mon, s32 field, u8 *data) { u32 ret; @@ -3690,7 +3694,13 @@ u32 GetMonData(struct Pokemon *mon, s32 field, u8 *data) return ret; } -u32 GetBoxMonData(struct BoxPokemon *boxMon, s32 field, u8 *data) +u32 GetMonData2(struct Pokemon *mon, s32 field) __attribute__((alias("GetMonData3"))); + +/* GameFreak called GetBoxMonData with either 2 or 3 arguments, for type + * safety we have a GetBoxMonData macro (in include/pokemon.h) which + * dispatches to either GetBoxMonData2 or GetBoxMonData3 based on the + * number of arguments. */ +u32 GetBoxMonData3(struct BoxPokemon *boxMon, s32 field, u8 *data) { s32 i; u32 retVal = 0; @@ -4049,6 +4059,8 @@ u32 GetBoxMonData(struct BoxPokemon *boxMon, s32 field, u8 *data) return retVal; } +u32 GetBoxMonData2(struct BoxPokemon *boxMon, s32 field) __attribute__((alias("GetBoxMonData3"))); + #define SET8(lhs) (lhs) = *data #define SET16(lhs) (lhs) = data[0] + (data[1] << 8) #define SET32(lhs) (lhs) = data[0] + (data[1] << 8) + (data[2] << 16) + (data[3] << 24) @@ -4699,7 +4711,7 @@ void CopyPlayerPartyMonToBattleData(u8 battlerId, u8 partyIndex) { u16 *hpSwitchout; s32 i; - u8 nickname[POKEMON_NAME_LENGTH * 2]; + u8 nickname[POKEMON_NAME_BUFFER_SIZE]; gBattleMons[battlerId].species = GetMonData(&gPlayerParty[partyIndex], MON_DATA_SPECIES, NULL); gBattleMons[battlerId].item = GetMonData(&gPlayerParty[partyIndex], MON_DATA_HELD_ITEM, NULL); @@ -6269,15 +6281,26 @@ u32 CanMonLearnTMHM(struct Pokemon *mon, u8 tm) { return 0; } - else if (tm < 32) + + // Fewer than 64 moves, use GF's method (for matching). + if (sizeof(struct TMHMLearnset) <= 8) { - u32 mask = 1 << tm; - return gTMHMLearnsets[species][0] & mask; + if (tm < 32) + { + u32 mask = 1 << tm; + return gTMHMLearnsets[species].as_u32s[0] & mask; + } + else + { + u32 mask = 1 << (tm - 32); + return gTMHMLearnsets[species].as_u32s[1] & mask; + } } else { - u32 mask = 1 << (tm - 32); - return gTMHMLearnsets[species][1] & mask; + u32 index = tm / 32; + u32 mask = 1 << (tm % 32); + return gTMHMLearnsets[species].as_u32s[index] & mask; } } @@ -6287,15 +6310,25 @@ u32 CanSpeciesLearnTMHM(u16 species, u8 tm) { return 0; } - else if (tm < 32) + // Fewer than 64 moves, use GF's method (for matching). + if (sizeof(struct TMHMLearnset) <= 8) { - u32 mask = 1 << tm; - return gTMHMLearnsets[species][0] & mask; + if (tm < 32) + { + u32 mask = 1 << tm; + return gTMHMLearnsets[species].as_u32s[0] & mask; + } + else + { + u32 mask = 1 << (tm - 32); + return gTMHMLearnsets[species].as_u32s[1] & mask; + } } else { - u32 mask = 1 << (tm - 32); - return gTMHMLearnsets[species][1] & mask; + u32 index = tm / 32; + u32 mask = 1 << (tm % 32); + return gTMHMLearnsets[species].as_u32s[index] & mask; } } diff --git a/src/pokemon_icon.c b/src/pokemon_icon.c index 237f728381..8e37018cba 100644 --- a/src/pokemon_icon.c +++ b/src/pokemon_icon.c @@ -1199,16 +1199,12 @@ const u8 *GetMonIconTiles(u16 species, bool32 handleDeoxys) void TryLoadAllMonIconPalettesAtOffset(u16 offset) { s32 i; - const struct SpritePalette* monIconPalettePtr; - - if (offset <= BG_PLTT_ID(10)) + if (offset <= BG_PLTT_ID(16 - ARRAY_COUNT(gMonIconPaletteTable))) { - monIconPalettePtr = gMonIconPaletteTable; - for (i = ARRAY_COUNT(gMonIconPaletteTable) - 1; i >= 0; i--) + for (i = 0; i < (int)ARRAY_COUNT(gMonIconPaletteTable); i++) { - LoadPalette(monIconPalettePtr->data, offset, PLTT_SIZE_4BPP); - offset += 0x10; - monIconPalettePtr++; + LoadPalette(gMonIconPaletteTable[i].data, offset, PLTT_SIZE_4BPP); + offset += 16; } } } diff --git a/src/pokemon_storage_system.c b/src/pokemon_storage_system.c index 8649e3ce79..9db0d77c6c 100644 --- a/src/pokemon_storage_system.c +++ b/src/pokemon_storage_system.c @@ -550,8 +550,8 @@ struct PokemonStorageSystemData u16 *displayMonTilePtr; struct Sprite *displayMonSprite; u16 displayMonPalBuffer[0x40]; - u8 tileBuffer[MON_PIC_SIZE * MAX_MON_PIC_FRAMES]; - u8 itemIconBuffer[0x800]; + u8 ALIGNED(4) tileBuffer[MON_PIC_SIZE * MAX_MON_PIC_FRAMES]; + u8 ALIGNED(4) itemIconBuffer[0x800]; u8 wallpaperBgTilemapBuffer[0x1000]; u8 displayMenuTilemapBuffer[0x800]; }; @@ -5490,7 +5490,7 @@ static void InitBoxTitle(u8 boxId) tagIndex = IndexOfSpritePaletteTag(PALTAG_BOX_TITLE); sStorage->boxTitlePalOffset = OBJ_PLTT_ID(tagIndex) + 14; - sStorage->wallpaperPalBits |= 0x10000 << tagIndex; + sStorage->wallpaperPalBits |= (1 << 16) << tagIndex; // The below seems intended to have separately tracked // the incoming wallpaper title's palette, but as they now @@ -5498,7 +5498,7 @@ static void InitBoxTitle(u8 boxId) // this is redundant along with the use of boxTitleAltPalOffset tagIndex = IndexOfSpritePaletteTag(PALTAG_BOX_TITLE); sStorage->boxTitleAltPalOffset = OBJ_PLTT_ID(tagIndex) + 14; - sStorage->wallpaperPalBits |= 0x10000 << tagIndex; + sStorage->wallpaperPalBits |= (1 << 16) << tagIndex; StringCopyPadded(sStorage->boxTitleText, GetBoxNamePtr(boxId), 0, BOX_NAME_LENGTH); DrawTextWindowAndBufferTiles(sStorage->boxTitleText, sStorage->boxTitleTiles, 0, 0, 2); @@ -5616,9 +5616,9 @@ static void CycleBoxTitleColor(void) u8 boxId = StorageGetCurrentBox(); u8 wallpaperId = GetBoxWallpaper(boxId); if (sStorage->boxTitleCycleId == 0) - CpuCopy16(sBoxTitleColors[wallpaperId], gPlttBufferUnfaded + sStorage->boxTitlePalOffset, 4); + CpuCopy16(sBoxTitleColors[wallpaperId], &gPlttBufferUnfaded[sStorage->boxTitlePalOffset], PLTT_SIZEOF(2)); else - CpuCopy16(sBoxTitleColors[wallpaperId], gPlttBufferUnfaded + sStorage->boxTitleAltPalOffset, 4); + CpuCopy16(sBoxTitleColors[wallpaperId], &gPlttBufferUnfaded[sStorage->boxTitleAltPalOffset], PLTT_SIZEOF(2)); } static s16 GetBoxTitleBaseX(const u8 *string) @@ -8746,8 +8746,7 @@ static void CreateItemIconSprites(void) LoadCompressedSpriteSheet(&spriteSheet); sStorage->itemIcons[i].tiles = GetSpriteTileStartByTag(spriteSheet.tag) * TILE_SIZE_4BPP + (void *)(OBJ_VRAM0); sStorage->itemIcons[i].palIndex = AllocSpritePalette(PALTAG_ITEM_ICON_0 + i); - sStorage->itemIcons[i].palIndex *= 16; - sStorage->itemIcons[i].palIndex += 0x100; + sStorage->itemIcons[i].palIndex = OBJ_PLTT_ID(sStorage->itemIcons[i].palIndex); spriteTemplate.tileTag = GFXTAG_ITEM_ICON_0 + i; spriteTemplate.paletteTag = PALTAG_ITEM_ICON_0 + i; spriteId = CreateSprite(&spriteTemplate, 0, 0, 11); diff --git a/src/pokenav_conditions.c b/src/pokenav_conditions.c index 05f86cab2f..1ebf6edbe9 100644 --- a/src/pokenav_conditions.c +++ b/src/pokenav_conditions.c @@ -348,7 +348,7 @@ static u8 *CopyConditionMonNameGender(u8 *str, u16 listId, bool8 skipPadding) *(str++) = TEXT_COLOR_LIGHT_BLUE; if (GetBoxOrPartyMonData(boxId, monId, MON_DATA_IS_EGG, NULL)) - return StringCopyPadded(str, gText_EggNickname, CHAR_SPACE, 12); + return StringCopyPadded(str, gText_EggNickname, CHAR_SPACE, POKEMON_NAME_LENGTH + 2); GetBoxOrPartyMonData(boxId, monId, MON_DATA_NICKNAME, str); StringGet_Nickname(str); @@ -445,7 +445,7 @@ static void CopyMonNameGenderLocation(s16 listId, u8 loadId) } else { - for (i = 0; i < 12; i++) + for (i = 0; i < POKEMON_NAME_LENGTH + 2; i++) menu->nameText[loadId][i] = CHAR_SPACE; menu->nameText[loadId][i] = EOS; diff --git a/src/pokenav_conditions_gfx.c b/src/pokenav_conditions_gfx.c index e382cbf699..9f4b2db612 100644 --- a/src/pokenav_conditions_gfx.c +++ b/src/pokenav_conditions_gfx.c @@ -116,10 +116,12 @@ static const LoopedTask sLoopedTaskFuncs[] = [CONDITION_FUNC_CLOSE_MARKINGS] = LoopedTask_CloseMonMarkingsWindow }; +typedef u8 ALIGNED(4) TilemapBuffer[BG_SCREEN_SIZE]; + struct Pokenav_ConditionMenuGfx { u32 loopedTaskId; - u8 tilemapBuffers[3][BG_SCREEN_SIZE]; + TilemapBuffer tilemapBuffers[3]; u8 filler[2]; u8 partyPokeballSpriteIds[PARTY_SIZE + 1]; u32 (*callback)(void); diff --git a/src/pokenav_conditions_search_results.c b/src/pokenav_conditions_search_results.c index d3764cb802..1817398020 100644 --- a/src/pokenav_conditions_search_results.c +++ b/src/pokenav_conditions_search_results.c @@ -432,7 +432,7 @@ static u32 LoopedTask_OpenConditionSearchResults(s32 state) SetBgTilemapBuffer(1, gfx->buff); CopyToBgTilemapBuffer(1, sConditionSearchResultTilemap, 0, 0); CopyBgTilemapBufferToVram(1); - CopyPaletteIntoBufferUnfaded(sConditionSearchResultFramePal, BG_PLTT_ID(1), PLTT_SIZE_4BPP); + CopyPaletteIntoBufferUnfaded(sConditionSearchResultFramePal, BG_PLTT_ID(1), sizeof(sConditionSearchResultFramePal)); CopyBgTilemapBufferToVram(1); return LT_INC_AND_PAUSE; case 1: @@ -444,7 +444,7 @@ static u32 LoopedTask_OpenConditionSearchResults(s32 state) case 2: if (FreeTempTileDataBuffersIfPossible()) return LT_PAUSE; - CopyPaletteIntoBufferUnfaded(sListBg_Pal, BG_PLTT_ID(2), PLTT_SIZE_4BPP); + CopyPaletteIntoBufferUnfaded(sListBg_Pal, BG_PLTT_ID(2), sizeof(sListBg_Pal)); CreateSearchResultsList(); return LT_INC_AND_PAUSE; case 3: diff --git a/src/pokenav_main_menu.c b/src/pokenav_main_menu.c index bfc5ba0cb4..761f572d6b 100644 --- a/src/pokenav_main_menu.c +++ b/src/pokenav_main_menu.c @@ -443,7 +443,7 @@ static u32 LoopedTask_SlideMenuHeaderDown(s32 state) void CopyPaletteIntoBufferUnfaded(const u16 *palette, u32 bufferOffset, u32 size) { - CpuCopy16(palette, gPlttBufferUnfaded + bufferOffset, size); + CpuCopy16(palette, &gPlttBufferUnfaded[bufferOffset], size); } void Pokenav_AllocAndLoadPalettes(const struct SpritePalette *palettes) @@ -468,7 +468,7 @@ void Pokenav_AllocAndLoadPalettes(const struct SpritePalette *palettes) void PokenavFillPalette(u32 palIndex, u16 fillValue) { - CpuFill16(fillValue, gPlttBufferFaded + 0x100 + (palIndex * 16), 16 * sizeof(u16)); + CpuFill16(fillValue, &gPlttBufferFaded[OBJ_PLTT_ID(palIndex)], PLTT_SIZE_4BPP); } void PokenavCopyPalette(const u16 *src, const u16 *dest, int size, int a3, int a4, u16 *palette) diff --git a/src/pokenav_match_call_data.c b/src/pokenav_match_call_data.c index 2e8cc40b5c..f6d71009bb 100644 --- a/src/pokenav_match_call_data.c +++ b/src/pokenav_match_call_data.c @@ -164,7 +164,7 @@ static const match_call_text_data_t sMrStoneTextScripts[] = { { MatchCall_Text_MrStone2, FLAG_ENABLE_MR_STONE_POKENAV, 0xFFFF }, { MatchCall_Text_MrStone3, FLAG_DELIVERED_STEVEN_LETTER, 0xFFFF }, { MatchCall_Text_MrStone4, FLAG_RECEIVED_EXP_SHARE, 0xFFFF }, - { MatchCall_Text_MrStone5, FLAG_RECEIVED_HM04, 0xFFFF }, + { MatchCall_Text_MrStone5, FLAG_RECEIVED_HM_STRENGTH, 0xFFFF }, { MatchCall_Text_MrStone6, FLAG_DEFEATED_PETALBURG_GYM, 0xFFFF }, { MatchCall_Text_MrStone7, FLAG_RECEIVED_CASTFORM, 0xFFFF }, { MatchCall_Text_MrStone8, FLAG_GROUDON_AWAKENED_MAGMA_HIDEOUT, 0xFFFF }, @@ -260,7 +260,7 @@ static const match_call_text_data_t sMayTextScripts[] = { { MatchCall_Text_May2, FLAG_DEFEATED_DEWFORD_GYM, 0xFFFF }, { MatchCall_Text_May3, FLAG_DELIVERED_DEVON_GOODS, 0xFFFF }, { MatchCall_Text_May4, FLAG_HIDE_MAUVILLE_CITY_WALLY, 0xFFFF }, - { MatchCall_Text_May5, FLAG_RECEIVED_HM04, 0xFFFF }, + { MatchCall_Text_May5, FLAG_RECEIVED_HM_STRENGTH, 0xFFFF }, { MatchCall_Text_May6, FLAG_DEFEATED_LAVARIDGE_GYM, 0xFFFF }, { MatchCall_Text_May7, FLAG_DEFEATED_PETALBURG_GYM, 0xFFFF }, { MatchCall_Text_May8, FLAG_RECEIVED_CASTFORM, 0xFFFF }, @@ -289,7 +289,7 @@ static const match_call_text_data_t sBrendanTextScripts[] = { { MatchCall_Text_Brendan2, FLAG_DEFEATED_DEWFORD_GYM, 0xFFFF }, { MatchCall_Text_Brendan3, FLAG_DELIVERED_DEVON_GOODS, 0xFFFF }, { MatchCall_Text_Brendan4, FLAG_HIDE_MAUVILLE_CITY_WALLY, 0xFFFF }, - { MatchCall_Text_Brendan5, FLAG_RECEIVED_HM04, 0xFFFF }, + { MatchCall_Text_Brendan5, FLAG_RECEIVED_HM_STRENGTH, 0xFFFF }, { MatchCall_Text_Brendan6, FLAG_DEFEATED_LAVARIDGE_GYM, 0xFFFF }, { MatchCall_Text_Brendan7, FLAG_DEFEATED_PETALBURG_GYM, 0xFFFF }, { MatchCall_Text_Brendan8, FLAG_RECEIVED_CASTFORM, 0xFFFF }, diff --git a/src/pokenav_match_call_gfx.c b/src/pokenav_match_call_gfx.c index 1747d3ef0b..4271e2ff23 100755 --- a/src/pokenav_match_call_gfx.c +++ b/src/pokenav_match_call_gfx.c @@ -333,7 +333,7 @@ static u32 LoopedTask_OpenMatchCall(s32 state) SetBgTilemapBuffer(2, gfx->bgTilemapBuffer2); CopyToBgTilemapBuffer(2, sMatchCallUI_Tilemap, 0, 0); CopyBgTilemapBufferToVram(2); - CopyPaletteIntoBufferUnfaded(sMatchCallUI_Pal, BG_PLTT_ID(2), PLTT_SIZE_4BPP); + CopyPaletteIntoBufferUnfaded(sMatchCallUI_Pal, BG_PLTT_ID(2), sizeof(sMatchCallUI_Pal)); CopyBgTilemapBufferToVram(2); return LT_INC_AND_PAUSE; case 1: @@ -343,7 +343,7 @@ static u32 LoopedTask_OpenMatchCall(s32 state) BgDmaFill(1, 0, 0, 1); SetBgTilemapBuffer(1, gfx->bgTilemapBuffer1); FillBgTilemapBufferRect_Palette0(1, 0x1000, 0, 0, 32, 20); - CopyPaletteIntoBufferUnfaded(sCallWindow_Pal, BG_PLTT_ID(1), PLTT_SIZE_4BPP); + CopyPaletteIntoBufferUnfaded(sCallWindow_Pal, BG_PLTT_ID(1), sizeof(sCallWindow_Pal)); CopyBgTilemapBufferToVram(1); return LT_INC_AND_PAUSE; case 2: @@ -352,7 +352,7 @@ static u32 LoopedTask_OpenMatchCall(s32 state) LoadCallWindowAndFade(gfx); DecompressAndCopyTileDataToVram(3, sPokeball_Gfx, 0, 0, 0); - CopyPaletteIntoBufferUnfaded(sListWindow_Pal, BG_PLTT_ID(3), PLTT_SIZE_4BPP); + CopyPaletteIntoBufferUnfaded(sListWindow_Pal, BG_PLTT_ID(3), sizeof(sListWindow_Pal)); CopyPaletteIntoBufferUnfaded(sPokeball_Pal, BG_PLTT_ID(5), PLTT_SIZE_4BPP); return LT_INC_AND_PAUSE; case 3: @@ -913,9 +913,9 @@ static void Task_FlashPokeballIcons(u8 taskId) tSinIdx += 4; tSinIdx &= 0x7F; tSinVal = gSineTable[tSinIdx] >> 4; - PokenavCopyPalette(sPokeball_Pal, &sPokeball_Pal[0x10], 0x10, 0x10, tSinVal, &gPlttBufferUnfaded[0x50]); + PokenavCopyPalette(sPokeball_Pal, &sPokeball_Pal[0x10], 0x10, 0x10, tSinVal, &gPlttBufferUnfaded[BG_PLTT_ID(5)]); if (!gPaletteFade.active) - CpuCopy32(&gPlttBufferUnfaded[0x50], &gPlttBufferFaded[0x50], 0x20); + CpuCopy32(&gPlttBufferUnfaded[BG_PLTT_ID(5)], &gPlttBufferFaded[BG_PLTT_ID(5)], PLTT_SIZE_4BPP); } } diff --git a/src/pokenav_menu_handler_gfx.c b/src/pokenav_menu_handler_gfx.c index 3367442362..ede88affdb 100644 --- a/src/pokenav_menu_handler_gfx.c +++ b/src/pokenav_menu_handler_gfx.c @@ -470,14 +470,14 @@ static u32 LoopedTask_OpenMenu(s32 state) return LT_PAUSE; DecompressAndCopyTileDataToVram(2, sPokenavDeviceBgTiles, 0, 0, 0); DecompressAndCopyTileDataToVram(2, sPokenavDeviceBgTilemap, 0, 0, 1); - CopyPaletteIntoBufferUnfaded(sPokenavDeviceBgPal, BG_PLTT_ID(2), PLTT_SIZE_4BPP); + CopyPaletteIntoBufferUnfaded(sPokenavDeviceBgPal, BG_PLTT_ID(2), sizeof(sPokenavDeviceBgPal)); return LT_INC_AND_PAUSE; case 2: if (FreeTempTileDataBuffersIfPossible()) return LT_PAUSE; DecompressAndCopyTileDataToVram(3, sPokenavBgDotsTiles, 0, 0, 0); DecompressAndCopyTileDataToVram(3, sPokenavBgDotsTilemap, 0, 0, 1); - CopyPaletteIntoBufferUnfaded(sPokenavBgDotsPal, BG_PLTT_ID(3), PLTT_SIZE_4BPP); + CopyPaletteIntoBufferUnfaded(sPokenavBgDotsPal, BG_PLTT_ID(3), sizeof(sPokenavBgDotsPal)); if (GetPokenavMenuType() == POKENAV_MENU_TYPE_CONDITION || GetPokenavMenuType() == POKENAV_MENU_TYPE_CONDITION_SEARCH) ChangeBgDotsColorToPurple(); return LT_INC_AND_PAUSE; diff --git a/src/pokenav_region_map.c b/src/pokenav_region_map.c index 50f01345c8..f81ff42966 100755 --- a/src/pokenav_region_map.c +++ b/src/pokenav_region_map.c @@ -35,7 +35,7 @@ struct Pokenav_RegionMapGfx u32 loopTaskId; u16 infoWindowId; struct Sprite *cityZoomTextSprites[3]; - u8 tilemapBuffer[BG_SCREEN_SIZE]; + u8 ALIGNED(2) tilemapBuffer[BG_SCREEN_SIZE]; u8 cityZoomPics[NUM_CITY_MAPS][200]; }; @@ -515,7 +515,7 @@ static void LoadPokenavRegionMapGfx(struct Pokenav_RegionMapGfx *state) FillWindowPixelBuffer(state->infoWindowId, PIXEL_FILL(1)); PutWindowTilemap(state->infoWindowId); CopyWindowToVram(state->infoWindowId, COPYWIN_FULL); - CopyPaletteIntoBufferUnfaded(sMapSecInfoWindow_Pal, BG_PLTT_ID(1), PLTT_SIZE_4BPP); + CopyPaletteIntoBufferUnfaded(sMapSecInfoWindow_Pal, BG_PLTT_ID(1), sizeof(sMapSecInfoWindow_Pal)); CopyPaletteIntoBufferUnfaded(gRegionMapCityZoomTiles_Pal, BG_PLTT_ID(3), PLTT_SIZE_4BPP); if (!IsRegionMapZoomed()) ChangeBgY(1, -0x6000, BG_COORD_SET); diff --git a/src/pokenav_ribbons_list.c b/src/pokenav_ribbons_list.c index c1ca7f9d92..344b44f009 100644 --- a/src/pokenav_ribbons_list.c +++ b/src/pokenav_ribbons_list.c @@ -432,7 +432,7 @@ static u32 LoopedTask_OpenRibbonsMonList(s32 state) DecompressAndCopyTileDataToVram(1, sMonRibbonListFrameTiles, 0, 0, 0); SetBgTilemapBuffer(1, menu->buff); CopyToBgTilemapBuffer(1, sMonRibbonListFrameTilemap, 0, 0); - CopyPaletteIntoBufferUnfaded(sMonRibbonListFramePal, BG_PLTT_ID(1), PLTT_SIZE_4BPP); + CopyPaletteIntoBufferUnfaded(sMonRibbonListFramePal, BG_PLTT_ID(1), sizeof(sMonRibbonListFramePal)); CopyBgTilemapBufferToVram(1); return LT_INC_AND_PAUSE; case 1: @@ -447,7 +447,7 @@ static u32 LoopedTask_OpenRibbonsMonList(s32 state) case 2: if (FreeTempTileDataBuffersIfPossible()) return LT_PAUSE; - CopyPaletteIntoBufferUnfaded(sMonRibbonListUi_Pal, BG_PLTT_ID(2), PLTT_SIZE_4BPP); + CopyPaletteIntoBufferUnfaded(sMonRibbonListUi_Pal, BG_PLTT_ID(2), sizeof(sMonRibbonListUi_Pal)); CreateRibbonMonsList(); return LT_INC_AND_PAUSE; case 3: diff --git a/src/pokenav_ribbons_summary.c b/src/pokenav_ribbons_summary.c index 4861b8e0ea..e77f839a80 100644 --- a/src/pokenav_ribbons_summary.c +++ b/src/pokenav_ribbons_summary.c @@ -584,7 +584,7 @@ static u32 LoopedTask_OpenRibbonsSummaryMenu(s32 state) SetBgTilemapBuffer(1, menu->tilemapBuffers[1]); FillBgTilemapBufferRect_Palette0(1, 0, 0, 0, 32, 20); CopyPaletteIntoBufferUnfaded(sRibbonIcons1_Pal, BG_PLTT_ID(2), 5 * PLTT_SIZE_4BPP); - CopyPaletteIntoBufferUnfaded(sMonInfo_Pal, BG_PLTT_ID(10), PLTT_SIZE_4BPP); + CopyPaletteIntoBufferUnfaded(sMonInfo_Pal, BG_PLTT_ID(10), sizeof(sMonInfo_Pal)); CopyBgTilemapBufferToVram(1); return LT_INC_AND_PAUSE; } diff --git a/src/rayquaza_scene.c b/src/rayquaza_scene.c index 38d0dbd75f..48fc296cd0 100644 --- a/src/rayquaza_scene.c +++ b/src/rayquaza_scene.c @@ -62,10 +62,12 @@ enum #define MAX_SMOKE 10 +typedef u8 ALIGNED(4) TilemapBuffer[BG_SCREEN_SIZE]; + struct RayquazaScene { MainCallback exitCallback; - u8 tilemapBuffers[4][BG_SCREEN_SIZE]; + TilemapBuffer tilemapBuffers[4]; u16 unk; // never read u8 animId; bool8 endEarly; diff --git a/src/record_mixing.c b/src/record_mixing.c index d6edd078b7..c5d915a9db 100644 --- a/src/record_mixing.c +++ b/src/record_mixing.c @@ -318,7 +318,7 @@ static void Task_RecordMixing_Main(u8 taskId) sSentRecord = Alloc(sizeof(*sSentRecord)); sReceivedRecords = Alloc(sizeof(*sReceivedRecords) * MAX_LINK_PLAYERS); SetLocalLinkPlayerId(gSpecialVar_0x8005); - VarSet(VAR_TEMP_0, 1); + VarSet(VAR_TEMP_MIXED_RECORDS, 1); sReadyToReceive = FALSE; PrepareExchangePacket(); CreateRecordMixingLights(); @@ -972,14 +972,14 @@ static void ReceiveGiftItem(u16 *item, u8 multiplayerId) { if (!CheckBagHasItem(*item, 1) && !CheckPCHasItem(*item, 1) && AddBagItem(*item, 1)) { - VarSet(VAR_TEMP_1, *item); + VarSet(VAR_TEMP_RECORD_MIX_GIFT_ITEM, *item); StringCopy(gStringVar1, gLinkPlayers[0].name); if (*item == ITEM_EON_TICKET) FlagSet(FLAG_ENABLE_SHIP_SOUTHERN_ISLAND); } else { - VarSet(VAR_TEMP_1, ITEM_NONE); + VarSet(VAR_TEMP_RECORD_MIX_GIFT_ITEM, ITEM_NONE); } } } diff --git a/src/region_map.c b/src/region_map.c index ebe3afb8e9..7d5fe93654 100644 --- a/src/region_map.c +++ b/src/region_map.c @@ -621,7 +621,7 @@ bool8 LoadRegionMapGfx(void) void BlendRegionMap(u16 color, u32 coeff) { BlendPalettes(0x380, coeff, color); - CpuCopy16(gPlttBufferFaded + 0x70, gPlttBufferUnfaded + 0x70, 0x60); + CpuCopy16(&gPlttBufferFaded[BG_PLTT_ID(7)], &gPlttBufferUnfaded[BG_PLTT_ID(7)], 3 * PLTT_SIZE_4BPP); } void FreeRegionMapIconResources(void) @@ -1419,7 +1419,7 @@ void CreateRegionMapCursor(u16 tileTag, u16 paletteTag) sRegionMap->cursorSprite->y = 8 * sRegionMap->cursorPosY + 4; } sRegionMap->cursorSprite->data[1] = 2; - sRegionMap->cursorSprite->data[2] = (IndexOfSpritePaletteTag(paletteTag) << 4) + 0x101; + sRegionMap->cursorSprite->data[2] = OBJ_PLTT_ID(IndexOfSpritePaletteTag(paletteTag)) + 1; sRegionMap->cursorSprite->data[3] = TRUE; } } diff --git a/src/rotating_gate.c b/src/rotating_gate.c index 738bc8cdae..f989b4e595 100644 --- a/src/rotating_gate.c +++ b/src/rotating_gate.c @@ -17,12 +17,10 @@ #define GATE_ROT_ACW(arm, longArm) GATE_ROT(ROTATE_ANTICLOCKWISE, arm, longArm) #define GATE_ROT_NONE 255 -// static functions static void SpriteCallback_RotatingGate(struct Sprite *sprite); static u8 RotatingGate_CreateGate(u8 gateId, s16 deltaX, s16 deltaY); static void RotatingGate_HideGatesOutsideViewport(struct Sprite *sprite); -// enums enum { /* @@ -180,7 +178,6 @@ enum PUZZLE_ROUTE110_TRICK_HOUSE_PUZZLE6, }; -// structure struct RotatingGatePuzzle { s16 x; @@ -189,7 +186,6 @@ struct RotatingGatePuzzle u8 orientation; }; -// .rodata // Fortree static const struct RotatingGatePuzzle sRotatingGate_FortreePuzzleConfig[] = { @@ -219,6 +215,15 @@ static const struct RotatingGatePuzzle sRotatingGate_TrickHousePuzzleConfig[] = {10, 19, GATE_SHAPE_L3, GATE_ORIENTATION_180}, }; +#define MAX_GATES max(ARRAY_COUNT(sRotatingGate_FortreePuzzleConfig), \ + ARRAY_COUNT(sRotatingGate_TrickHousePuzzleConfig)) + +// Rotating gate puzzles use the temp vars as a byte array to track the orientation of each gate. +// The assert below makes sure the existing puzzles don't have too many gates, and aren't quietly +// using vars outside the temp vars. Aside from potentially reading/writing vars being used for +// something else, using vars that persist when exiting the map could softlock the puzzle. +STATIC_ASSERT(MAX_GATES <= (2 * NUM_TEMP_VARS), TooManyRotatingGates) + static const u8 sRotatingGateTiles_1[] = INCBIN_U8("graphics/rotating_gates/l1.4bpp"); static const u8 sRotatingGateTiles_2[] = INCBIN_U8("graphics/rotating_gates/l2.4bpp"); static const u8 sRotatingGateTiles_3[] = INCBIN_U8("graphics/rotating_gates/l3.4bpp"); @@ -640,9 +645,7 @@ static void RotatingGate_ResetAllGateOrientations(void) u8 *ptr = (u8 *)GetVarPointer(VAR_TEMP_0); for (i = 0; i < sRotatingGate_PuzzleCount; i++) - { ptr[i] = sRotatingGate_PuzzleConfig[i].orientation; - } } static s32 RotatingGate_GetGateOrientation(u8 gateId) diff --git a/src/roulette.c b/src/roulette.c index 06561f7988..d311ad0940 100644 --- a/src/roulette.c +++ b/src/roulette.c @@ -860,7 +860,7 @@ static const struct RouletteFlashSettings sFlashData_Colors[NUM_ROULETTE_SLOTS + { { // F_FLASH_COLOR_O_WYNAUT .color = FLASHUTIL_USE_EXISTING_COLOR, - .paletteOffset = 0x5, + .paletteOffset = BG_PLTT_ID(0) + 5, .numColors = 1, .delay = 1, .unk6 = -1, @@ -870,7 +870,7 @@ static const struct RouletteFlashSettings sFlashData_Colors[NUM_ROULETTE_SLOTS + }, { // F_FLASH_COLOR_G_AZURILL .color = FLASHUTIL_USE_EXISTING_COLOR, - .paletteOffset = 0xA, + .paletteOffset = BG_PLTT_ID(0) + 10, .numColors = 1, .delay = 1, .unk6 = -1, @@ -880,7 +880,7 @@ static const struct RouletteFlashSettings sFlashData_Colors[NUM_ROULETTE_SLOTS + }, { // F_FLASH_COLOR_P_SKITTY .color = FLASHUTIL_USE_EXISTING_COLOR, - .paletteOffset = 0x15, + .paletteOffset = BG_PLTT_ID(1) + 5, .numColors = 1, .delay = 1, .unk6 = -1, @@ -890,7 +890,7 @@ static const struct RouletteFlashSettings sFlashData_Colors[NUM_ROULETTE_SLOTS + }, { // F_FLASH_COLOR_O_MAKUHITA .color = FLASHUTIL_USE_EXISTING_COLOR, - .paletteOffset = 0x55, + .paletteOffset = BG_PLTT_ID(5) + 5, .numColors = 1, .delay = 1, .unk6 = -1, @@ -900,7 +900,7 @@ static const struct RouletteFlashSettings sFlashData_Colors[NUM_ROULETTE_SLOTS + }, { // F_FLASH_COLOR_G_WYNAUT .color = FLASHUTIL_USE_EXISTING_COLOR, - .paletteOffset = 0x5A, + .paletteOffset = BG_PLTT_ID(5) + 10, .numColors = 1, .delay = 1, .unk6 = -1, @@ -910,7 +910,7 @@ static const struct RouletteFlashSettings sFlashData_Colors[NUM_ROULETTE_SLOTS + }, { // F_FLASH_COLOR_P_AZURILL .color = FLASHUTIL_USE_EXISTING_COLOR, - .paletteOffset = 0x65, + .paletteOffset = BG_PLTT_ID(6) + 5, .numColors = 1, .delay = 1, .unk6 = -1, @@ -920,7 +920,7 @@ static const struct RouletteFlashSettings sFlashData_Colors[NUM_ROULETTE_SLOTS + }, { // F_FLASH_COLOR_O_SKITTY .color = FLASHUTIL_USE_EXISTING_COLOR, - .paletteOffset = 0x75, + .paletteOffset = BG_PLTT_ID(7) + 5, .numColors = 1, .delay = 1, .unk6 = -1, @@ -930,7 +930,7 @@ static const struct RouletteFlashSettings sFlashData_Colors[NUM_ROULETTE_SLOTS + }, { // F_FLASH_COLOR_G_MAKUHITA .color = FLASHUTIL_USE_EXISTING_COLOR, - .paletteOffset = 0x7A, + .paletteOffset = BG_PLTT_ID(7) + 10, .numColors = 1, .delay = 1, .unk6 = -1, @@ -940,7 +940,7 @@ static const struct RouletteFlashSettings sFlashData_Colors[NUM_ROULETTE_SLOTS + }, { // F_FLASH_COLOR_P_WYNAUT .color = FLASHUTIL_USE_EXISTING_COLOR, - .paletteOffset = 0x85, + .paletteOffset = BG_PLTT_ID(8) + 5, .numColors = 1, .delay = 1, .unk6 = -1, @@ -950,7 +950,7 @@ static const struct RouletteFlashSettings sFlashData_Colors[NUM_ROULETTE_SLOTS + }, { // F_FLASH_COLOR_O_AZURILL .color = FLASHUTIL_USE_EXISTING_COLOR, - .paletteOffset = 0x95, + .paletteOffset = BG_PLTT_ID(9) + 5, .numColors = 1, .delay = 1, .unk6 = -1, @@ -960,7 +960,7 @@ static const struct RouletteFlashSettings sFlashData_Colors[NUM_ROULETTE_SLOTS + }, { // F_FLASH_COLOR_G_SKITTY .color = FLASHUTIL_USE_EXISTING_COLOR, - .paletteOffset = 0x9A, + .paletteOffset = BG_PLTT_ID(9) + 10, .numColors = 1, .delay = 1, .unk6 = -1, @@ -970,7 +970,7 @@ static const struct RouletteFlashSettings sFlashData_Colors[NUM_ROULETTE_SLOTS + }, { // F_FLASH_COLOR_P_MAKUHITA .color = FLASHUTIL_USE_EXISTING_COLOR, - .paletteOffset = 0xA5, + .paletteOffset = BG_PLTT_ID(10) + 5, .numColors = 1, .delay = 1, .unk6 = -1, @@ -980,7 +980,7 @@ static const struct RouletteFlashSettings sFlashData_Colors[NUM_ROULETTE_SLOTS + }, { // F_FLASH_OUTER_EDGES .color = RGB(22, 30, 29), - .paletteOffset = 0x28, + .paletteOffset = BG_PLTT_ID(2) + 8, .numColors = 2, .delay = 10, .unk6 = -1, @@ -996,7 +996,7 @@ static const struct RouletteFlashSettings sFlashData_PokeIcons[NUM_BOARD_COLORS] { [GET_ROW_IDX(ROW_ORANGE)] = { .color = RGB(31, 31, 20), - .paletteOffset = 0x101, + .paletteOffset = OBJ_PLTT_ID(0) + 1, .numColors = 5, .delay = 30, .unk6 = -1, @@ -1006,7 +1006,7 @@ static const struct RouletteFlashSettings sFlashData_PokeIcons[NUM_BOARD_COLORS] }, [GET_ROW_IDX(ROW_GREEN)] = { .color = RGB(27, 31, 31), - .paletteOffset = 0x106, + .paletteOffset = OBJ_PLTT_ID(0) + 6, .numColors = 5, .delay = 30, .unk6 = -1, @@ -1016,7 +1016,7 @@ static const struct RouletteFlashSettings sFlashData_PokeIcons[NUM_BOARD_COLORS] }, [GET_ROW_IDX(ROW_PURPLE)] = { .color = RGB(31, 27, 31), - .paletteOffset = 0x10B, + .paletteOffset = OBJ_PLTT_ID(0) + 11, .numColors = 5, .delay = 30, .unk6 = -1, @@ -1129,9 +1129,9 @@ static void InitRouletteTableData(void) // Left table (with min bet of 1) has red background, other table has green if (sRoulette->minBet == 1) - gPlttBufferUnfaded[0] = gPlttBufferUnfaded[0x51] = gPlttBufferFaded[0] = gPlttBufferFaded[0x51] = bgColors[0]; + gPlttBufferUnfaded[BG_PLTT_ID(0)] = gPlttBufferUnfaded[BG_PLTT_ID(5) + 1] = gPlttBufferFaded[BG_PLTT_ID(0)] = gPlttBufferFaded[BG_PLTT_ID(5) + 1] = bgColors[0]; else - gPlttBufferUnfaded[0] = gPlttBufferUnfaded[0x51] = gPlttBufferFaded[0] = gPlttBufferFaded[0x51] = bgColors[1]; + gPlttBufferUnfaded[BG_PLTT_ID(0)] = gPlttBufferUnfaded[BG_PLTT_ID(5) + 1] = gPlttBufferFaded[BG_PLTT_ID(0)] = gPlttBufferFaded[BG_PLTT_ID(5) + 1] = bgColors[1]; RouletteFlash_Reset(&sRoulette->flashUtil); diff --git a/src/scanline_effect.c b/src/scanline_effect.c index dc3ca03f4a..684c89546a 100644 --- a/src/scanline_effect.c +++ b/src/scanline_effect.c @@ -13,7 +13,7 @@ static void CopyValue32Bit(void); // Per-scanline register values. // This is double buffered so that it can be safely written to at any time // without overwriting the buffer that the DMA is currently reading -EWRAM_DATA u16 gScanlineEffectRegBuffers[2][0x3C0] = {0}; +EWRAM_DATA u16 ALIGNED(4) gScanlineEffectRegBuffers[2][0x3C0] = {0}; EWRAM_DATA struct ScanlineEffect gScanlineEffect = {0}; EWRAM_DATA static bool8 sShouldStopWaveTask = FALSE; diff --git a/src/scrcmd.c b/src/scrcmd.c index 56482f9dfe..df3a469087 100644 --- a/src/scrcmd.c +++ b/src/scrcmd.c @@ -657,12 +657,12 @@ bool8 ScrCmd_fadescreenswapbuffers(struct ScriptContext *ctx) case FADE_TO_BLACK: case FADE_TO_WHITE: default: - CpuCopy32(gPlttBufferUnfaded, gPaletteDecompressionBuffer, PLTT_DECOMP_BUFFER_SIZE); + CpuCopy32(gPlttBufferUnfaded, gPaletteDecompressionBuffer, PLTT_SIZE); FadeScreen(mode, 0); break; case FADE_FROM_BLACK: case FADE_FROM_WHITE: - CpuCopy32(gPaletteDecompressionBuffer, gPlttBufferUnfaded, PLTT_DECOMP_BUFFER_SIZE); + CpuCopy32(gPaletteDecompressionBuffer, gPlttBufferUnfaded, PLTT_SIZE); FadeScreen(mode, 0); break; } diff --git a/src/secret_base.c b/src/secret_base.c index 836cf1b3d0..82888f6cf6 100644 --- a/src/secret_base.c +++ b/src/secret_base.c @@ -47,6 +47,8 @@ #include "constants/songs.h" #include "constants/trainers.h" +#define TAG_SCROLL_ARROW 5112 + // Values for registryStatus enum { UNREGISTERED, @@ -985,7 +987,7 @@ static void FinalizeRegistryMenu(u8 taskId) static void AddRegistryMenuScrollArrows(u8 taskId) { s16 *data = gTasks[taskId].data; - tArrowTaskId = AddScrollIndicatorArrowPairParameterized(SCROLL_ARROW_UP, 188, 12, 148, tNumBases - tMaxShownItems, 0x13f8, 0x13f8, &tScrollOffset); + tArrowTaskId = AddScrollIndicatorArrowPairParameterized(SCROLL_ARROW_UP, 188, 12, 148, tNumBases - tMaxShownItems, TAG_SCROLL_ARROW, TAG_SCROLL_ARROW, &tScrollOffset); } static void HandleRegistryMenuInput(u8 taskId) diff --git a/src/slot_machine.c b/src/slot_machine.c index 2fc0e2c035..20386a2528 100644 --- a/src/slot_machine.c +++ b/src/slot_machine.c @@ -1285,7 +1285,7 @@ static void Task_SlotMachine(u8 taskId) // SLOTTASK_UNFADE static bool8 SlotTask_UnfadeScreen(struct Task *task) { - BeginNormalPaletteFade(PALETTES_ALL, 0, 16, 0, RGB(0, 0, 0)); + BeginNormalPaletteFade(PALETTES_ALL, 0, 16, 0, RGB_BLACK); LoadPikaPowerMeter(sSlotMachine->pikaPowerBolts); sSlotMachine->state++; // SLOTTASK_WAIT_FADE return FALSE; @@ -1731,7 +1731,7 @@ static bool8 SlotTask_EndGame(struct Task *task) { SetCoins(sSlotMachine->coins); TryPutFindThatGamerOnAir(GetCoins()); - BeginNormalPaletteFade(PALETTES_ALL, 0, 0, 16, RGB(0, 0, 0)); + BeginNormalPaletteFade(PALETTES_ALL, 0, 0, 16, RGB_BLACK); sSlotMachine->state++; // SLOTTASK_FREE return FALSE; } @@ -3904,7 +3904,7 @@ static void Task_InfoBox(u8 taskId) static void InfoBox_FadeIn(struct Task *task) { - BeginNormalPaletteFade(PALETTES_ALL, 0, 0, 16, RGB(0, 0, 0)); + BeginNormalPaletteFade(PALETTES_ALL, 0, 0, 16, RGB_BLACK); task->tState++; } @@ -3928,7 +3928,7 @@ static void InfoBox_AddText(struct Task *task) { AddTextPrinterParameterized3(1, FONT_NORMAL, 2, 5, sColors_ReeltimeHelp, 0, gText_ReelTimeHelp); CopyWindowToVram(1, COPYWIN_FULL); - BeginNormalPaletteFade(PALETTES_ALL, 0, 16, 0, RGB(0, 0, 0)); + BeginNormalPaletteFade(PALETTES_ALL, 0, 16, 0, RGB_BLACK); task->tState++; } @@ -3940,7 +3940,7 @@ static void InfoBox_WaitInput(struct Task *task) ClearWindowTilemap(1); CopyWindowToVram(1, COPYWIN_MAP); RemoveWindow(1); - BeginNormalPaletteFade(PALETTES_ALL, 0, 0, 16, RGB(0, 0, 0)); + BeginNormalPaletteFade(PALETTES_ALL, 0, 0, 16, RGB_BLACK); task->tState++; } } @@ -3961,7 +3961,7 @@ static void InfoBox_CreateDigitalDisplay(struct Task *task) static void InfoBox_LoadPikaPowerMeter(struct Task *task) { LoadPikaPowerMeter(sSlotMachine->pikaPowerBolts); - BeginNormalPaletteFade(PALETTES_ALL, 0, 16, 0, RGB(0, 0, 0)); + BeginNormalPaletteFade(PALETTES_ALL, 0, 16, 0, RGB_BLACK); task->tState++; } @@ -4427,7 +4427,7 @@ static void SpriteCB_ReelTimePikachuAura(struct Sprite *sprite) u8 colors[] = {16, 0}; if (sprite->sFlashPal && --sprite->sDelayTimer <= 0) { - MultiplyInvertedPaletteRGBComponents((IndexOfSpritePaletteTag(PALTAG_PIKA_AURA) << 4) + 0x103, colors[sprite->sColorIdx], colors[sprite->sColorIdx], colors[sprite->sColorIdx]); + MultiplyInvertedPaletteRGBComponents(OBJ_PLTT_ID(IndexOfSpritePaletteTag(PALTAG_PIKA_AURA)) + 3, colors[sprite->sColorIdx], colors[sprite->sColorIdx], colors[sprite->sColorIdx]); ++sprite->sColorIdx; sprite->sColorIdx &= 1; sprite->sDelayTimer = sprite->sDelay; @@ -4442,7 +4442,7 @@ static void SetReelTimePikachuAuraFlashDelay(s16 delay) static void DestroyReelTimePikachuAuraSprites(void) { u8 i; - MultiplyInvertedPaletteRGBComponents((IndexOfSpritePaletteTag(PALTAG_PIKA_AURA) << 4) + 0x103, 0, 0, 0); + MultiplyInvertedPaletteRGBComponents(OBJ_PLTT_ID(IndexOfSpritePaletteTag(PALTAG_PIKA_AURA)) + 3, 0, 0, 0); for (i = 0; i < ARRAY_COUNT(sSlotMachine->reelTimePikachuAuraSpriteIds); i++) DestroySprite(&gSprites[sSlotMachine->reelTimePikachuAuraSpriteIds[i]]); } @@ -4672,9 +4672,9 @@ static void SpriteCB_DigitalDisplay_Reel(struct Sprite *sprite) { case 0: sprite->x += 4; - if (sprite->x >= 0xd0) + if (sprite->x >= DISPLAY_WIDTH - 32) { - sprite->x = 0xd0; + sprite->x = DISPLAY_WIDTH - 32; sprite->sState++; } break; @@ -4684,7 +4684,7 @@ static void SpriteCB_DigitalDisplay_Reel(struct Sprite *sprite) break; case 2: sprite->x += 4; - if (sprite->x >= 0x110) + if (sprite->x >= DISPLAY_WIDTH + 32) sprite->sState++; break; case 3: @@ -4700,9 +4700,9 @@ static void SpriteCB_DigitalDisplay_Time(struct Sprite *sprite) { case 0: sprite->x -= 4; - if (sprite->x <= 0xd0) + if (sprite->x <= DISPLAY_WIDTH - 32) { - sprite->x = 0xd0; + sprite->x = DISPLAY_WIDTH - 32; sprite->sState++; } break; @@ -4712,7 +4712,7 @@ static void SpriteCB_DigitalDisplay_Time(struct Sprite *sprite) break; case 2: sprite->x -= 4; - if (sprite->x <= 0x90) + if (sprite->x <= 144) sprite->sState++; break; case 3: @@ -4738,9 +4738,9 @@ static void SpriteCB_DigitalDisplay_ReelTimeNumber(struct Sprite *sprite) break; case 2: sprite->x += 4; - if (sprite->x >= 0xd0) + if (sprite->x >= DISPLAY_WIDTH - 32) { - sprite->x = 0xd0; + sprite->x = DISPLAY_WIDTH - 32; sprite->sState++; } break; @@ -4750,7 +4750,7 @@ static void SpriteCB_DigitalDisplay_ReelTimeNumber(struct Sprite *sprite) break; case 4: sprite->x += 4; - if (sprite->x >= 0xf8) + if (sprite->x >= DISPLAY_WIDTH + 8) sprite->sState++; break; case 5: @@ -7853,7 +7853,7 @@ static const u16 sUnusedColors[] = RGB(27, 27, 27), RGB(8, 11, 26), RGB(11, 21, 13), - RGB(31, 31, 31), + RGB_WHITE, RGB(16, 26, 21), RGB(0, 22, 31), RGB(26, 21, 0), diff --git a/src/start_menu.c b/src/start_menu.c index f19af9c09d..e39a5438ee 100644 --- a/src/start_menu.c +++ b/src/start_menu.c @@ -137,7 +137,15 @@ static void Task_SaveAfterLinkBattle(u8 taskId); static void Task_WaitForBattleTowerLinkSave(u8 taskId); static bool8 FieldCB_ReturnToFieldStartMenu(void); -static const struct WindowTemplate sSafariBallsWindowTemplate = {0, 1, 1, 9, 4, 0xF, 8}; +static const struct WindowTemplate sWindowTemplate_SafariBalls = { + .bg = 0, + .tilemapLeft = 1, + .tilemapTop = 1, + .width = 9, + .height = 4, + .paletteNum = 15, + .baseBlock = 0x8 +}; static const u8 *const sPyramidFloorNames[FRONTIER_STAGES_PER_CHALLENGE + 1] = { @@ -151,8 +159,25 @@ static const u8 *const sPyramidFloorNames[FRONTIER_STAGES_PER_CHALLENGE + 1] = gText_Peak }; -static const struct WindowTemplate sPyramidFloorWindowTemplate_2 = {0, 1, 1, 0xA, 4, 0xF, 8}; -static const struct WindowTemplate sPyramidFloorWindowTemplate_1 = {0, 1, 1, 0xC, 4, 0xF, 8}; +static const struct WindowTemplate sWindowTemplate_PyramidFloor = { + .bg = 0, + .tilemapLeft = 1, + .tilemapTop = 1, + .width = 10, + .height = 4, + .paletteNum = 15, + .baseBlock = 0x8 +}; + +static const struct WindowTemplate sWindowTemplate_PyramidPeak = { + .bg = 0, + .tilemapLeft = 1, + .tilemapTop = 1, + .width = 12, + .height = 4, + .paletteNum = 15, + .baseBlock = 0x8 +}; static const struct MenuAction sStartMenuItems[] = { @@ -382,7 +407,7 @@ static void BuildMultiPartnerRoomStartMenu(void) static void ShowSafariBallsWindow(void) { - sSafariBallsWindowId = AddWindow(&sSafariBallsWindowTemplate); + sSafariBallsWindowId = AddWindow(&sWindowTemplate_SafariBalls); PutWindowTilemap(sSafariBallsWindowId); DrawStdWindowFrame(sSafariBallsWindowId, FALSE); ConvertIntToDecimalStringN(gStringVar1, gNumSafariBalls, STR_CONV_MODE_RIGHT_ALIGN, 2); @@ -394,9 +419,9 @@ static void ShowSafariBallsWindow(void) static void ShowPyramidFloorWindow(void) { if (gSaveBlock2Ptr->frontier.curChallengeBattleNum == FRONTIER_STAGES_PER_CHALLENGE) - sBattlePyramidFloorWindowId = AddWindow(&sPyramidFloorWindowTemplate_1); + sBattlePyramidFloorWindowId = AddWindow(&sWindowTemplate_PyramidPeak); else - sBattlePyramidFloorWindowId = AddWindow(&sPyramidFloorWindowTemplate_2); + sBattlePyramidFloorWindowId = AddWindow(&sWindowTemplate_PyramidFloor); PutWindowTilemap(sBattlePyramidFloorWindowId); DrawStdWindowFrame(sBattlePyramidFloorWindowId, FALSE); diff --git a/src/tileset_anims.c b/src/tileset_anims.c index 12701fb5f0..595ba08a6f 100644 --- a/src/tileset_anims.c +++ b/src/tileset_anims.c @@ -1167,7 +1167,7 @@ static void QueueAnimTiles_BattlePyramid_StatueShadow(u16 timer) static void BlendAnimPalette_BattleDome_FloorLights(u16 timer) { - CpuCopy16(sTilesetAnims_BattleDomeFloorLightPals[timer % ARRAY_COUNT(sTilesetAnims_BattleDomeFloorLightPals)], &gPlttBufferUnfaded[0x80], 32); + CpuCopy16(sTilesetAnims_BattleDomeFloorLightPals[timer % ARRAY_COUNT(sTilesetAnims_BattleDomeFloorLightPals)], &gPlttBufferUnfaded[BG_PLTT_ID(8)], PLTT_SIZE_4BPP); BlendPalette(BG_PLTT_ID(8), 16, gPaletteFade.y, gPaletteFade.blendColor & 0x7FFF); if ((u8)FindTaskIdByFunc(Task_BattleTransition_Intro) != TASK_NONE) { @@ -1178,7 +1178,7 @@ static void BlendAnimPalette_BattleDome_FloorLights(u16 timer) static void BlendAnimPalette_BattleDome_FloorLightsNoBlend(u16 timer) { - CpuCopy16(sTilesetAnims_BattleDomeFloorLightPals[timer % ARRAY_COUNT(sTilesetAnims_BattleDomeFloorLightPals)], &gPlttBufferUnfaded[0x80], 32); + CpuCopy16(sTilesetAnims_BattleDomeFloorLightPals[timer % ARRAY_COUNT(sTilesetAnims_BattleDomeFloorLightPals)], &gPlttBufferUnfaded[BG_PLTT_ID(8)], PLTT_SIZE_4BPP); if ((u8)FindTaskIdByFunc(Task_BattleTransition_Intro) == TASK_NONE) { BlendPalette(BG_PLTT_ID(8), 16, gPaletteFade.y, gPaletteFade.blendColor & 0x7FFF); diff --git a/src/title_screen.c b/src/title_screen.c index bb73df5bc5..87bf0d970e 100644 --- a/src/title_screen.c +++ b/src/title_screen.c @@ -584,7 +584,7 @@ void CB2_InitTitleScreen(void) gMain.state = 4; break; case 4: - PanFadeAndZoomScreen(0x78, 0x50, 0x100, 0); + PanFadeAndZoomScreen(DISPLAY_WIDTH / 2, DISPLAY_HEIGHT / 2, 0x100, 0); SetGpuReg(REG_OFFSET_BG2X_L, -29 * 256); SetGpuReg(REG_OFFSET_BG2X_H, -1); SetGpuReg(REG_OFFSET_BG2Y_L, -32 * 256); diff --git a/src/trade.c b/src/trade.c index 971f0d966e..28e8f89d1c 100644 --- a/src/trade.c +++ b/src/trade.c @@ -1864,7 +1864,7 @@ static void SetSelectedMon(u8 cursorPosition) static void DrawSelectedMonScreen(u8 whichParty) { s8 nameStringWidth; - u8 nickname[20]; + u8 nickname[POKEMON_NAME_BUFFER_SIZE]; u8 movesString[56]; u8 i; u8 partyIdx; @@ -1950,7 +1950,7 @@ static void DrawSelectedMonScreen(u8 whichParty) static u8 GetMonNicknameWidth(u8 *str, u8 whichParty, u8 partyIdx) { - u8 nickname[POKEMON_NAME_LENGTH]; + u8 nickname[POKEMON_NAME_LENGTH + 1]; if (whichParty == TRADE_PLAYER) GetMonData(&gPlayerParty[partyIdx], MON_DATA_NICKNAME, nickname); @@ -2006,8 +2006,8 @@ static void PrintPartyMonNickname(u8 whichParty, u8 windowId, u8 *nickname) static void PrintPartyNicknames(u8 whichParty) { u8 i; - u8 nickname[20]; - u8 str[32]; + u8 nickname[POKEMON_NAME_BUFFER_SIZE]; + u8 str[max(32, POKEMON_NAME_BUFFER_SIZE)]; struct Pokemon *party = (whichParty == TRADE_PLAYER) ? gPlayerParty : gEnemyParty; for (i = 0; i < sTradeMenu->partyCounts[whichParty]; i++) @@ -2023,7 +2023,7 @@ static void PrintLevelAndGender(u8 whichParty, u8 monIdx, u8 x, u8 y, u8 width, u8 level; u32 symbolTile; u8 gender; - u8 nickname[POKEMON_NAME_LENGTH]; + u8 nickname[POKEMON_NAME_LENGTH + 1]; CopyToBgTilemapBufferRect_ChangePalette(1, gTradeMenuMonBox_Tilemap, width, height, 6, 3, 0); CopyBgTilemapBufferToVram(1); @@ -3330,7 +3330,7 @@ static void LoadTradeSequenceSpriteSheetsAndPalettes(void) static void BufferTradeSceneStrings(void) { u8 mpId; - u8 name[20]; + u8 name[POKEMON_NAME_BUFFER_SIZE]; const struct InGameTrade *ingameTrade; if (sTradeAnim->isLinkTrade) @@ -4539,7 +4539,7 @@ u16 GetInGameTradeSpeciesInfo(void) static void BufferInGameTradeMonName(void) { - u8 nickname[32]; + u8 nickname[max(32, POKEMON_NAME_BUFFER_SIZE)]; const struct InGameTrade *inGameTrade = &sIngameTrades[gSpecialVar_0x8004]; GetMonData(&gPlayerParty[gSpecialVar_0x8005], MON_DATA_NICKNAME, nickname); StringCopy_Nickname(gStringVar1, nickname); diff --git a/src/trainer_hill.c b/src/trainer_hill.c index a74270ec77..3fbec613ad 100644 --- a/src/trainer_hill.c +++ b/src/trainer_hill.c @@ -146,22 +146,22 @@ static const u16 sPrizeListLuxuryBall1[] = {ITEM_LUXURY_BALL, ITEM_ETHER, I static const u16 sPrizeListMaxRevive1[] = {ITEM_MAX_REVIVE, ITEM_ETHER, ITEM_MAX_POTION, ITEM_REVIVE, ITEM_FLUFFY_TAIL, ITEM_GREAT_BALL}; static const u16 sPrizeListMaxEther1[] = {ITEM_MAX_ETHER, ITEM_ETHER, ITEM_MAX_POTION, ITEM_REVIVE, ITEM_FLUFFY_TAIL, ITEM_GREAT_BALL}; static const u16 sPrizeListElixir1[] = {ITEM_ELIXIR, ITEM_ETHER, ITEM_MAX_POTION, ITEM_REVIVE, ITEM_FLUFFY_TAIL, ITEM_GREAT_BALL}; -static const u16 sPrizeListRoar[] = {ITEM_TM05_ROAR, ITEM_ETHER, ITEM_MAX_POTION, ITEM_REVIVE, ITEM_FLUFFY_TAIL, ITEM_GREAT_BALL}; -static const u16 sPrizeListSludgeBomb[] = {ITEM_TM36_SLUDGE_BOMB, ITEM_ETHER, ITEM_MAX_POTION, ITEM_REVIVE, ITEM_FLUFFY_TAIL, ITEM_GREAT_BALL}; -static const u16 sPrizeListToxic[] = {ITEM_TM06_TOXIC, ITEM_ETHER, ITEM_MAX_POTION, ITEM_REVIVE, ITEM_FLUFFY_TAIL, ITEM_GREAT_BALL}; -static const u16 sPrizeListSunnyDay[] = {ITEM_TM11_SUNNY_DAY, ITEM_ETHER, ITEM_MAX_POTION, ITEM_REVIVE, ITEM_FLUFFY_TAIL, ITEM_GREAT_BALL}; -static const u16 sPrizeListEarthQuake[] = {ITEM_TM26_EARTHQUAKE, ITEM_ETHER, ITEM_MAX_POTION, ITEM_REVIVE, ITEM_FLUFFY_TAIL, ITEM_GREAT_BALL}; +static const u16 sPrizeListRoar[] = {ITEM_TM_ROAR, ITEM_ETHER, ITEM_MAX_POTION, ITEM_REVIVE, ITEM_FLUFFY_TAIL, ITEM_GREAT_BALL}; +static const u16 sPrizeListSludgeBomb[] = {ITEM_TM_SLUDGE_BOMB, ITEM_ETHER, ITEM_MAX_POTION, ITEM_REVIVE, ITEM_FLUFFY_TAIL, ITEM_GREAT_BALL}; +static const u16 sPrizeListToxic[] = {ITEM_TM_TOXIC, ITEM_ETHER, ITEM_MAX_POTION, ITEM_REVIVE, ITEM_FLUFFY_TAIL, ITEM_GREAT_BALL}; +static const u16 sPrizeListSunnyDay[] = {ITEM_TM_SUNNY_DAY, ITEM_ETHER, ITEM_MAX_POTION, ITEM_REVIVE, ITEM_FLUFFY_TAIL, ITEM_GREAT_BALL}; +static const u16 sPrizeListEarthQuake[] = {ITEM_TM_EARTHQUAKE, ITEM_ETHER, ITEM_MAX_POTION, ITEM_REVIVE, ITEM_FLUFFY_TAIL, ITEM_GREAT_BALL}; static const u16 sPrizeListRareCandy2[] = {ITEM_RARE_CANDY, ITEM_ETHER, ITEM_MAX_POTION, ITEM_REVIVE, ITEM_FLUFFY_TAIL, ITEM_GREAT_BALL}; static const u16 sPrizeListLuxuryBall2[] = {ITEM_LUXURY_BALL, ITEM_ETHER, ITEM_MAX_POTION, ITEM_REVIVE, ITEM_FLUFFY_TAIL, ITEM_GREAT_BALL}; static const u16 sPrizeListMaxRevive2[] = {ITEM_MAX_REVIVE, ITEM_ETHER, ITEM_MAX_POTION, ITEM_REVIVE, ITEM_FLUFFY_TAIL, ITEM_GREAT_BALL}; static const u16 sPrizeListMaxEther2[] = {ITEM_MAX_ETHER, ITEM_ETHER, ITEM_MAX_POTION, ITEM_REVIVE, ITEM_FLUFFY_TAIL, ITEM_GREAT_BALL}; static const u16 sPrizeListElixir2[] = {ITEM_ELIXIR, ITEM_ETHER, ITEM_MAX_POTION, ITEM_REVIVE, ITEM_FLUFFY_TAIL, ITEM_GREAT_BALL}; -static const u16 sPrizeListBrickBreak[] = {ITEM_TM31_BRICK_BREAK, ITEM_ETHER, ITEM_MAX_POTION, ITEM_REVIVE, ITEM_FLUFFY_TAIL, ITEM_GREAT_BALL}; -static const u16 sPrizeListTorment[] = {ITEM_TM41_TORMENT, ITEM_ETHER, ITEM_MAX_POTION, ITEM_REVIVE, ITEM_FLUFFY_TAIL, ITEM_GREAT_BALL}; -static const u16 sPrizeListSkillSwap[] = {ITEM_TM48_SKILL_SWAP, ITEM_ETHER, ITEM_MAX_POTION, ITEM_REVIVE, ITEM_FLUFFY_TAIL, ITEM_GREAT_BALL}; -static const u16 sPrizeListGigaDrain[] = {ITEM_TM19_GIGA_DRAIN, ITEM_ETHER, ITEM_MAX_POTION, ITEM_REVIVE, ITEM_FLUFFY_TAIL, ITEM_GREAT_BALL}; -static const u16 sPrizeListAttract[] = {ITEM_TM45_ATTRACT, ITEM_ETHER, ITEM_MAX_POTION, ITEM_REVIVE, ITEM_FLUFFY_TAIL, ITEM_GREAT_BALL}; +static const u16 sPrizeListBrickBreak[] = {ITEM_TM_BRICK_BREAK, ITEM_ETHER, ITEM_MAX_POTION, ITEM_REVIVE, ITEM_FLUFFY_TAIL, ITEM_GREAT_BALL}; +static const u16 sPrizeListTorment[] = {ITEM_TM_TORMENT, ITEM_ETHER, ITEM_MAX_POTION, ITEM_REVIVE, ITEM_FLUFFY_TAIL, ITEM_GREAT_BALL}; +static const u16 sPrizeListSkillSwap[] = {ITEM_TM_SKILL_SWAP, ITEM_ETHER, ITEM_MAX_POTION, ITEM_REVIVE, ITEM_FLUFFY_TAIL, ITEM_GREAT_BALL}; +static const u16 sPrizeListGigaDrain[] = {ITEM_TM_GIGA_DRAIN, ITEM_ETHER, ITEM_MAX_POTION, ITEM_REVIVE, ITEM_FLUFFY_TAIL, ITEM_GREAT_BALL}; +static const u16 sPrizeListAttract[] = {ITEM_TM_ATTRACT, ITEM_ETHER, ITEM_MAX_POTION, ITEM_REVIVE, ITEM_FLUFFY_TAIL, ITEM_GREAT_BALL}; static const u16 *const sPrizeLists1[NUM_TRAINER_HILL_PRIZE_LISTS] = { @@ -1066,10 +1066,10 @@ static u16 GetPrizeItemId(void) // Which prize is given from the list depends on the time scored. // The prize for any time after 12 minutes is the same in every list. // The prizes for a time under 12 minutes are: - // - ITEM_TM11_SUNNY_DAY (Normal) + // - ITEM_TM_SUNNY_DAY (Normal) // - ITEM_ELIXIR (Variety) - // - ITEM_TM19_GIGA_DRAIN (Unique) - // - ITEM_TM31_BRICK_BREAK (Expert) + // - ITEM_TM_GIGA_DRAIN (Unique) + // - ITEM_TM_BRICK_BREAK (Expert) // As an additional note, if players were allowed to enter a Trainer Hill challenge before // entering the Hall of Fame, there would be 1 additional prize possibility (ITEM_MAX_ETHER) // as Normal / Unique modes would use sPrizeListSets[0][3] / sPrizeListSets[1][3] respectively. diff --git a/src/trainer_see.c b/src/trainer_see.c index f2e9c96b5a..aa6b9ba015 100644 --- a/src/trainer_see.c +++ b/src/trainer_see.c @@ -134,11 +134,11 @@ static const struct SpriteFrameImage sSpriteImageTable_ExclamationQuestionMark[] { { .data = sEmotion_ExclamationMarkGfx, - .size = 0x80 + .size = sizeof(sEmotion_ExclamationMarkGfx) }, { .data = sEmotion_QuestionMarkGfx, - .size = 0x80 + .size = sizeof(sEmotion_QuestionMarkGfx) } }; @@ -146,7 +146,7 @@ static const struct SpriteFrameImage sSpriteImageTable_HeartIcon[] = { { .data = sEmotion_HeartGfx, - .size = 0x80 + .size = sizeof(sEmotion_HeartGfx) } }; diff --git a/src/tv.c b/src/tv.c index b32881d090..1246faff25 100644 --- a/src/tv.c +++ b/src/tv.c @@ -45,7 +45,6 @@ #include "constants/metatile_labels.h" #include "constants/moves.h" #include "constants/region_map_sections.h" -#include "constants/script_menu.h" #define LAST_TVSHOW_IDX (TV_SHOWS_COUNT - 1) @@ -485,7 +484,7 @@ static const u8 *const sTVPokemonTodayFailedTextGroup[] = { gTVPokemonTodayFailedText06 }; -static const u8 *const sTVPokemonAnslerTextGroup[] = { +static const u8 *const sTVPokemonAnglerTextGroup[] = { gTVPokemonAnglerText00, gTVPokemonAnglerText01 }; @@ -941,9 +940,8 @@ void GabbyAndTyBeforeInterview(void) gSaveBlock1Ptr->gabbyAndTyData.mon2 = gBattleResults.playerMon2Species; gSaveBlock1Ptr->gabbyAndTyData.lastMove = gBattleResults.lastUsedMovePlayer; if (gSaveBlock1Ptr->gabbyAndTyData.battleNum != 0xFF) - { gSaveBlock1Ptr->gabbyAndTyData.battleNum++; - } + gSaveBlock1Ptr->gabbyAndTyData.battleTookMoreThanOneTurn = gBattleResults.playerMonWasDamaged; if (gBattleResults.playerFaintCounter != 0) @@ -975,9 +973,7 @@ void GabbyAndTyBeforeInterview(void) TakeGabbyAndTyOffTheAir(); if (gSaveBlock1Ptr->gabbyAndTyData.lastMove == MOVE_NONE) - { - FlagSet(FLAG_TEMP_1); - } + FlagSet(FLAG_TEMP_SKIP_GABBY_INTERVIEW); } void GabbyAndTyAfterInterview(void) @@ -1483,8 +1479,8 @@ static void InterviewAfter_BravoTrainerBattleTowerProfile(void) TVShow *show = &gSaveBlock1Ptr->tvShows[sCurTVShowSlot]; show->bravoTrainerTower.kind = TVSHOW_BRAVO_TRAINER_BATTLE_TOWER_PROFILE; show->bravoTrainerTower.active = TRUE; - StringCopy(show->bravoTrainerTower.trainerName, gSaveBlock2Ptr->playerName); - StringCopy(show->bravoTrainerTower.pokemonName, gSaveBlock2Ptr->frontier.towerInterview.opponentName); + StringCopy(show->bravoTrainerTower.playerName, gSaveBlock2Ptr->playerName); + StringCopy(show->bravoTrainerTower.opponentName, gSaveBlock2Ptr->frontier.towerInterview.opponentName); show->bravoTrainerTower.species = gSaveBlock2Ptr->frontier.towerInterview.playerSpecies; show->bravoTrainerTower.defeatedSpecies = gSaveBlock2Ptr->frontier.towerInterview.opponentSpecies; show->bravoTrainerTower.numFights = GetCurrentBattleTowerWinStreak(gSaveBlock2Ptr->frontier.towerLvlMode, 0); @@ -1495,11 +1491,11 @@ static void InterviewAfter_BravoTrainerBattleTowerProfile(void) show->bravoTrainerTower.btLevel = FRONTIER_MAX_LEVEL_OPEN; show->bravoTrainerTower.interviewResponse = gSpecialVar_0x8004; StorePlayerIdInNormalShow(show); - show->bravoTrainerTower.language = gGameLanguage; - if (show->bravoTrainerTower.language == LANGUAGE_JAPANESE || gSaveBlock2Ptr->frontier.towerInterview.opponentLanguage == LANGUAGE_JAPANESE) - show->bravoTrainerTower.pokemonNameLanguage = LANGUAGE_JAPANESE; + show->bravoTrainerTower.playerLanguage = gGameLanguage; + if (show->bravoTrainerTower.playerLanguage == LANGUAGE_JAPANESE || gSaveBlock2Ptr->frontier.towerInterview.opponentLanguage == LANGUAGE_JAPANESE) + show->bravoTrainerTower.opponentLanguage = LANGUAGE_JAPANESE; else - show->bravoTrainerTower.pokemonNameLanguage = gSaveBlock2Ptr->frontier.towerInterview.opponentLanguage; + show->bravoTrainerTower.opponentLanguage = gSaveBlock2Ptr->frontier.towerInterview.opponentLanguage; } void TryPutSmartShopperOnAir(void) @@ -3387,6 +3383,7 @@ u8 CheckForPlayersHouseNews(void) void GetMomOrDadStringForTVMessage(void) { + // If the player is checking the TV in their house it will only refer to their Mom. if (gSaveBlock1Ptr->location.mapGroup == MAP_GROUP(LITTLEROOT_TOWN_BRENDANS_HOUSE_1F)) { if (gSaveBlock2Ptr->playerGender == MALE) @@ -3416,6 +3413,7 @@ void GetMomOrDadStringForTVMessage(void) } else if (VarGet(VAR_TEMP_3) > 2) { + // Should only happen if VAR_TEMP_3 is already in use by something else. if (VarGet(VAR_TEMP_3) % 2 == 0) StringCopy(gStringVar1, gText_Mom); else @@ -3423,6 +3421,9 @@ void GetMomOrDadStringForTVMessage(void) } else { + // Randomly choose whether to refer to Mom or Dad. + // NOTE: Because of this, any map that has a TV in it shouldn't rely on VAR_TEMP_3. + // If its value is 0, checking the TV will set it to 1 or 2. if (Random() % 2 != 0) { StringCopy(gStringVar1, gText_Mom); @@ -3992,8 +3993,8 @@ static void TranslateShowNames(TVShow *show, u32 language) break; case TVSHOW_BRAVO_TRAINER_BATTLE_TOWER_PROFILE: shows[5] = &show[i]; - SetStrLanguage(shows[5]->bravoTrainerTower.trainerName, shows[5]->bravoTrainerTower.language, language); - SetStrLanguage(shows[5]->bravoTrainerTower.pokemonName, shows[5]->bravoTrainerTower.pokemonNameLanguage, language); + SetStrLanguage(shows[5]->bravoTrainerTower.playerName, shows[5]->bravoTrainerTower.playerLanguage, language); + SetStrLanguage(shows[5]->bravoTrainerTower.opponentName, shows[5]->bravoTrainerTower.opponentLanguage, language); break; case TVSHOW_BRAVO_TRAINER_POKEMON_PROFILE: shows[4] = &show[i]; @@ -4035,8 +4036,8 @@ void SanitizeTVShowsForRuby(TVShow *shows) { if (curShow->bravoTrainerTower.kind == TVSHOW_BRAVO_TRAINER_BATTLE_TOWER_PROFILE) { - if ((curShow->bravoTrainerTower.language == LANGUAGE_JAPANESE && curShow->bravoTrainerTower.pokemonNameLanguage != LANGUAGE_JAPANESE) - || (curShow->bravoTrainerTower.language != LANGUAGE_JAPANESE && curShow->bravoTrainerTower.pokemonNameLanguage == LANGUAGE_JAPANESE)) + if ((curShow->bravoTrainerTower.playerLanguage == LANGUAGE_JAPANESE && curShow->bravoTrainerTower.opponentLanguage != LANGUAGE_JAPANESE) + || (curShow->bravoTrainerTower.playerLanguage != LANGUAGE_JAPANESE && curShow->bravoTrainerTower.opponentLanguage == LANGUAGE_JAPANESE)) memset(curShow, 0, sizeof(TVShow)); } } @@ -4050,10 +4051,10 @@ static void TranslateRubyShows(TVShow *shows) { if (curShow->bravoTrainerTower.kind == TVSHOW_BRAVO_TRAINER_BATTLE_TOWER_PROFILE) { - if (IsStringJapanese(curShow->bravoTrainerTower.pokemonName)) - curShow->bravoTrainerTower.pokemonNameLanguage = LANGUAGE_JAPANESE; + if (IsStringJapanese(curShow->bravoTrainerTower.opponentName)) + curShow->bravoTrainerTower.opponentLanguage = LANGUAGE_JAPANESE; else - curShow->bravoTrainerTower.pokemonNameLanguage = GAME_LANGUAGE; + curShow->bravoTrainerTower.opponentLanguage = GAME_LANGUAGE; } } } @@ -4093,8 +4094,8 @@ static void TranslateJapaneseEmeraldShows(TVShow *shows) curShow->bravoTrainer.pokemonNameLanguage = GetStringLanguage(curShow->bravoTrainer.pokemonNickname); break; case TVSHOW_BRAVO_TRAINER_BATTLE_TOWER_PROFILE: - curShow->bravoTrainerTower.language = GetStringLanguage(curShow->bravoTrainerTower.trainerName); - curShow->bravoTrainerTower.pokemonNameLanguage = GetStringLanguage(curShow->bravoTrainerTower.pokemonName); + curShow->bravoTrainerTower.playerLanguage = GetStringLanguage(curShow->bravoTrainerTower.playerName); + curShow->bravoTrainerTower.opponentLanguage = GetStringLanguage(curShow->bravoTrainerTower.opponentName); break; case TVSHOW_CONTEST_LIVE_UPDATES: curShow->contestLiveUpdates.winningTrainerLanguage = GetStringLanguage(curShow->contestLiveUpdates.winningTrainerName); @@ -4385,7 +4386,7 @@ static void DoTVShowBravoTrainerBattleTower(void) switch(state) { case BRAVOTOWER_STATE_INTRO: - TVShowConvertInternationalString(gStringVar1, show->bravoTrainerTower.trainerName, show->bravoTrainerTower.language); + TVShowConvertInternationalString(gStringVar1, show->bravoTrainerTower.playerName, show->bravoTrainerTower.playerLanguage); StringCopy(gStringVar2, gSpeciesNames[show->bravoTrainerTower.species]); if (show->bravoTrainerTower.numFights >= FRONTIER_STAGES_PER_CHALLENGE) sTVShowState = BRAVOTOWER_STATE_NEW_RECORD; @@ -4406,7 +4407,7 @@ static void DoTVShowBravoTrainerBattleTower(void) sTVShowState = BRAVOTOWER_STATE_LOST_FINAL; break; case BRAVOTOWER_STATE_LOST: - TVShowConvertInternationalString(gStringVar1, show->bravoTrainerTower.pokemonName, show->bravoTrainerTower.pokemonNameLanguage); + TVShowConvertInternationalString(gStringVar1, show->bravoTrainerTower.opponentName, show->bravoTrainerTower.opponentLanguage); ConvertIntToDecimalString(1, show->bravoTrainerTower.numFights + 1); if (show->bravoTrainerTower.interviewResponse == 0) sTVShowState = BRAVOTOWER_STATE_SATISFIED; @@ -4414,7 +4415,7 @@ static void DoTVShowBravoTrainerBattleTower(void) sTVShowState = BRAVOTOWER_STATE_UNSATISFIED; break; case BRAVOTOWER_STATE_WON: - TVShowConvertInternationalString(gStringVar1, show->bravoTrainerTower.pokemonName, show->bravoTrainerTower.pokemonNameLanguage); + TVShowConvertInternationalString(gStringVar1, show->bravoTrainerTower.opponentName, show->bravoTrainerTower.opponentLanguage); StringCopy(gStringVar2, gSpeciesNames[show->bravoTrainerTower.defeatedSpecies]); if (show->bravoTrainerTower.interviewResponse == 0) sTVShowState = BRAVOTOWER_STATE_SATISFIED; @@ -4422,7 +4423,7 @@ static void DoTVShowBravoTrainerBattleTower(void) sTVShowState = BRAVOTOWER_STATE_UNSATISFIED; break; case BRAVOTOWER_STATE_LOST_FINAL: - TVShowConvertInternationalString(gStringVar1, show->bravoTrainerTower.pokemonName, show->bravoTrainerTower.pokemonNameLanguage); + TVShowConvertInternationalString(gStringVar1, show->bravoTrainerTower.opponentName, show->bravoTrainerTower.opponentLanguage); StringCopy(gStringVar2, gSpeciesNames[show->bravoTrainerTower.defeatedSpecies]); if (show->bravoTrainerTower.interviewResponse == 0) sTVShowState = BRAVOTOWER_STATE_SATISFIED; @@ -4430,11 +4431,11 @@ static void DoTVShowBravoTrainerBattleTower(void) sTVShowState = BRAVOTOWER_STATE_UNSATISFIED; break; case BRAVOTOWER_STATE_SATISFIED: - TVShowConvertInternationalString(gStringVar1, show->bravoTrainerTower.pokemonName, show->bravoTrainerTower.pokemonNameLanguage); + TVShowConvertInternationalString(gStringVar1, show->bravoTrainerTower.opponentName, show->bravoTrainerTower.opponentLanguage); sTVShowState = BRAVOTOWER_STATE_RESPONSE; break; case BRAVOTOWER_STATE_UNSATISFIED: - TVShowConvertInternationalString(gStringVar1, show->bravoTrainerTower.pokemonName, show->bravoTrainerTower.pokemonNameLanguage); + TVShowConvertInternationalString(gStringVar1, show->bravoTrainerTower.opponentName, show->bravoTrainerTower.opponentLanguage); sTVShowState = BRAVOTOWER_STATE_RESPONSE; break; case BRAVOTOWER_STATE_UNUSED_1: @@ -4443,7 +4444,7 @@ static void DoTVShowBravoTrainerBattleTower(void) case BRAVOTOWER_STATE_UNUSED_2: case BRAVOTOWER_STATE_UNUSED_3: case BRAVOTOWER_STATE_UNUSED_4: - TVShowConvertInternationalString(gStringVar1, show->bravoTrainerTower.trainerName, show->bravoTrainerTower.language); + TVShowConvertInternationalString(gStringVar1, show->bravoTrainerTower.playerName, show->bravoTrainerTower.playerLanguage); sTVShowState = BRAVOTOWER_STATE_RESPONSE; break; case BRAVOTOWER_STATE_RESPONSE: @@ -4456,12 +4457,12 @@ static void DoTVShowBravoTrainerBattleTower(void) case BRAVOTOWER_STATE_RESPONSE_SATISFIED: case BRAVOTOWER_STATE_RESPONSE_UNSATISFIED: CopyEasyChatWord(gStringVar1, show->bravoTrainerTower.words[0]); - TVShowConvertInternationalString(gStringVar2, show->bravoTrainerTower.trainerName, show->bravoTrainerTower.language); - TVShowConvertInternationalString(gStringVar3, show->bravoTrainerTower.pokemonName, show->bravoTrainerTower.pokemonNameLanguage); + TVShowConvertInternationalString(gStringVar2, show->bravoTrainerTower.playerName, show->bravoTrainerTower.playerLanguage); + TVShowConvertInternationalString(gStringVar3, show->bravoTrainerTower.opponentName, show->bravoTrainerTower.opponentLanguage); sTVShowState = BRAVOTOWER_STATE_OUTRO; break; case BRAVOTOWER_STATE_OUTRO: - TVShowConvertInternationalString(gStringVar1, show->bravoTrainerTower.trainerName, show->bravoTrainerTower.language); + TVShowConvertInternationalString(gStringVar1, show->bravoTrainerTower.playerName, show->bravoTrainerTower.playerLanguage); StringCopy(gStringVar2, gSpeciesNames[show->bravoTrainerTower.species]); TVShowDone(); break; @@ -5502,7 +5503,7 @@ static void DoTVShowPokemonAngler(void) TVShowDone(); break; } - ShowFieldMessage(sTVPokemonAnslerTextGroup[state]); + ShowFieldMessage(sTVPokemonAnglerTextGroup[state]); } static void DoTVShowTheWorldOfMasters(void) diff --git a/src/use_pokeblock.c b/src/use_pokeblock.c index b64ac4152b..06df5d0a33 100644 --- a/src/use_pokeblock.c +++ b/src/use_pokeblock.c @@ -173,8 +173,8 @@ static EWRAM_DATA struct UsePokeblockMenu *sMenu = NULL; static const u32 sMonFrame_Pal[] = INCBIN_U32("graphics/pokeblock/use_screen/mon_frame_pal.bin"); static const u32 sMonFrame_Gfx[] = INCBIN_U32("graphics/pokeblock/use_screen/mon_frame.4bpp"); -static const u32 sMonFrame_Tilemap[] = INCBIN_U32("graphics/pokeblock/use_screen/mon_frame.bin"); -static const u32 sGraphData_Tilemap[] = INCBIN_U32("graphics/pokeblock/use_screen/graph_data.bin"); +static const u32 sMonFrame_Tilemap[] = INCBIN_U32("graphics/pokeblock/use_screen/mon_frame.bin.lz"); +static const u32 sGraphData_Tilemap[] = INCBIN_U32("graphics/pokeblock/use_screen/graph_data.bin.lz"); // The condition/flavors aren't listed in their normal order in this file, they're listed as shown on the graph going counter-clockwise // Normally they would go Cool/Spicy, Beauty/Dry, Cute/Sweet, Smart/Bitter, Tough/Sour (also graph order, but clockwise) diff --git a/src/util.c b/src/util.c index 32f31a26dd..09381fcaf3 100644 --- a/src/util.c +++ b/src/util.c @@ -118,7 +118,7 @@ const u8 gMiscBlank_Gfx[] = INCBIN_U8("graphics/interface/blank.4bpp"); u8 CreateInvisibleSpriteWithCallback(void (*callback)(struct Sprite *)) { - u8 sprite = CreateSprite(&sInvisibleSpriteTemplate, 248, 168, 14); + u8 sprite = CreateSprite(&sInvisibleSpriteTemplate, DISPLAY_WIDTH + 8, DISPLAY_HEIGHT + 8, 14); gSprites[sprite].invisible = TRUE; gSprites[sprite].callback = callback; return sprite; @@ -158,7 +158,7 @@ void CopySpriteTiles(u8 shape, u8 size, u8 *tiles, u16 *tilemap, u8 *output) { u8 x, y; s8 i, j; - u8 xflip[32]; + u8 ALIGNED(4) xflip[32]; u8 h = sSpriteDimensions[shape][size][1]; u8 w = sSpriteDimensions[shape][size][0]; diff --git a/src/wild_encounter.c b/src/wild_encounter.c index cc3ce82273..87d7d866bb 100644 --- a/src/wild_encounter.c +++ b/src/wild_encounter.c @@ -783,7 +783,7 @@ void FishingWildEncounter(u8 rod) { species = GenerateFishingWildMon(gWildMonHeaders[GetCurrentMapWildMonHeaderId()].fishingMonsInfo, rod); } - IncrementGameStat(GAME_STAT_FISHING_CAPTURES); + IncrementGameStat(GAME_STAT_FISHING_ENCOUNTERS); SetPokemonAnglerSpecies(species); BattleSetup_StartWildBattle(); } diff --git a/src/wireless_communication_status_screen.c b/src/wireless_communication_status_screen.c index d10c39c7df..9a562cf7f7 100644 --- a/src/wireless_communication_status_screen.c +++ b/src/wireless_communication_status_screen.c @@ -222,7 +222,7 @@ static void CB2_InitWirelessCommunicationScreen(void) ChangeBgX(1, 0, BG_COORD_SET); ChangeBgY(1, 0, BG_COORD_SET); LoadPalette(sPalettes, BG_PLTT_ID(0), PLTT_SIZE_4BPP); - Menu_LoadStdPalAt(0xF0); + Menu_LoadStdPalAt(BG_PLTT_ID(15)); DynamicPlaceholderTextUtil_Reset(); FillBgTilemapBufferRect(0, 0, 0, 0, 32, 32, 15); CopyBgTilemapBufferToVram(1); diff --git a/tools/gbagfx/Makefile b/tools/gbagfx/Makefile index 8728fa8d09..8a52d52d37 100644 --- a/tools/gbagfx/Makefile +++ b/tools/gbagfx/Makefile @@ -1,4 +1,4 @@ -CC = gcc +CC ?= gcc CFLAGS = -Wall -Wextra -Werror -Wno-sign-compare -std=c11 -O2 -DPNG_SKIP_SETJMP_CHECK CFLAGS += $(shell pkg-config --cflags libpng) diff --git a/tools/gbagfx/convert_png.c b/tools/gbagfx/convert_png.c index a5fefbd8b6..c9c240efbb 100644 --- a/tools/gbagfx/convert_png.c +++ b/tools/gbagfx/convert_png.c @@ -130,7 +130,6 @@ void ReadPng(char *path, struct Image *image) FATAL_ERROR("Bit depth of image must be 1, 2, 4, or 8.\n"); image->pixels = ConvertBitDepth(image->pixels, bit_depth, image->bitDepth, image->width * image->height); free(src); - image->bitDepth = bit_depth; } } diff --git a/tools/gbagfx/gfx.c b/tools/gbagfx/gfx.c index 832e9bb397..1dfc38e2d0 100644 --- a/tools/gbagfx/gfx.c +++ b/tools/gbagfx/gfx.c @@ -204,6 +204,18 @@ static void ConvertToTiles8Bpp(unsigned char *src, unsigned char *dest, int numT } } +// For untiled, plain images +static void CopyPlainPixels(unsigned char *src, unsigned char *dest, int size, int dataWidth, bool invertColors) +{ + if (dataWidth == 0) return; + for (int i = 0; i < size; i += dataWidth) { + for (int j = dataWidth; j > 0; j--) { + unsigned char pixels = src[i + j - 1]; + *dest++ = invertColors ? ~pixels : pixels; + } + } +} + static void DecodeAffineTilemap(unsigned char *input, unsigned char *output, unsigned char *tilemap, int tileSize, int numTiles) { for (int i = 0; i < numTiles; i++) @@ -345,9 +357,9 @@ static unsigned char *DecodeTilemap(unsigned char *tiles, struct Tilemap *tilema return decoded; } -void ReadImage(char *path, int tilesWidth, int bitDepth, int metatileWidth, int metatileHeight, struct Image *image, bool invertColors) +void ReadTileImage(char *path, int tilesWidth, int metatileWidth, int metatileHeight, struct Image *image, bool invertColors) { - int tileSize = bitDepth * 8; + int tileSize = image->bitDepth * 8; int fileSize; unsigned char *buffer = ReadWholeFile(path, &fileSize); @@ -355,26 +367,25 @@ void ReadImage(char *path, int tilesWidth, int bitDepth, int metatileWidth, int int numTiles = fileSize / tileSize; if (image->tilemap.data.affine != NULL) { - int outTileSize = (bitDepth == 4 && image->palette.numColors > 16) ? 64 : tileSize; - buffer = DecodeTilemap(buffer, &image->tilemap, &numTiles, image->isAffine, tileSize, outTileSize, bitDepth); + int outTileSize = (image->bitDepth == 4 && image->palette.numColors > 16) ? 64 : tileSize; + buffer = DecodeTilemap(buffer, &image->tilemap, &numTiles, image->isAffine, tileSize, outTileSize, image->bitDepth); if (outTileSize == 64) { tileSize = 64; - image->bitDepth = bitDepth = 8; + image->bitDepth = 8; } } int tilesHeight = (numTiles + tilesWidth - 1) / tilesWidth; if (tilesWidth % metatileWidth != 0) - FATAL_ERROR("The width in tiles (%d) isn't a multiple of the specified metatile width (%d)", tilesWidth, metatileWidth); + FATAL_ERROR("The width in tiles (%d) isn't a multiple of the specified metatile width (%d)\n", tilesWidth, metatileWidth); if (tilesHeight % metatileHeight != 0) - FATAL_ERROR("The height in tiles (%d) isn't a multiple of the specified metatile height (%d)", tilesHeight, metatileHeight); + FATAL_ERROR("The height in tiles (%d) isn't a multiple of the specified metatile height (%d)\n", tilesHeight, metatileHeight); image->width = tilesWidth * 8; image->height = tilesHeight * 8; - image->bitDepth = bitDepth; image->pixels = calloc(tilesWidth * tilesHeight, tileSize); if (image->pixels == NULL) @@ -382,7 +393,7 @@ void ReadImage(char *path, int tilesWidth, int bitDepth, int metatileWidth, int int metatilesWide = tilesWidth / metatileWidth; - switch (bitDepth) { + switch (image->bitDepth) { case 1: ConvertFromTiles1Bpp(buffer, image->pixels, numTiles, metatilesWide, metatileWidth, metatileHeight, invertColors); break; @@ -397,9 +408,9 @@ void ReadImage(char *path, int tilesWidth, int bitDepth, int metatileWidth, int free(buffer); } -void WriteImage(char *path, enum NumTilesMode numTilesMode, int numTiles, int bitDepth, int metatileWidth, int metatileHeight, struct Image *image, bool invertColors) +void WriteTileImage(char *path, enum NumTilesMode numTilesMode, int numTiles, int metatileWidth, int metatileHeight, struct Image *image, bool invertColors) { - int tileSize = bitDepth * 8; + int tileSize = image->bitDepth * 8; if (image->width % 8 != 0) FATAL_ERROR("The width in pixels (%d) isn't a multiple of 8.\n", image->width); @@ -411,10 +422,10 @@ void WriteImage(char *path, enum NumTilesMode numTilesMode, int numTiles, int bi int tilesHeight = image->height / 8; if (tilesWidth % metatileWidth != 0) - FATAL_ERROR("The width in tiles (%d) isn't a multiple of the specified metatile width (%d)", tilesWidth, metatileWidth); + FATAL_ERROR("The width in tiles (%d) isn't a multiple of the specified metatile width (%d)\n", tilesWidth, metatileWidth); if (tilesHeight % metatileHeight != 0) - FATAL_ERROR("The height in tiles (%d) isn't a multiple of the specified metatile height (%d)", tilesHeight, metatileHeight); + FATAL_ERROR("The height in tiles (%d) isn't a multiple of the specified metatile height (%d)\n", tilesHeight, metatileHeight); int maxNumTiles = tilesWidth * tilesHeight; @@ -432,7 +443,7 @@ void WriteImage(char *path, enum NumTilesMode numTilesMode, int numTiles, int bi int metatilesWide = tilesWidth / metatileWidth; - switch (bitDepth) { + switch (image->bitDepth) { case 1: ConvertToTiles1Bpp(image->pixels, buffer, maxNumTiles, metatilesWide, metatileWidth, metatileHeight, invertColors); break; @@ -468,6 +479,57 @@ void WriteImage(char *path, enum NumTilesMode numTilesMode, int numTiles, int bi free(buffer); } +void ReadPlainImage(char *path, int dataWidth, struct Image *image, bool invertColors) +{ + int fileSize; + unsigned char *buffer = ReadWholeFile(path, &fileSize); + + if (fileSize % dataWidth != 0) + FATAL_ERROR("The image data size (%d) isn't a multiple of the specified data width %d.\n", fileSize, dataWidth); + + // png scanlines have wasted bits if they do not align to byte boundaries. + // pngs misaligned in this way are not currently handled. + int pixelsPerByte = 8 / image->bitDepth; + if (image->width % pixelsPerByte != 0) + FATAL_ERROR("The width in pixels (%d) isn't a multiple of %d.\n", image->width, pixelsPerByte); + + int numPixels = fileSize * pixelsPerByte; + image->height = (numPixels + image->width - 1) / image->width; + image->pixels = calloc(image->width * image->height * image->bitDepth / 8, 1); + + if (image->pixels == NULL) + FATAL_ERROR("Failed to allocate memory for pixels.\n"); + + CopyPlainPixels(buffer, image->pixels, fileSize, dataWidth, invertColors); + + free(buffer); +} + +void WritePlainImage(char *path, int dataWidth, struct Image *image, bool invertColors) +{ + int bufferSize = image->width * image->height * image->bitDepth / 8; + + if (bufferSize % dataWidth != 0) + FATAL_ERROR("The image data size (%d) isn't a multiple of the specified data width %d.\n", bufferSize, dataWidth); + + // png scanlines have wasted bits if they do not align to byte boundaries. + // pngs misaligned in this way are not currently handled. + int pixelsPerByte = 8 / image->bitDepth; + if (image->width % pixelsPerByte != 0) + FATAL_ERROR("The width in pixels (%d) isn't a multiple of %d.\n", image->width, pixelsPerByte); + + unsigned char *buffer = malloc(bufferSize); + + if (buffer == NULL) + FATAL_ERROR("Failed to allocate memory for pixels.\n"); + + CopyPlainPixels(image->pixels, buffer, bufferSize, dataWidth, invertColors); + + WriteWholeFile(path, buffer, bufferSize); + + free(buffer); +} + void FreeImage(struct Image *image) { if (image->tilemap.data.affine != NULL) diff --git a/tools/gbagfx/gfx.h b/tools/gbagfx/gfx.h index f1dbfcf4f7..1797d84dfd 100644 --- a/tools/gbagfx/gfx.h +++ b/tools/gbagfx/gfx.h @@ -50,8 +50,10 @@ enum NumTilesMode { NUM_TILES_ERROR, }; -void ReadImage(char *path, int tilesWidth, int bitDepth, int metatileWidth, int metatileHeight, struct Image *image, bool invertColors); -void WriteImage(char *path, enum NumTilesMode numTilesMode, int numTiles, int bitDepth, int metatileWidth, int metatileHeight, struct Image *image, bool invertColors); +void ReadTileImage(char *path, int tilesWidth, int metatileWidth, int metatileHeight, struct Image *image, bool invertColors); +void WriteTileImage(char *path, enum NumTilesMode numTilesMode, int numTiles, int metatileWidth, int metatileHeight, struct Image *image, bool invertColors); +void ReadPlainImage(char *path, int dataWidth, struct Image *image, bool invertColors); +void WritePlainImage(char *path, int dataWidth, struct Image *image, bool invertColors); void FreeImage(struct Image *image); void ReadGbaPalette(char *path, struct Palette *palette); void WriteGbaPalette(char *path, struct Palette *palette); diff --git a/tools/gbagfx/main.c b/tools/gbagfx/main.c index 5d4faacab0..98a1a1edf9 100644 --- a/tools/gbagfx/main.c +++ b/tools/gbagfx/main.c @@ -25,6 +25,9 @@ void ConvertGbaToPng(char *inputPath, char *outputPath, struct GbaToPngOptions * { struct Image image; + image.bitDepth = options->bitDepth; + image.tilemap.data.affine = NULL; + if (options->paletteFilePath != NULL) { char *paletteFileExtension = GetFileExtensionAfterDot(options->paletteFilePath); @@ -45,22 +48,25 @@ void ConvertGbaToPng(char *inputPath, char *outputPath, struct GbaToPngOptions * image.hasPalette = false; } - if (options->tilemapFilePath != NULL) + if (options->isTiled) { - int fileSize; - image.tilemap.data.affine = ReadWholeFile(options->tilemapFilePath, &fileSize); - if (options->isAffineMap && options->bitDepth != 8) - FATAL_ERROR("affine maps are necessarily 8bpp\n"); - image.isAffine = options->isAffineMap; - image.tilemap.size = fileSize; + if (options->tilemapFilePath != NULL) + { + int fileSize; + image.tilemap.data.affine = ReadWholeFile(options->tilemapFilePath, &fileSize); + if (options->isAffineMap && options->bitDepth != 8) + FATAL_ERROR("affine maps are necessarily 8bpp\n"); + image.isAffine = options->isAffineMap; + image.tilemap.size = fileSize; + } + ReadTileImage(inputPath, options->width, options->metatileWidth, options->metatileHeight, &image, !image.hasPalette); } else { - image.tilemap.data.affine = NULL; + image.width = options->width; + ReadPlainImage(inputPath, options->dataWidth, &image, !image.hasPalette); } - ReadImage(inputPath, options->width, options->bitDepth, options->metatileWidth, options->metatileHeight, &image, !image.hasPalette); - image.hasTransparency = options->hasTransparency; WritePng(outputPath, &image); @@ -77,7 +83,10 @@ void ConvertPngToGba(char *inputPath, char *outputPath, struct PngToGbaOptions * ReadPng(inputPath, &image); - WriteImage(outputPath, options->numTilesMode, options->numTiles, options->bitDepth, options->metatileWidth, options->metatileHeight, &image, !image.hasPalette); + if (options->isTiled) + WriteTileImage(outputPath, options->numTilesMode, options->numTiles, options->metatileWidth, options->metatileHeight, &image, !image.hasPalette); + else + WritePlainImage(outputPath, options->dataWidth, &image, !image.hasPalette); FreeImage(&image); } @@ -94,6 +103,8 @@ void HandleGbaToPngCommand(char *inputPath, char *outputPath, int argc, char **a options.metatileHeight = 1; options.tilemapFilePath = NULL; options.isAffineMap = false; + options.isTiled = true; + options.dataWidth = 1; for (int i = 3; i < argc; i++) { @@ -162,6 +173,22 @@ void HandleGbaToPngCommand(char *inputPath, char *outputPath, int argc, char **a { options.isAffineMap = true; } + else if (strcmp(option, "-plain") == 0) + { + options.isTiled = false; + } + else if (strcmp(option, "-data_width") == 0) + { + if (i + 1 >= argc) + FATAL_ERROR("No data width value following \"-data_width\".\n"); + i++; + + if (!ParseNumber(argv[i], NULL, 10, &options.dataWidth)) + FATAL_ERROR("Failed to parse data width.\n"); + + if (options.dataWidth < 1) + FATAL_ERROR("Data width must be positive.\n"); + } else { FATAL_ERROR("Unrecognized option \"%s\".\n", option); @@ -177,15 +204,16 @@ void HandleGbaToPngCommand(char *inputPath, char *outputPath, int argc, char **a void HandlePngToGbaCommand(char *inputPath, char *outputPath, int argc, char **argv) { char *outputFileExtension = GetFileExtensionAfterDot(outputPath); - int bitDepth = outputFileExtension[0] - '0'; struct PngToGbaOptions options; options.numTilesMode = NUM_TILES_IGNORE; options.numTiles = 0; - options.bitDepth = bitDepth; + options.bitDepth = outputFileExtension[0] - '0'; options.metatileWidth = 1; options.metatileHeight = 1; options.tilemapFilePath = NULL; options.isAffineMap = false; + options.isTiled = true; + options.dataWidth = 1; for (int i = 3; i < argc; i++) { @@ -236,6 +264,22 @@ void HandlePngToGbaCommand(char *inputPath, char *outputPath, int argc, char **a if (options.metatileHeight < 1) FATAL_ERROR("metatile height must be positive.\n"); } + else if (strcmp(option, "-plain") == 0) + { + options.isTiled = false; + } + else if (strcmp(option, "-data_width") == 0) + { + if (i + 1 >= argc) + FATAL_ERROR("No data width value following \"-data_width\".\n"); + i++; + + if (!ParseNumber(argv[i], NULL, 10, &options.dataWidth)) + FATAL_ERROR("Failed to parse data width.\n"); + + if (options.dataWidth < 1) + FATAL_ERROR("Data width must be positive.\n"); + } else { FATAL_ERROR("Unrecognized option \"%s\".\n", option); @@ -403,7 +447,7 @@ void HandleLZCompressCommand(char *inputPath, char *outputPath, int argc, char * else if (strcmp(option, "-search") == 0) { if (i + 1 >= argc) - FATAL_ERROR("No size following \"-overflow\".\n"); + FATAL_ERROR("No size following \"-search\".\n"); i++; diff --git a/tools/gbagfx/options.h b/tools/gbagfx/options.h index 250b723450..830158b52e 100644 --- a/tools/gbagfx/options.h +++ b/tools/gbagfx/options.h @@ -15,6 +15,8 @@ struct GbaToPngOptions { int metatileHeight; char *tilemapFilePath; bool isAffineMap; + bool isTiled; + int dataWidth; }; struct PngToGbaOptions { @@ -25,6 +27,8 @@ struct PngToGbaOptions { int metatileHeight; char *tilemapFilePath; bool isAffineMap; + bool isTiled; + int dataWidth; }; #endif // OPTIONS_H