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